public static SequencePosition?PositionOf(this ReadOnlySequence <byte> sequence, byte value) { SequencePosition position = sequence.Start; SequencePosition result = position; while (sequence.TryGet(ref position, out ReadOnlyMemory <byte> memory)) { var index = MemoryExtensions.IndexOf(memory.Span, value); if (index != -1) { result = sequence.GetPosition(index, result); return(result); } result = position; } return(null); }
public static SequencePosition?PositionAt(this ReadOnlySequence <byte> sequence, long index) { SequencePosition position = sequence.Start; SequencePosition result = position; while (sequence.TryGet(ref position, out ReadOnlyMemory <byte> memory)) { var span = memory.Span; if (span.Length > index) { result = sequence.GetPosition(index, result); return(result); } index -= span.Length; result = position; } return(null); }
public SequenceReader(ReadOnlySequence <T> sequence) { _usingSequence = true; CurrentSpanIndex = 0; Consumed = 0; _sequence = sequence; _memory = default; _currentPosition = sequence.Start; _length = -1; var first = sequence.First.Span; _nextPosition = sequence.GetPosition(first.Length); CurrentSpan = first; _moreData = first.Length > 0; if (!_moreData && !sequence.IsSingleSegment) { _moreData = true; GetNextSpan(); } }