Esempio n. 1
0
        private bool ConsumeString(byte first)
        {
            if (!BEncodingHelpers.IsDigit(first))
            {
                return(false);
            }

            ReadOnlySpan <byte> localSpan = _buffer.Slice(Consumed);

            int index = localSpan.IndexOf(BEncodingConstants.ColonSeparator);

            if (index == -1)
            {
                return(false);
            }

            if (first == '0')
            {
                if (index != 1)
                {
                    return(false);
                }

                Consumed += 2;
                ValueSpan = default;
            }
            else
            {
                if (!Utf8Parser.TryParse(localSpan.Slice(0, index), out int length, out int bytesConsumed) || bytesConsumed != index)
                {
                    return(false);
                }

                int consumed = Consumed + index + 1 + length;

                if ((uint)consumed > (uint)_buffer.Length)
                {
                    return(false);
                }

                Consumed = consumed;

                ValueSpan = localSpan.Slice(index + 1, length);
            }

            TokenType = BEncodingTokenType.String;
            return(true);
        }