/// <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)); }
/// <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)); }