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

📄 parser_id.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
字号:
/*=============================================================================    Copyright (c) 2001-2003 Joel de Guzman    Copyright (c) 2001 Daniel Nuffer    http://spirit.sourceforge.net/  Distributed under the Boost Software License, Version 1.0. (See accompanying  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)=============================================================================*/#if !defined(BOOST_SPIRIT_PARSER_ID_HPP)#define BOOST_SPIRIT_PARSER_ID_HPP#if defined(BOOST_SPIRIT_DEBUG)#   include <ostream>#endif#include <boost/spirit/home/classic/namespace.hpp>///////////////////////////////////////////////////////////////////////////////namespace boost { namespace spirit {BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN    ///////////////////////////////////////////////////////////////////////////    //    //  parser_id class    //    ///////////////////////////////////////////////////////////////////////////    class parser_id    {    public:                    parser_id()                     : p(0) {}        explicit    parser_id(void const* prule)    : p(prule) {}                    parser_id(std::size_t l_)       : l(l_) {}        bool operator==(parser_id const& x) const   { return p == x.p; }        bool operator!=(parser_id const& x) const   { return !(*this == x); }        bool operator<(parser_id const& x) const    { return p < x.p; }        std::size_t to_long() const                 { return l; }    private:        union        {            void const* p;            std::size_t l;        };    };    #if defined(BOOST_SPIRIT_DEBUG)    inline std::ostream&    operator<<(std::ostream& out, parser_id const& rid)    {        out << (unsigned int)rid.to_long();        return out;    }    #endif    ///////////////////////////////////////////////////////////////////////////    //    //  parser_tag_base class: base class of all parser tags    //    ///////////////////////////////////////////////////////////////////////////    struct parser_tag_base {};        ///////////////////////////////////////////////////////////////////////////    //    //  parser_address_tag class: tags a parser with its address    //    ///////////////////////////////////////////////////////////////////////////    struct parser_address_tag : parser_tag_base    {        parser_id id() const        { return parser_id(reinterpret_cast<std::size_t>(this)); }    };    ///////////////////////////////////////////////////////////////////////////    //    //  parser_tag class: tags a parser with an integer ID    //    ///////////////////////////////////////////////////////////////////////////    template <int N>    struct parser_tag : parser_tag_base    {        static parser_id id()        { return parser_id(std::size_t(N)); }    };    ///////////////////////////////////////////////////////////////////////////    //    //  dynamic_parser_tag class: tags a parser with a dynamically changeable    //  integer ID    //    ///////////////////////////////////////////////////////////////////////////    class dynamic_parser_tag : public parser_tag_base    {    public:            dynamic_parser_tag()         : tag(std::size_t(0)) {}                parser_id         id() const        {             return                 tag.to_long()                 ? tag                 : parser_id(reinterpret_cast<std::size_t>(this));         }        void set_id(parser_id id) { tag = id; }             private:            parser_id tag;    };///////////////////////////////////////////////////////////////////////////////BOOST_SPIRIT_CLASSIC_NAMESPACE_END}} // namespace BOOST_SPIRIT_CLASSIC_NS#endif

⌨️ 快捷键说明

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