public QueryOperatorEnumerator <TResult, int>[] GetPartitions(int partitionCount)
        {
            int count = ((this.m_count + partitionCount) - 1) / partitionCount;

            QueryOperatorEnumerator <TResult, int>[] enumeratorArray = new QueryOperatorEnumerator <TResult, int> [partitionCount];
            int index = 0;

            for (int i = 0; index < partitionCount; i += count)
            {
                if ((i + count) > this.m_count)
                {
                    enumeratorArray[index] = new RepeatEnumerator <TResult>(this.m_element, (i < this.m_count) ? (this.m_count - i) : 0, i);
                }
                else
                {
                    enumeratorArray[index] = new RepeatEnumerator <TResult>(this.m_element, count, i);
                }
                index++;
            }
            return(enumeratorArray);
        }
Example #2
0
        //-----------------------------------------------------------------------------------
        // Retrieves 'count' partitions, dividing the total count by the partition count,
        // and having each partition produce a certain number of repeated elements.
        //

        public QueryOperatorEnumerator <TResult, int>[] GetPartitions(int partitionCount)
        {
            // Calculate a stride size.
            int stride = (_count + partitionCount - 1) / partitionCount;

            // Now generate the actual enumerators. Each produces 'stride' elements, except
            // for the last partition which may produce fewer (if '_count' isn't evenly
            // divisible by 'partitionCount').
            QueryOperatorEnumerator <TResult, int>[] partitions = new QueryOperatorEnumerator <TResult, int> [partitionCount];
            for (int i = 0, offset = 0; i < partitionCount; i++, offset += stride)
            {
                if ((offset + stride) > _count)
                {
                    partitions[i] = new RepeatEnumerator(_element, offset < _count ? _count - offset : 0, offset);
                }
                else
                {
                    partitions[i] = new RepeatEnumerator(_element, stride, offset);
                }
            }

            return(partitions);
        }