Example #1
0
        private void BoundsCheck(SequencePosition start, SequencePosition position)
        {
            int          startIndex = start.Index;
            int          endIndex   = position.Index;
            SequenceType type       = GetSequenceType();

            startIndex = GetIndex(startIndex);
            endIndex   = GetIndex(endIndex);

            switch (type)
            {
            case SequenceType.OwnedMemory:
            case SequenceType.Array:
                if (endIndex > startIndex)
                {
                    ThrowHelper.ThrowArgumentOutOfRangeException_PositionOutOfRange();
                }
                return;

            case SequenceType.MemoryList:
                IMemoryList <T> segment    = (IMemoryList <T>)position.Segment;
                IMemoryList <T> memoryList = (IMemoryList <T>)start.Segment;

                if (segment.RunningIndex - startIndex > memoryList.RunningIndex - endIndex)
                {
                    ThrowHelper.ThrowArgumentOutOfRangeException_PositionOutOfRange();
                }
                return;

            default:
                ThrowHelper.ThrowInvalidOperationException_UnexpectedSegmentType();
                return;
            }
        }