/// <summary>
        /// Returns the first token in this sequence and moves forward.
        /// </summary>
        /// <returns></returns>
        public JsonToken Pop()
        {
            _prepareRead();
            _skipWhiteSpace();

            JsonToken token = JsonToken.Undefined;

            for (int length = 1; _zero + length <= _tokens.Length && (token.Type == JsonTokenType.Undefined || token.Type == JsonTokenType.Unknown); length++)
            {
                token = new JsonToken(_tokens.Substring(_zero, length));
            }

            _zero += token.Length;

            if (token.Type == JsonTokenType.String || token.Type == JsonTokenType.Number)
            {
                while (_zero < _tokens.Length && token.TryAppend(_tokens[_zero]))
                {
                    _zero++;
                }

                if (!token.IsValid())
                {
                    token = JsonToken.Undefined;
                }
            }

            return token;
        }