Exemplo n.º 1
0
        internal override void  WrapPartitionedStream <TKey>(
            PartitionedStream <TSource, TKey> inputStream, IPartitionedStreamRecipient <TSource> recipient, bool preferStriping, QuerySettings settings)
        {
            PartitionedStream <TSource, int> intKeyStream;
            int partitionCount = inputStream.PartitionCount;

            // If the index is not at least increasing, we need to reindex.
            if (m_prematureMergeNeeded)
            {
                intKeyStream = ExecuteAndCollectResults(inputStream, partitionCount, Child.OutputOrdered, preferStriping, settings).GetPartitionedStream();
            }
            else
            {
                Contract.Assert(inputStream is PartitionedStream <TSource, int>);
                intKeyStream = (PartitionedStream <TSource, int>)(object) inputStream;
            }

            // Generate the shared data.
            Shared <int>   sharedLastCandidate = new Shared <int>(-1);
            CountdownEvent sharedBarrier       = new CountdownEvent(partitionCount);

            PartitionedStream <TSource, int> outputStream =
                new PartitionedStream <TSource, int>(partitionCount, intKeyStream.KeyComparer, OrdinalIndexState.Shuffled);

            for (int i = 0; i < partitionCount; i++)
            {
                outputStream[i] = new LastQueryOperatorEnumerator <TKey>(
                    intKeyStream[i], m_predicate, sharedLastCandidate, sharedBarrier, settings.CancellationState.MergedCancellationToken);
            }
            recipient.Receive(outputStream);
        }
Exemplo n.º 2
0
        private void WrapHelper <TKey>(PartitionedStream <TSource, TKey> inputStream, IPartitionedStreamRecipient <TSource> recipient, QuerySettings settings)
        {
            int partitionCount = inputStream.PartitionCount;

            // Generate the shared data.
            LastQueryOperatorState <TKey> operatorState = new LastQueryOperatorState <TKey>();
            CountdownEvent sharedBarrier = new CountdownEvent(partitionCount);

            PartitionedStream <TSource, int> outputStream =
                new PartitionedStream <TSource, int>(partitionCount, Util.GetDefaultComparer <int>(), OrdinalIndexState.Shuffled);

            for (int i = 0; i < partitionCount; i++)
            {
                outputStream[i] = new LastQueryOperatorEnumerator <TKey>(
                    inputStream[i], _predicate, operatorState, sharedBarrier, settings.CancellationState.MergedCancellationToken,
                    inputStream.KeyComparer, i);
            }
            recipient.Receive(outputStream);
        }
Exemplo n.º 3
0
        internal override void WrapPartitionedStream <TKey>(PartitionedStream <TSource, TKey> inputStream, IPartitionedStreamRecipient <TSource> recipient, bool preferStriping, QuerySettings settings)
        {
            PartitionedStream <TSource, int> stream;
            int partitionCount = inputStream.PartitionCount;

            if (this.m_prematureMergeNeeded)
            {
                stream = QueryOperator <TSource> .ExecuteAndCollectResults <TKey>(inputStream, partitionCount, base.Child.OutputOrdered, preferStriping, settings).GetPartitionedStream();
            }
            else
            {
                stream = (PartitionedStream <TSource, int>)inputStream;
            }
            Shared <int>   sharedLastCandidate = new Shared <int>(-1);
            CountdownEvent sharedBarrier       = new CountdownEvent(partitionCount);
            PartitionedStream <TSource, int> partitionedStream = new PartitionedStream <TSource, int>(partitionCount, stream.KeyComparer, OrdinalIndexState.Shuffled);

            for (int i = 0; i < partitionCount; i++)
            {
                partitionedStream[i] = new LastQueryOperatorEnumerator <TSource, TKey>(stream[i], this.m_predicate, sharedLastCandidate, sharedBarrier, settings.CancellationState.MergedCancellationToken);
            }
            recipient.Receive <int>(partitionedStream);
        }