Example #1
0
        /// <summary>
        /// Creates an instance of <see cref="ReadOnlySequence{T}"/> from the <see cref="T:T[]"/>, start and index.
        /// </summary>
        public ReadOnlySequence(T[] array, int start, int length)
        {
            if (array == null ||
                (uint)start > (uint)array.Length ||
                (uint)length > (uint)(array.Length - start))
            {
                ThrowHelper.ThrowArgumentValidationException(array, start);
            }

            _sequenceStart = new SequencePosition(array, ReadOnlySequence.ArrayToSequenceStart(start));
            _sequenceEnd   = new SequencePosition(array, ReadOnlySequence.ArrayToSequenceEnd(start + length));
        }
Example #2
0
        /// <summary>
        /// Creates an instance of <see cref="ReadOnlySequence{T}"/> from linked memory list represented by start and end segments
        /// and corresponding indexes in them.
        /// </summary>
        public ReadOnlySequence(IMemoryList <T> startSegment, int startIndex, IMemoryList <T> endSegment, int endIndex)
        {
            if (startSegment == null ||
                endSegment == null ||
                (uint)startSegment.Memory.Length < (uint)startIndex ||
                (uint)endSegment.Memory.Length < (uint)endIndex ||
                (startSegment == endSegment && endIndex < startIndex))
            {
                ThrowHelper.ThrowArgumentValidationException(startSegment, startIndex, endSegment);
            }

            _sequenceStart = new SequencePosition(startSegment, ReadOnlySequence.MemoryListToSequenceStart(startIndex));
            _sequenceEnd   = new SequencePosition(endSegment, ReadOnlySequence.MemoryListToSequenceEnd(endIndex));
        }