Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ConsumeStringAndValidateMultiSegment()

bool System.Text.Json.Utf8JsonReader.ConsumeStringAndValidateMultiSegment ( ReadOnlySpan< byte > data,
int idx )
inlineprivate

Definition at line 2666 of file Utf8JsonReader.cs.

2667 {
2668 PartialStateForRollback state = CaptureState();
2669 HasValueSequence = false;
2670 int num = _buffer.Length - _consumed;
2671 _bytePositionInLine += idx + 1;
2672 bool flag = false;
2673 while (true)
2674 {
2675 if (idx < data.Length)
2676 {
2677 byte b = data[idx];
2678 switch (b)
2679 {
2680 case 34:
2681 if (flag)
2682 {
2683 flag = false;
2684 goto IL_01b7;
2685 }
2686 if (HasValueSequence)
2687 {
2689 _consumed = idx + 1;
2690 _totalConsumed += num;
2691 SequencePosition end = new SequencePosition(_currentPosition.GetObject(), _currentPosition.GetInteger() + idx);
2692 SequencePosition startPosition = state.GetStartPosition(1);
2694 }
2695 else
2696 {
2698 _consumed += idx + 2;
2699 ValueSpan = data.Slice(0, idx);
2700 }
2701 _stringHasEscaping = true;
2702 _tokenType = JsonTokenType.String;
2703 return true;
2704 case 92:
2705 flag = !flag;
2706 goto IL_01b7;
2707 default:
2708 {
2709 if (flag)
2710 {
2711 int num2 = JsonConstants.EscapableChars.IndexOf(b);
2712 if (num2 == -1)
2713 {
2715 ThrowHelper.ThrowJsonReaderException(ref this, ExceptionResource.InvalidCharacterAfterEscapeWithinString, b);
2716 }
2717 if (b == 117)
2718 {
2720 int num3 = 0;
2721 int num4 = idx + 1;
2722 while (true)
2723 {
2724 if (num4 < data.Length)
2725 {
2726 byte nextByte = data[num4];
2727 if (!JsonReaderHelper.IsHexDigit(nextByte))
2728 {
2730 ThrowHelper.ThrowJsonReaderException(ref this, ExceptionResource.InvalidHexCharacterWithinString, nextByte);
2731 }
2732 num3++;
2734 if (num3 >= 4)
2735 {
2736 break;
2737 }
2738 num4++;
2739 continue;
2740 }
2741 if (!GetNextSpan())
2742 {
2743 if (IsLastSpan)
2744 {
2746 ThrowHelper.ThrowJsonReaderException(ref this, ExceptionResource.EndOfStringNotFound, 0);
2747 }
2749 return false;
2750 }
2751 if (HasValueSequence)
2752 {
2753 _totalConsumed += data.Length;
2754 }
2755 data = _buffer;
2756 num4 = 0;
2757 HasValueSequence = true;
2758 }
2759 flag = false;
2760 idx = num4 + 1;
2761 break;
2762 }
2763 flag = false;
2764 }
2765 else if (b < 32)
2766 {
2768 ThrowHelper.ThrowJsonReaderException(ref this, ExceptionResource.InvalidCharacterWithinString, b);
2769 }
2770 goto IL_01b7;
2771 }
2772 IL_01b7:
2774 idx++;
2775 break;
2776 }
2777 }
2778 else
2779 {
2780 if (!GetNextSpan())
2781 {
2782 break;
2783 }
2784 if (HasValueSequence)
2785 {
2786 _totalConsumed += data.Length;
2787 }
2788 data = _buffer;
2789 idx = 0;
2790 HasValueSequence = true;
2791 }
2792 }
2793 if (IsLastSpan)
2794 {
2796 ThrowHelper.ThrowJsonReaderException(ref this, ExceptionResource.EndOfStringNotFound, 0);
2797 }
2799 return false;
2800 }
ReadOnlySequence< T > Slice(long start, long length)
ReadOnlySpan< T > Slice(int start)
PartialStateForRollback CaptureState()
readonly ReadOnlySequence< byte > _sequence
void RollBackState(in PartialStateForRollback state, bool isError=false)
ReadOnlySequence< byte > ValueSequence

References System.Text.Json.Utf8JsonReader._buffer, System.Text.Json.Utf8JsonReader._bytePositionInLine, System.Text.Json.Utf8JsonReader._consumed, System.Text.Json.Utf8JsonReader._currentPosition, System.Text.Json.Utf8JsonReader._sequence, System.Text.Json.Utf8JsonReader._stringHasEscaping, System.Text.Json.Utf8JsonReader._tokenType, System.Text.Json.Utf8JsonReader._totalConsumed, System.Text.Json.Utf8JsonReader.CaptureState(), System.Text.Json.Dictionary, System.Text.Json.JsonConstants.EscapableChars, System.SequencePosition.GetInteger(), System.Text.Json.Utf8JsonReader.GetNextSpan(), System.SequencePosition.GetObject(), System.Text.Json.Utf8JsonReader.HasValueSequence, System.Text.Json.JsonReaderHelper.IsHexDigit(), System.Text.Json.Utf8JsonReader.IsLastSpan, System.ReadOnlySpan< T >.Length, System.Text.Json.Utf8JsonReader.RollBackState(), System.ReadOnlySpan< T >.Slice(), System.Buffers.ReadOnlySequence< T >.Slice(), System.state, System.Text.Json.ThrowHelper.ThrowJsonReaderException(), System.Text.Json.Utf8JsonReader.ValueSequence, and System.Text.Json.Utf8JsonReader.ValueSpan.

Referenced by System.Text.Json.Utf8JsonReader.ConsumeStringMultiSegment().