Пример #1
0
        private static SingleRange GetEquallyDividedSubRange(SingleRange singleRange, int numSubRanges, int mySubRangeIndex)
        {
            var  rangeSize = singleRange.RangeSize();
            uint portion   = (uint)(rangeSize / numSubRanges);
            uint remainder = (uint)(rangeSize - portion * numSubRanges);
            uint start     = singleRange.Begin;

            for (int i = 0; i < numSubRanges; i++)
            {
                // (Begin, End]
                uint end = (unchecked (start + portion));
                // I want it to overflow on purpose. It will do the right thing.
                if (remainder > 0)
                {
                    end++;
                    remainder--;
                }
                if (i == mySubRangeIndex)
                {
                    return(new SingleRange(start, end));
                }
                start = end; // nextStart
            }
            throw new ArgumentException(nameof(mySubRangeIndex));
        }