Exemple #1
0
            public IEnumerator <(T[] _arr, int _fromIdx, int _toIdx, int _itIdx, int _absIdx)> Get2DEnumerator(int fromIdx,
                                                                                                               int toIdx)
            {
                if (toIdx < fromIdx)
                {
                    throw new ArgumentException("To cannot be lower or equal to From");
                }

                if (fromIdx < Lower)
                {
                    throw new ArgumentException("From cannot be lower than Lower bound");
                }

                if (fromIdx > Upper)
                {
                    throw new ArgumentException("From cannot be greater or equal to Upper bound");
                }

                if (toIdx < Lower)
                {
                    throw new ArgumentException("To cannot be lower or equal to Upper bound");
                }

                if (toIdx > Upper)
                {
                    throw new ArgumentException("To cannot be greater than Upper bound");
                }

                int remaining = toIdx - fromIdx + 1;

                // Fast-forward to first matching array
                int arrIdx = Segments.BinarySearch(
                    new SubSegment(null,
                                   fromIdx),
                    new PositionalBoundsComparer()
                    );

                fromIdx -= Segments[arrIdx].Lower;

                do
                {
                    SubSegment sSeg = Segments[arrIdx];
                    T[]        arr  = sSeg.Array;
                    toIdx = Math.Min(arr.Length,
                                     remaining + fromIdx) - 1;

                    yield return(arr, fromIdx, toIdx, sSeg.Lower - Lower + fromIdx, sSeg.Lower + fromIdx);

                    int lastLength = toIdx - fromIdx + 1;
                    remaining -= lastLength;

                    arrIdx++;
                    fromIdx = 0;
                } while (remaining > 0);
            }
Exemple #2
0
        private static void AssertIdentifier(SubSegment subSegment, string expected)
        {
            var identifier = Assert.IsType <Identifier>(subSegment);

            Assert.Equal(expected, identifier.Value);
        }
Exemple #3
0
 public MySubSegment(SubSegment subSegment)
 {
     this.P0    = subSegment.P0;
     this.P1    = subSegment.P1;
     this.Label = subSegment.Label;
 }