public void Enqueue(ParsingEvent @event)
            {
                switch (@event.Type)
                {
                case Events.EventType.StreamStart:
                case Events.EventType.DocumentStart:
                    highPriorityEvents.Enqueue(@event);
                    break;

                default:
                    normalPriorityEvents.Enqueue(@event);
                    break;
                }
            }
        /// <summary>
        /// Moves to the next event.
        /// </summary>
        /// <returns>Returns true if there are more events available, otherwise returns false.</returns>
        public bool MoveNext()
        {
            // No events after the end of the stream or error.
            if (state == ParserState.StreamEnd)
            {
                currentEvent = null;
                return(false);
            }
            else if (pendingEvents.Count == 0)
            {
                // Generate the next event.
                pendingEvents.Enqueue(StateMachine());
            }

            currentEvent = pendingEvents.Dequeue();
            return(true);
        }