⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 parser_input_stream.hpp

📁 yard lib, template for regular rule
💻 HPP
字号:

// released into the public domain
// by Christopher Diggins 2004
// http://www.cdiggins.com

//vc6.0 compile flag ok

#ifndef PARSER_INPUT_STREAM_HPP_INCLUDED
#define PARSER_INPUT_STREAM_HPP_INCLUDED

#include <assert.h>

namespace yard {

    template < typename Elem_T, typename Iter_T = Elem_T const * >
    struct ParserInputStream {
        typedef Elem_T element_type;
        typedef Iter_T iter_type;

        ParserInputStream(Iter_T begin, Iter_T end) : mCurPos(begin), m_beginPos(begin), mEndPos(end) { }

        Elem_T GetElem() {
            assert(!AtEnd());
            return * mCurPos;
        }

        void GotoNext() {
            assert(!AtEnd());
            ++mCurPos;
        }

        void GotoPre() {
            --mCurPos;
        }

        Iter_T GetPos() {
            return mCurPos;
        }

        void SetPos(Iter_T pos) {
            mCurPos = pos;
        }

        bool AdvancePast(Elem_T elem) {
            if (AtEnd()) {
                return false;
            }
            if (GetElem() == elem) {
                GotoNext();
                return true;
            }
            return false;
        }

        bool AtEnd() {
            return mCurPos == mEndPos;
        }
        Iter_T getBeginPos() {
            return m_beginPos;
        }
        Iter_T getEndPos() {
            return mEndPos;
        }

    private:
        const Iter_T m_beginPos;
        Iter_T mCurPos;
        const Iter_T mEndPos;
    };
}

#endif // #ifndef PARSER_INPUT_STREAM_HPP_INCLUDED

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -