Exemplo n.º 1
0
        public override void MultiSubscribe <TDatasetObserver>(Expression <Func <TDatasetObserver> > observer, int runsCount)
        {
            var inputConnections = _clientTerminal.ConnectionData.InputConnections;

            for (int i = 0; i < runsCount; i++)
            {
                IShardedDataset <TKeyO, TPayloadO, TDataSetO> deployedDataset = null;
                if (!_isDeployed)
                {
                    deployedDataset = Deploy();
                }

                if (!_isDeployed && deployedDataset == null)
                {
                    throw new InvalidOperationException();
                }
                else
                {
                    foreach (var key in inputConnections.Keys)
                    {
                        inputConnections[key].WriteInt32((int)CRATaskMessageType.READY);
                        inputConnections[key].WriteByteArray(Encoding.UTF8.GetBytes(SerializationHelper.Serialize(observer)));
                    }
                }
            }

            foreach (var key in inputConnections.Keys)
            {
                inputConnections[key].WriteInt32((int)CRATaskMessageType.RELEASE);
            }
        }
Exemplo n.º 2
0
        public IShardedDataset <TKeyO, TPayloadO, TDatasetO> Transform <TKey2, TPayload2, TDataset2, TKeyO, TPayloadO, TDatasetO>(
            IShardedDataset <TKey2, TPayload2, TDataset2> input2,
            Expression <Func <TDataset, TDataset2, TDatasetO> > transformer)
            where TDataset2 : IDataset <TKey2, TPayload2>
            where TDatasetO : IDataset <TKeyO, TPayloadO>
        {
            transformer = new ClosureEliminator().Visit(transformer) as Expression <Func <TDataset, TDataset2, TDatasetO> >;

            return(new DeployableShardedDataset <TKey, TPayload, TDataset,
                                                 TKey2, TPayload2, TDataset2, TKeyO, TPayloadO, TDatasetO>(this, input2, transformer));
        }
Exemplo n.º 3
0
        internal DeployableShardedDataset(IShardedDataset <TKeyI1, TPayloadI1, TDataSetI1> input,
                                          Expression <Func <TDataSetI1, TDataSetO> > transform)
        {
            _input1        = input;
            _input2        = null;
            _operationType = OperatorType.UnaryTransform;

            var closureEliminator = new ClosureEliminator();

            _unaryTransformer  = closureEliminator.Visit(transform) as Expression <Func <TDataSetI1, TDataSetO> >;
            _binaryTransformer = null;
            _splitter          = null;
            _merger            = null;
            _moveDescriptor    = null;
        }
Exemplo n.º 4
0
        internal DeployableShardedDataset(
            IDataProvider dataProvider,
            IShardedDataset <TKeyI1, TPayloadI1, TDataSetI1> input,
            Expression <Func <TDataSetI1, IMoveDescriptor, TDataSetI2[]> > splitter,
            Expression <Func <TDataSetI2[], IMoveDescriptor, TDataSetO> > merger, IMoveDescriptor moveDescriptor)
            : base(dataProvider)
        {
            _input1        = input;
            _input2        = null;
            _operationType = OperatorType.Move;

            var closureEliminator = new ClosureEliminator();

            _splitter          = closureEliminator.Visit(splitter) as Expression <Func <TDataSetI1, IMoveDescriptor, TDataSetI2[]> >;
            _merger            = closureEliminator.Visit(merger) as Expression <Func <TDataSetI2[], IMoveDescriptor, TDataSetO> >;
            _moveDescriptor    = moveDescriptor;
            _unaryTransformer  = null;
            _binaryTransformer = null;
            _dataProvider      = dataProvider;
        }
Exemplo n.º 5
0
        internal DeployableShardedDataset(
            IDataProvider dataProvider,
            IShardedDataset <TKeyI1, TPayloadI1, TDataSetI1> input1,
            IShardedDataset <TKeyI2, TPayloadI2, TDataSetI2> input2,
            Expression <Func <TDataSetI1, TDataSetI2, TDataSetO> > transform)
            : base(dataProvider)
        {
            _input1        = input1;
            _input2        = input2;
            _operationType = OperatorType.BinaryTransform;

            var closureEliminator = new ClosureEliminator();

            _binaryTransformer = closureEliminator.Visit(transform) as Expression <Func <TDataSetI1, TDataSetI2, TDataSetO> >;
            _unaryTransformer  = null;
            _splitter          = null;
            _merger            = null;
            _moveDescriptor    = null;
            _dataProvider      = dataProvider;
        }