9[DebuggerTypeProxy(typeof(ReadOnlySequenceDebugView<>))]
10[DebuggerDisplay(
"{ToString(),raw}")]
26 _next = sequence.Start;
158 else if (typeof(T) == typeof(
char))
191 if (startObject != endObject)
194 int num = readOnlySequenceSegment.Memory.Length -
index;
210 if (@
object != endObject)
258 if (startObject == endObject)
278 if ((ulong)((long)num2 +
start) > num3)
282 int num4 = readOnlySequenceSegment.Memory.Length - (int)
index;
304 uint num = (uint)
start.GetInteger();
311 if (startObject == endObject)
329 ulong num2 = (ulong)(readOnlySequenceSegment.
RunningIndex + num);
332 if (!
InRange(num2, start2, num3))
340 if ((ulong)((long)num2 +
length) > num3)
344 int num4 = readOnlySequenceSegment.Memory.Length - (int)num;
385 bool flag =
start.GetObject() !=
null;
407 if (typeof(T) == typeof(
char))
415 if (
Length <
int.MaxValue)
419 sequence.CopyTo(span);
423 return $
"System.Buffers.ReadOnlySequence<{typeof(T).Name}>[{Length}]";
443 bool flag =
obj ==
null;
453 if (startObject == endObject)
462 while (readOnlySequenceSegment !=
null && readOnlySequenceSegment !=
obj)
464 readOnlySequenceSegment = readOnlySequenceSegment.
Next;
466 if (readOnlySequenceSegment ==
null)
470 return readOnlySequenceSegment.RunningIndex + num;
485 bool result =
TryGetBuffer(in position, out memory, out next);
496 object @
object = position.GetObject();
505 int integer = position.GetInteger();
510 if (readOnlySequenceSegment != endObject)
518 memory = readOnlySequenceSegment.
Memory.Slice(integer);
522 memory = readOnlySequenceSegment.
Memory.Slice(integer,
index - integer);
527 if (@
object != endObject)
535 else if (typeof(T) == typeof(
char) && sequenceType ==
SequenceType.String)
551 if (startObject ==
null)
558 if ((startInteger | endInteger) >= 0)
563 return memory.
Slice(startInteger);
565 return memory.
Slice(startInteger, endInteger - startInteger);
579 if (startInteger >= 0)
581 return new ReadOnlyMemory<T>((T[])startObject, startInteger, (endInteger & 0x7FFFFFFF) - startInteger);
583 if (typeof(T) == typeof(
char) && endInteger < 0)
585 return (
ReadOnlyMemory<T>)(object)((
string)startObject).AsMemory(startInteger & 0x7FFFFFFF, endInteger - startInteger);
587 startInteger &= 0x7FFFFFFF;
595 if (startObject ==
null)
602 if ((startInteger | endInteger) >= 0)
607 return span.
Slice(startInteger);
609 return span.
Slice(startInteger, endInteger - startInteger);
623 if (startInteger >= 0)
625 return ((
ReadOnlySpan<T>)(T[])startObject).Slice(startInteger, (endInteger & 0x7FFFFFFF) - startInteger);
627 if (typeof(T) == typeof(
char) && endInteger < 0)
629 return ((
ReadOnlyMemory<T>)(
object)((
string)startObject).AsMemory()).Span.Slice(startInteger & 0x7FFFFFFF, endInteger - startInteger);
631 startInteger &= 0x7FFFFFFF;
632 return ((
MemoryManager<T>)startObject).Memory.Span.Slice(startInteger, endInteger - startInteger);
642 if (startObject != endObject)
645 int num = readOnlySequenceSegment.Memory.Length -
index;
667 int integer =
start.GetInteger();
669 if (@
object != endObject)
672 int num = readOnlySequenceSegment.Memory.Length - integer;
694 if (currentSegment !=
null && currentSegment != endObject)
702 currentSegment = currentSegment.
Next;
716 uint integer = (uint)position.GetInteger();
721 if (startObject == endObject)
731 if (positionIsNotNull)
741 private void BoundsCheck(uint sliceStartIndex,
object sliceStartObject, uint sliceEndIndex,
object sliceEndObject)
747 if (startObject == endObject)
749 if (sliceStartObject != sliceEndObject || sliceStartObject != startObject || sliceStartIndex > sliceEndIndex || sliceStartIndex < index || sliceEndIndex >
index2)
755 ulong num = sliceStartIndex;
756 ulong num2 = sliceEndIndex;
757 if (sliceStartObject !=
null)
761 if (sliceEndObject !=
null)
777 int num = startSegment.Memory.Length -
startIndex;
798 return Integer & 0x7FFFFFFF;
820 if (startObject != endObject)
824 return readOnlySequenceSegment2.RunningIndex +
index2 - (readOnlySequenceSegment.RunningIndex +
index);
891 if (startObject ==
null)
897 if (startInteger >= 0)
902 first = readOnlySequenceSegment.
Memory.Span;
905 first = first.Slice(startInteger);
910 first = first.Slice(startInteger, endInteger - startInteger);
919 first =
new ReadOnlySpan<T>((T[])startObject, startInteger, (endInteger & 0x7FFFFFFF) - startInteger);
931 if (hasMultipleSegments)
935 if (typeof(T) == typeof(
char) &&
endIndex < 0)
944internal static class ReadOnlySequence
ReadOnlyMemory< T > Memory
ReadOnlySequenceSegment< T >? Next
static bool TryGetString(ReadOnlyMemory< char > memory, [NotNullWhen(true)] out string? text, out int start, out int length)
static void ThrowArgumentOutOfRangeException(System.ExceptionArgument argument)
static void ThrowInvalidOperationException()
static void ThrowArgumentOutOfRangeException_PositionOutOfRange()
static void ThrowArgumentNullException(string name)
static void ThrowStartOrEndArgumentValidationException(long start)
static void ThrowInvalidOperationException_EndPositionNotReached()
static void ThrowArgumentOutOfRangeException_OffsetOutOfRange()
static void ThrowArgumentValidationException(Array array, int start)
ReadOnlyMemory< T > Current
ReadOnlyMemory< T > _currentMemory
Enumerator(in ReadOnlySequence< T > sequence)
readonly ReadOnlySequence< T > _sequence
ReadOnlySequence(ReadOnlySequenceSegment< T > startSegment, int startIndex, ReadOnlySequenceSegment< T > endSegment, int endIndex)
static SequencePosition SeekMultiSegment(ReadOnlySequenceSegment< T > currentSegment, object endObject, int endIndex, long offset, System.ExceptionArgument argument)
bool TryGetReadOnlySequenceSegment([NotNullWhen(true)] out ReadOnlySequenceSegment< T > startSegment, out int startIndex, [NotNullWhen(true)] out ReadOnlySequenceSegment< T > endSegment, out int endIndex)
readonly object _endObject
ReadOnlySequence< T > Slice(int start, int length)
static bool InRange(ulong value, ulong start, ulong end)
ReadOnlySequence< T > Slice(SequencePosition start, int length)
ReadOnlySequence(T[] array)
readonly int _startInteger
SequencePosition GetPosition(long offset)
ReadOnlySpan< T > FirstSpan
bool TryGetString([NotNullWhen(true)] out string text, out int start, out int length)
void BoundsCheck(uint sliceStartIndex, object sliceStartObject, uint sliceEndIndex, object sliceEndObject)
ReadOnlyMemory< T > GetFirstBuffer()
static int StringToSequenceStart(int startIndex)
ReadOnlySequence< T > Slice(long start, long length)
static int MemoryManagerToSequenceStart(int startIndex)
SequenceType GetSequenceType()
static int ArrayToSequenceEnd(int endIndex)
Enumerator GetEnumerator()
ReadOnlyMemory< T > First
readonly object _startObject
ReadOnlySequence< T > Slice(SequencePosition start, SequencePosition end)
ReadOnlySequence(object startSegment, int startIndexAndFlags, object endSegment, int endIndexAndFlags)
ReadOnlySequence< T > SliceImpl(in SequencePosition start, in SequencePosition end)
SequencePosition Seek(in SequencePosition start, long offset)
static SequencePosition GetEndPosition(ReadOnlySequenceSegment< T > startSegment, object startObject, int startIndex, object endObject, int endIndex, long length)
static bool InRange(uint value, uint start, uint end)
void GetFirstSpan(out ReadOnlySpan< T > first, out SequencePosition next)
ReadOnlySequence< T > SliceImpl(in SequencePosition start)
static int StringToSequenceEnd(int endIndex)
bool TryGetBuffer(in SequencePosition position, out ReadOnlyMemory< T > memory, out SequencePosition next)
SequencePosition Seek(long offset, System.ExceptionArgument exceptionArgument=System.ExceptionArgument.offset)
long GetOffset(SequencePosition position)
ReadOnlySpan< T > GetFirstSpan()
ReadOnlyMemory< T > GetFirstBufferSlow(object startObject, bool isMultiSegment)
ReadOnlySequence< T > Slice(int start, SequencePosition end)
ReadOnlySpan< T > GetFirstSpanSlow(object startObject, bool isMultiSegment)
ReadOnlySequence< T > Slice(SequencePosition start, long length)
ReadOnlySequence< T > Slice(long start)
ReadOnlySequence(ReadOnlyMemory< T > memory)
ReadOnlySequence(T[] array, int start, int length)
static int GetIndex(int Integer)
SequencePosition GetPosition(long offset, SequencePosition origin)
bool TryGet(ref SequencePosition position, out ReadOnlyMemory< T > memory, bool advance=true)
void BoundsCheck(in SequencePosition position, bool positionIsNotNull)
override string ToString()
ReadOnlySequence< T > Slice(SequencePosition start)
bool TryGetArray(out ArraySegment< T > segment)
static ReadOnlySpan< T > GetFirstSpanSlow(object startObject, int startIndex, int endIndex, bool hasMultipleSegments)
ReadOnlySequence< T > Slice(long start, SequencePosition end)
Memory< T > Slice(int start)
ReadOnlyMemory< T > Slice(int start)
ReadOnlySpan< T > Slice(int start)