Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
SequenceReader.cs
Go to the documentation of this file.
3
4namespace System.Buffers;
5
6public ref struct SequenceReader<T> where T : unmanaged, IEquatable<T>
7{
9
11
12 private bool _moreData;
13
14 private readonly long _length;
15
16 public readonly bool End => !_moreData;
17
19
21
23
24 public ReadOnlySpan<T> CurrentSpan { get; private set; }
25
26 public int CurrentSpanIndex { get; private set; }
27
29 {
30 [MethodImpl(MethodImplOptions.AggressiveInlining)]
31 get
32 {
34 }
35 }
36
37 public long Consumed { get; private set; }
38
39 public readonly long Remaining => Length - Consumed;
40
41 public readonly long Length
42 {
43 get
44 {
45 if (_length < 0)
46 {
48 }
49 return _length;
50 }
51 }
52
53 [MethodImpl(MethodImplOptions.AggressiveInlining)]
55 {
57 Consumed = 0L;
58 Sequence = sequence;
59 _currentPosition = sequence.Start;
60 _length = -1L;
61 sequence.GetFirstSpan(out var first, out _nextPosition);
62 CurrentSpan = first;
63 _moreData = first.Length > 0;
64 if (!_moreData && !sequence.IsSingleSegment)
65 {
66 _moreData = true;
68 }
69 }
70
71 [MethodImpl(MethodImplOptions.AggressiveInlining)]
72 public readonly bool TryPeek(out T value)
73 {
74 if (_moreData)
75 {
77 return true;
78 }
79 value = default(T);
80 return false;
81 }
82
83 public readonly bool TryPeek(long offset, out T value)
84 {
85 if (offset < 0)
86 {
88 }
89 if (!_moreData || Remaining <= offset)
90 {
91 value = default(T);
92 return false;
93 }
94 if (CurrentSpanIndex + offset <= CurrentSpan.Length - 1)
95 {
97 return true;
98 }
99 long num = offset - (CurrentSpan.Length - CurrentSpanIndex);
101 ReadOnlyMemory<T> memory;
102 while (Sequence.TryGet(ref position, out memory))
103 {
104 if (memory.Length > 0)
105 {
106 if (num < memory.Length)
107 {
108 break;
109 }
110 num -= memory.Length;
111 }
112 }
113 value = memory.Span[(int)num];
114 return true;
115 }
116
117 [MethodImpl(MethodImplOptions.AggressiveInlining)]
118 public bool TryRead(out T value)
119 {
120 if (End)
121 {
122 value = default(T);
123 return false;
124 }
127 Consumed++;
128 if (CurrentSpanIndex >= CurrentSpan.Length)
129 {
130 GetNextSpan();
131 }
132 return true;
133 }
134
135 [MethodImpl(MethodImplOptions.AggressiveInlining)]
136 public void Rewind(long count)
137 {
138 if ((ulong)count > (ulong)Consumed)
139 {
141 }
142 Consumed -= count;
143 if (CurrentSpanIndex >= count)
144 {
145 CurrentSpanIndex -= (int)count;
146 _moreData = true;
147 }
148 else
149 {
151 }
152 }
153
154 [MethodImpl(MethodImplOptions.NoInlining)]
155 private void RetreatToPreviousSpan(long consumed)
156 {
157 ResetReader();
158 Advance(consumed);
159 }
160
161 private void ResetReader()
162 {
164 Consumed = 0L;
167 if (Sequence.TryGet(ref _nextPosition, out var memory))
168 {
169 _moreData = true;
170 if (memory.Length == 0)
171 {
172 CurrentSpan = default(ReadOnlySpan<T>);
173 GetNextSpan();
174 }
175 else
176 {
177 CurrentSpan = memory.Span;
178 }
179 }
180 else
181 {
182 _moreData = false;
183 CurrentSpan = default(ReadOnlySpan<T>);
184 }
185 }
186
187 private void GetNextSpan()
188 {
189 if (!Sequence.IsSingleSegment)
190 {
191 SequencePosition nextPosition = _nextPosition;
192 ReadOnlyMemory<T> memory;
193 while (Sequence.TryGet(ref _nextPosition, out memory))
194 {
195 _currentPosition = nextPosition;
196 if (memory.Length > 0)
197 {
198 CurrentSpan = memory.Span;
200 return;
201 }
202 CurrentSpan = default(ReadOnlySpan<T>);
204 nextPosition = _nextPosition;
205 }
206 }
207 _moreData = false;
208 }
209
210 [MethodImpl(MethodImplOptions.AggressiveInlining)]
211 public void Advance(long count)
212 {
213 if ((count & int.MinValue) == 0L && CurrentSpan.Length - CurrentSpanIndex > (int)count)
214 {
215 CurrentSpanIndex += (int)count;
216 Consumed += count;
217 }
218 else
219 {
221 }
222 }
223
224 [MethodImpl(MethodImplOptions.AggressiveInlining)]
225 internal void AdvanceCurrentSpan(long count)
226 {
227 Consumed += count;
228 CurrentSpanIndex += (int)count;
229 if (CurrentSpanIndex >= CurrentSpan.Length)
230 {
231 GetNextSpan();
232 }
233 }
234
235 private void AdvanceToNextSpan(long count)
236 {
237 if (count < 0)
238 {
240 }
241 Consumed += count;
242 while (_moreData)
243 {
244 int num = CurrentSpan.Length - CurrentSpanIndex;
245 if (num > count)
246 {
247 CurrentSpanIndex += (int)count;
248 count = 0L;
249 break;
250 }
251 CurrentSpanIndex += num;
252 count -= num;
253 GetNextSpan();
254 if (count == 0L)
255 {
256 break;
257 }
258 }
259 if (count != 0L)
260 {
261 Consumed -= count;
263 }
264 }
265
266 [MethodImpl(MethodImplOptions.AggressiveInlining)]
267 public readonly bool TryCopyTo(Span<T> destination)
268 {
269 ReadOnlySpan<T> unreadSpan = UnreadSpan;
270 if (unreadSpan.Length >= destination.Length)
271 {
272 unreadSpan.Slice(0, destination.Length).CopyTo(destination);
273 return true;
274 }
276 }
277
279 {
280 if (Remaining < destination.Length)
281 {
282 return false;
283 }
284 ReadOnlySpan<T> unreadSpan = UnreadSpan;
285 unreadSpan.CopyTo(destination);
286 int num = unreadSpan.Length;
288 ReadOnlyMemory<T> memory;
289 while (Sequence.TryGet(ref position, out memory))
290 {
291 if (memory.Length > 0)
292 {
293 ReadOnlySpan<T> span = memory.Span;
294 int num2 = Math.Min(span.Length, destination.Length - num);
295 span.Slice(0, num2).CopyTo(destination.Slice(num));
296 num += num2;
297 if (num >= destination.Length)
298 {
299 break;
300 }
301 }
302 }
303 return true;
304 }
305
306 public bool TryReadTo(out ReadOnlySpan<T> span, T delimiter, bool advancePastDelimiter = true)
307 {
308 ReadOnlySpan<T> unreadSpan = UnreadSpan;
309 int num = unreadSpan.IndexOf(delimiter);
310 if (num != -1)
311 {
312 span = ((num == 0) ? default(ReadOnlySpan<T>) : unreadSpan.Slice(0, num));
313 AdvanceCurrentSpan(num + (advancePastDelimiter ? 1 : 0));
314 return true;
315 }
316 return TryReadToSlow(out span, delimiter, advancePastDelimiter);
317 }
318
319 private bool TryReadToSlow(out ReadOnlySpan<T> span, T delimiter, bool advancePastDelimiter)
320 {
321 if (!TryReadToInternal(out var sequence, delimiter, advancePastDelimiter, CurrentSpan.Length - CurrentSpanIndex))
322 {
323 span = default(ReadOnlySpan<T>);
324 return false;
325 }
326 span = (sequence.IsSingleSegment ? sequence.First.Span : ((ReadOnlySpan<T>)BuffersExtensions.ToArray(in sequence)));
327 return true;
328 }
329
330 public bool TryReadTo(out ReadOnlySpan<T> span, T delimiter, T delimiterEscape, bool advancePastDelimiter = true)
331 {
332 ReadOnlySpan<T> unreadSpan = UnreadSpan;
333 int num = unreadSpan.IndexOf(delimiter);
334 if ((num > 0 && !unreadSpan[num - 1].Equals(delimiterEscape)) || num == 0)
335 {
336 span = unreadSpan.Slice(0, num);
337 AdvanceCurrentSpan(num + (advancePastDelimiter ? 1 : 0));
338 return true;
339 }
340 return TryReadToSlow(out span, delimiter, delimiterEscape, num, advancePastDelimiter);
341 }
342
343 private bool TryReadToSlow(out ReadOnlySpan<T> span, T delimiter, T delimiterEscape, int index, bool advancePastDelimiter)
344 {
345 if (!TryReadToSlow(out ReadOnlySequence<T> sequence, delimiter, delimiterEscape, index, advancePastDelimiter))
346 {
347 span = default(ReadOnlySpan<T>);
348 return false;
349 }
350 span = (sequence.IsSingleSegment ? sequence.First.Span : ((ReadOnlySpan<T>)BuffersExtensions.ToArray(in sequence)));
351 return true;
352 }
353
354 private bool TryReadToSlow(out ReadOnlySequence<T> sequence, T delimiter, T delimiterEscape, int index, bool advancePastDelimiter)
355 {
356 SequenceReader<T> sequenceReader = this;
358 bool flag = false;
359 do
360 {
361 if (index >= 0)
362 {
363 if (!(index == 0 && flag))
364 {
365 if (index > 0 && span[index - 1].Equals(delimiterEscape))
366 {
367 int num = 1;
368 int num2 = index - 2;
369 while (num2 >= 0 && span[num2].Equals(delimiterEscape))
370 {
371 num2--;
372 }
373 if (num2 < 0 && flag)
374 {
375 num++;
376 }
377 num += index - 2 - num2;
378 if (((uint)num & (true ? 1u : 0u)) != 0)
379 {
380 Advance(index + 1);
381 flag = false;
382 span = UnreadSpan;
383 goto IL_01bd;
384 }
385 }
387 sequence = Sequence.Slice(sequenceReader.Position, Position);
388 if (advancePastDelimiter)
389 {
390 Advance(1L);
391 }
392 return true;
393 }
394 flag = false;
395 Advance(index + 1);
396 span = UnreadSpan;
397 }
398 else
399 {
400 if (span.Length > 0 && span[span.Length - 1].Equals(delimiterEscape))
401 {
402 int num3 = 1;
403 int num4 = span.Length - 2;
404 while (num4 >= 0 && span[num4].Equals(delimiterEscape))
405 {
406 num4--;
407 }
408 num3 += span.Length - 2 - num4;
409 flag = ((!(num4 < 0 && flag)) ? ((num3 & 1) != 0) : ((num3 & 1) == 0));
410 }
411 else
412 {
413 flag = false;
414 }
416 span = CurrentSpan;
417 }
418 goto IL_01bd;
419 IL_01bd:
420 index = span.IndexOf(delimiter);
421 }
422 while (!End);
423 this = sequenceReader;
424 sequence = default(ReadOnlySequence<T>);
425 return false;
426 }
427
428 public bool TryReadTo(out ReadOnlySequence<T> sequence, T delimiter, bool advancePastDelimiter = true)
429 {
430 return TryReadToInternal(out sequence, delimiter, advancePastDelimiter);
431 }
432
433 private bool TryReadToInternal(out ReadOnlySequence<T> sequence, T delimiter, bool advancePastDelimiter, int skip = 0)
434 {
435 SequenceReader<T> sequenceReader = this;
436 if (skip > 0)
437 {
438 Advance(skip);
439 }
441 while (_moreData)
442 {
443 int num = span.IndexOf(delimiter);
444 if (num != -1)
445 {
446 if (num > 0)
447 {
449 }
450 sequence = Sequence.Slice(sequenceReader.Position, Position);
451 if (advancePastDelimiter)
452 {
453 Advance(1L);
454 }
455 return true;
456 }
458 span = CurrentSpan;
459 }
460 this = sequenceReader;
461 sequence = default(ReadOnlySequence<T>);
462 return false;
463 }
464
465 public bool TryReadTo(out ReadOnlySequence<T> sequence, T delimiter, T delimiterEscape, bool advancePastDelimiter = true)
466 {
467 SequenceReader<T> sequenceReader = this;
469 bool flag = false;
470 while (_moreData)
471 {
472 int num = span.IndexOf(delimiter);
473 if (num != -1)
474 {
475 if (!(num == 0 && flag))
476 {
477 if (num > 0 && span[num - 1].Equals(delimiterEscape))
478 {
479 int num2 = 0;
480 int num3 = num;
481 while (num3 > 0 && span[num3 - 1].Equals(delimiterEscape))
482 {
483 num3--;
484 num2++;
485 }
486 if (num2 == num && flag)
487 {
488 num2++;
489 }
490 flag = false;
491 if (((uint)num2 & (true ? 1u : 0u)) != 0)
492 {
493 Advance(num + 1);
494 span = UnreadSpan;
495 continue;
496 }
497 }
498 if (num > 0)
499 {
500 Advance(num);
501 }
502 sequence = Sequence.Slice(sequenceReader.Position, Position);
503 if (advancePastDelimiter)
504 {
505 Advance(1L);
506 }
507 return true;
508 }
509 flag = false;
510 Advance(num + 1);
511 span = UnreadSpan;
512 }
513 else
514 {
515 int num4 = 0;
516 int num5 = span.Length;
517 while (num5 > 0 && span[num5 - 1].Equals(delimiterEscape))
518 {
519 num5--;
520 num4++;
521 }
522 if (flag && num4 == span.Length)
523 {
524 num4++;
525 }
526 flag = num4 % 2 != 0;
527 Advance(span.Length);
528 span = CurrentSpan;
529 }
530 }
531 this = sequenceReader;
532 sequence = default(ReadOnlySequence<T>);
533 return false;
534 }
535
536 [MethodImpl(MethodImplOptions.AggressiveInlining)]
537 public bool TryReadToAny(out ReadOnlySpan<T> span, ReadOnlySpan<T> delimiters, bool advancePastDelimiter = true)
538 {
539 ReadOnlySpan<T> unreadSpan = UnreadSpan;
540 int num = ((delimiters.Length == 2) ? unreadSpan.IndexOfAny(delimiters[0], delimiters[1]) : unreadSpan.IndexOfAny(delimiters));
541 if (num != -1)
542 {
543 span = unreadSpan.Slice(0, num);
544 Advance(num + (advancePastDelimiter ? 1 : 0));
545 return true;
546 }
547 return TryReadToAnySlow(out span, delimiters, advancePastDelimiter);
548 }
549
550 private bool TryReadToAnySlow(out ReadOnlySpan<T> span, ReadOnlySpan<T> delimiters, bool advancePastDelimiter)
551 {
552 if (!TryReadToAnyInternal(out var sequence, delimiters, advancePastDelimiter, CurrentSpan.Length - CurrentSpanIndex))
553 {
554 span = default(ReadOnlySpan<T>);
555 return false;
556 }
557 span = (sequence.IsSingleSegment ? sequence.First.Span : ((ReadOnlySpan<T>)BuffersExtensions.ToArray(in sequence)));
558 return true;
559 }
560
561 public bool TryReadToAny(out ReadOnlySequence<T> sequence, ReadOnlySpan<T> delimiters, bool advancePastDelimiter = true)
562 {
563 return TryReadToAnyInternal(out sequence, delimiters, advancePastDelimiter);
564 }
565
566 private bool TryReadToAnyInternal(out ReadOnlySequence<T> sequence, ReadOnlySpan<T> delimiters, bool advancePastDelimiter, int skip = 0)
567 {
568 SequenceReader<T> sequenceReader = this;
569 if (skip > 0)
570 {
571 Advance(skip);
572 }
574 while (!End)
575 {
576 int num = ((delimiters.Length == 2) ? span.IndexOfAny(delimiters[0], delimiters[1]) : span.IndexOfAny(delimiters));
577 if (num != -1)
578 {
579 if (num > 0)
580 {
582 }
583 sequence = Sequence.Slice(sequenceReader.Position, Position);
584 if (advancePastDelimiter)
585 {
586 Advance(1L);
587 }
588 return true;
589 }
590 Advance(span.Length);
591 span = CurrentSpan;
592 }
593 this = sequenceReader;
594 sequence = default(ReadOnlySequence<T>);
595 return false;
596 }
597
598 public bool TryReadTo(out ReadOnlySpan<T> span, ReadOnlySpan<T> delimiter, bool advancePastDelimiter = true)
599 {
600 ReadOnlySpan<T> unreadSpan = UnreadSpan;
601 int num = unreadSpan.IndexOf(delimiter);
602 if (num >= 0)
603 {
604 span = unreadSpan.Slice(0, num);
605 AdvanceCurrentSpan(num + (advancePastDelimiter ? delimiter.Length : 0));
606 return true;
607 }
608 return TryReadToSlow(out span, delimiter, advancePastDelimiter);
609 }
610
611 private bool TryReadToSlow(out ReadOnlySpan<T> span, ReadOnlySpan<T> delimiter, bool advancePastDelimiter)
612 {
613 if (!TryReadTo(out ReadOnlySequence<T> sequence, delimiter, advancePastDelimiter))
614 {
615 span = default(ReadOnlySpan<T>);
616 return false;
617 }
618 span = (sequence.IsSingleSegment ? sequence.First.Span : ((ReadOnlySpan<T>)BuffersExtensions.ToArray(in sequence)));
619 return true;
620 }
621
622 public bool TryReadTo(out ReadOnlySequence<T> sequence, ReadOnlySpan<T> delimiter, bool advancePastDelimiter = true)
623 {
624 if (delimiter.Length == 0)
625 {
626 sequence = default(ReadOnlySequence<T>);
627 return true;
628 }
629 SequenceReader<T> sequenceReader = this;
630 bool flag = false;
631 while (!End)
632 {
633 if (!TryReadTo(out sequence, delimiter[0], advancePastDelimiter: false))
634 {
635 this = sequenceReader;
636 return false;
637 }
638 if (delimiter.Length == 1)
639 {
640 if (advancePastDelimiter)
641 {
642 Advance(1L);
643 }
644 return true;
645 }
646 if (IsNext(delimiter))
647 {
648 if (flag)
649 {
650 sequence = sequenceReader.Sequence.Slice(sequenceReader.Consumed, Consumed - sequenceReader.Consumed);
651 }
652 if (advancePastDelimiter)
653 {
654 Advance(delimiter.Length);
655 }
656 return true;
657 }
658 Advance(1L);
659 flag = true;
660 }
661 this = sequenceReader;
662 sequence = default(ReadOnlySequence<T>);
663 return false;
664 }
665
666 public bool TryAdvanceTo(T delimiter, bool advancePastDelimiter = true)
667 {
668 ReadOnlySpan<T> unreadSpan = UnreadSpan;
669 int num = unreadSpan.IndexOf(delimiter);
670 if (num != -1)
671 {
672 Advance(advancePastDelimiter ? (num + 1) : num);
673 return true;
674 }
675 ReadOnlySequence<T> sequence;
676 return TryReadToInternal(out sequence, delimiter, advancePastDelimiter);
677 }
678
679 public bool TryAdvanceToAny(ReadOnlySpan<T> delimiters, bool advancePastDelimiter = true)
680 {
681 ReadOnlySpan<T> unreadSpan = UnreadSpan;
682 int num = unreadSpan.IndexOfAny(delimiters);
683 if (num != -1)
684 {
685 AdvanceCurrentSpan(num + (advancePastDelimiter ? 1 : 0));
686 return true;
687 }
688 ReadOnlySequence<T> sequence;
689 return TryReadToAnyInternal(out sequence, delimiters, advancePastDelimiter);
690 }
691
692 public long AdvancePast(T value)
693 {
694 long consumed = Consumed;
695 do
696 {
697 int i;
698 for (i = CurrentSpanIndex; i < CurrentSpan.Length && CurrentSpan[i].Equals(value); i++)
699 {
700 }
701 int num = i - CurrentSpanIndex;
702 if (num == 0)
703 {
704 break;
705 }
707 }
708 while (CurrentSpanIndex == 0 && !End);
709 return Consumed - consumed;
710 }
711
713 {
714 long consumed = Consumed;
715 do
716 {
717 int i;
718 for (i = CurrentSpanIndex; i < CurrentSpan.Length && values.IndexOf(CurrentSpan[i]) != -1; i++)
719 {
720 }
721 int num = i - CurrentSpanIndex;
722 if (num == 0)
723 {
724 break;
725 }
727 }
728 while (CurrentSpanIndex == 0 && !End);
729 return Consumed - consumed;
730 }
731
732 public long AdvancePastAny(T value0, T value1, T value2, T value3)
733 {
734 long consumed = Consumed;
735 do
736 {
737 int i;
738 for (i = CurrentSpanIndex; i < CurrentSpan.Length; i++)
739 {
740 T val = CurrentSpan[i];
741 if (!val.Equals(value0) && !val.Equals(value1) && !val.Equals(value2) && !val.Equals(value3))
742 {
743 break;
744 }
745 }
746 int num = i - CurrentSpanIndex;
747 if (num == 0)
748 {
749 break;
750 }
752 }
753 while (CurrentSpanIndex == 0 && !End);
754 return Consumed - consumed;
755 }
756
757 public long AdvancePastAny(T value0, T value1, T value2)
758 {
759 long consumed = Consumed;
760 do
761 {
762 int i;
763 for (i = CurrentSpanIndex; i < CurrentSpan.Length; i++)
764 {
765 T val = CurrentSpan[i];
766 if (!val.Equals(value0) && !val.Equals(value1) && !val.Equals(value2))
767 {
768 break;
769 }
770 }
771 int num = i - CurrentSpanIndex;
772 if (num == 0)
773 {
774 break;
775 }
777 }
778 while (CurrentSpanIndex == 0 && !End);
779 return Consumed - consumed;
780 }
781
782 public long AdvancePastAny(T value0, T value1)
783 {
784 long consumed = Consumed;
785 do
786 {
787 int i;
788 for (i = CurrentSpanIndex; i < CurrentSpan.Length; i++)
789 {
790 T val = CurrentSpan[i];
791 if (!val.Equals(value0) && !val.Equals(value1))
792 {
793 break;
794 }
795 }
796 int num = i - CurrentSpanIndex;
797 if (num == 0)
798 {
799 break;
800 }
802 }
803 while (CurrentSpanIndex == 0 && !End);
804 return Consumed - consumed;
805 }
806
807 public void AdvanceToEnd()
808 {
809 if (_moreData)
810 {
812 CurrentSpan = default(ReadOnlySpan<T>);
816 _moreData = false;
817 }
818 }
819
820 [MethodImpl(MethodImplOptions.AggressiveInlining)]
821 public bool IsNext(T next, bool advancePast = false)
822 {
823 if (End)
824 {
825 return false;
826 }
827 if (CurrentSpan[CurrentSpanIndex].Equals(next))
828 {
829 if (advancePast)
830 {
832 }
833 return true;
834 }
835 return false;
836 }
837
838 [MethodImpl(MethodImplOptions.AggressiveInlining)]
839 public bool IsNext(ReadOnlySpan<T> next, bool advancePast = false)
840 {
841 ReadOnlySpan<T> unreadSpan = UnreadSpan;
842 if (unreadSpan.StartsWith(next))
843 {
844 if (advancePast)
845 {
847 }
848 return true;
849 }
850 if (unreadSpan.Length < next.Length)
851 {
852 return IsNextSlow(next, advancePast);
853 }
854 return false;
855 }
856
857 private bool IsNextSlow(ReadOnlySpan<T> next, bool advancePast)
858 {
860 int length = next.Length;
862 while (next.StartsWith(value))
863 {
864 if (next.Length == value.Length)
865 {
866 if (advancePast)
867 {
869 }
870 return true;
871 }
872 ReadOnlyMemory<T> memory;
873 do
874 {
875 if (!Sequence.TryGet(ref position, out memory))
876 {
877 return false;
878 }
879 }
880 while (memory.Length <= 0);
881 next = next.Slice(value.Length);
882 value = memory.Span;
883 if (value.Length > next.Length)
884 {
885 value = value.Slice(0, next.Length);
886 }
887 }
888 return false;
889 }
890}
static byte Min(byte val1, byte val2)
Definition Math.cs:912
static void ThrowArgumentOutOfRangeException(System.ExceptionArgument argument)
static void ThrowArgumentOutOfRangeException_OffsetOutOfRange()
ReadOnlySequence< T > Slice(long start, long length)
ReadOnlySequence< T > Sequence
bool TryReadToAny(out ReadOnlySequence< T > sequence, ReadOnlySpan< T > delimiters, bool advancePastDelimiter=true)
readonly ReadOnlySpan< T > UnreadSpan
long AdvancePastAny(T value0, T value1)
bool TryReadToAnySlow(out ReadOnlySpan< T > span, ReadOnlySpan< T > delimiters, bool advancePastDelimiter)
readonly bool TryCopyMultisegment(Span< T > destination)
bool TryReadToSlow(out ReadOnlySpan< T > span, T delimiter, bool advancePastDelimiter)
bool TryAdvanceTo(T delimiter, bool advancePastDelimiter=true)
bool TryReadTo(out ReadOnlySequence< T > sequence, T delimiter, bool advancePastDelimiter=true)
SequenceReader(ReadOnlySequence< T > sequence)
readonly bool TryCopyTo(Span< T > destination)
bool TryReadTo(out ReadOnlySpan< T > span, ReadOnlySpan< T > delimiter, bool advancePastDelimiter=true)
long AdvancePastAny(ReadOnlySpan< T > values)
bool TryReadToSlow(out ReadOnlySpan< T > span, ReadOnlySpan< T > delimiter, bool advancePastDelimiter)
readonly ReadOnlySequence< T > UnreadSequence
readonly SequencePosition Position
readonly bool TryPeek(out T value)
bool TryReadTo(out ReadOnlySequence< T > sequence, ReadOnlySpan< T > delimiter, bool advancePastDelimiter=true)
bool TryReadToSlow(out ReadOnlySpan< T > span, T delimiter, T delimiterEscape, int index, bool advancePastDelimiter)
bool TryReadToAny(out ReadOnlySpan< T > span, ReadOnlySpan< T > delimiters, bool advancePastDelimiter=true)
bool TryReadToSlow(out ReadOnlySequence< T > sequence, T delimiter, T delimiterEscape, int index, bool advancePastDelimiter)
bool IsNext(T next, bool advancePast=false)
long AdvancePastAny(T value0, T value1, T value2, T value3)
long AdvancePastAny(T value0, T value1, T value2)
readonly bool TryPeek(long offset, out T value)
bool TryReadTo(out ReadOnlySpan< T > span, T delimiter, bool advancePastDelimiter=true)
SequencePosition _currentPosition
bool IsNextSlow(ReadOnlySpan< T > next, bool advancePast)
bool TryReadToAnyInternal(out ReadOnlySequence< T > sequence, ReadOnlySpan< T > delimiters, bool advancePastDelimiter, int skip=0)
bool TryReadTo(out ReadOnlySpan< T > span, T delimiter, T delimiterEscape, bool advancePastDelimiter=true)
bool TryReadToInternal(out ReadOnlySequence< T > sequence, T delimiter, bool advancePastDelimiter, int skip=0)
bool TryAdvanceToAny(ReadOnlySpan< T > delimiters, bool advancePastDelimiter=true)
bool TryReadTo(out ReadOnlySequence< T > sequence, T delimiter, T delimiterEscape, bool advancePastDelimiter=true)
void AdvanceCurrentSpan(long count)
void RetreatToPreviousSpan(long consumed)
bool IsNext(ReadOnlySpan< T > next, bool advancePast=false)
unsafe ReadOnlySpan< T > Span
void CopyTo(Span< T > destination)
override bool Equals(object? obj)
ReadOnlySpan< T > Slice(int start)