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

📄 multi_pass.hpp

📁 Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work
💻 HPP
字号:
//  Copyright (c) 2001, Daniel C. Nuffer//  Copyright (c) 2001-2008, Hartmut Kaiser// //  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_ITERATOR_MULTI_PASS_MAR_16_2007_1122AM)#define BOOST_SPIRIT_ITERATOR_MULTI_PASS_MAR_16_2007_1122AM#include <boost/spirit/home/support/iterators/multi_pass_fwd.hpp>#include <boost/iterator.hpp>#include <boost/mpl/bool.hpp>#include <iterator>#include <algorithm> ///////////////////////////////////////////////////////////////////////////////namespace boost { namespace spirit { namespace detail{    ///////////////////////////////////////////////////////////////////////////    template <typename T>    inline void swap(T& t1, T& t2)    {        using std::swap;        using boost::spirit::swap;        swap(t1, t2);    }    #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)    ///////////////////////////////////////////////////////////////////////////    //  Meta-function to generate a std::iterator<> base class for multi_pass.     //  This is used mainly to improve conformance of compilers not supporting     //  PTS and thus relying on inheritance to recognize an iterator.    //    //  We are using boost::iterator<> because it offers an automatic     //  workaround for broken std::iterator<> implementations.    ///////////////////////////////////////////////////////////////////////////    template <typename T, typename InputPolicy>    struct iterator_base_creator    {        typedef typename InputPolicy::BOOST_NESTED_TEMPLATE unique<T> input_type;        typedef boost::iterator <            std::forward_iterator_tag,            typename input_type::value_type,            typename input_type::difference_type,            typename input_type::pointer,            typename input_type::reference        > type;    };#endif    ///////////////////////////////////////////////////////////////////////////    //  Default implementations of the different policies to be used with a     //  multi_pass iterator    ///////////////////////////////////////////////////////////////////////////    struct default_input_policy    {        default_input_policy() {}                template <typename Functor>        default_input_policy(Functor const&) {}                template <typename MultiPass>        static void destroy(MultiPass&) {}                void swap(default_input_policy&) {}                template <typename MultiPass, typename TokenType>        static TokenType& advance_input(MultiPass& mp, TokenType& curtok);        template <typename MultiPass, typename TokenType>        static bool input_at_eof(MultiPass const& mp, TokenType& curtok);        template <typename MultiPass, typename TokenType>        static bool input_is_valid(MultiPass& mp, TokenType& curtok);    };        struct default_ownership_policy    {        template <typename MultiPass>        static void destroy(MultiPass&) {}        void swap(default_ownership_policy&) {}        template <typename MultiPass>        static void clone(MultiPass&) {}        template <typename MultiPass>        static bool release(MultiPass& mp);                template <typename MultiPass>        static bool is_unique(MultiPass const& mp);    };        struct default_storage_policy    {        template <typename MultiPass>        static void destroy(MultiPass&) {}        void swap(default_storage_policy&) {}        template <typename MultiPass>        static typename MultiPass::reference dereference(MultiPass const& mp);                template <typename MultiPass>        static void increment(MultiPass&) {}                template <typename MultiPass>        static void clear_queue(MultiPass&) {}        template <typename MultiPass>        static bool is_eof(MultiPass const& mp);        template <typename MultiPass>        static bool equal_to(MultiPass const& mp, MultiPass const& x);        template <typename MultiPass>        static bool less_than(MultiPass const& mp, MultiPass const& x);    };        struct default_checking_policy    {        template <typename MultiPass>        static void destroy(MultiPass&) {}        void swap(default_checking_policy&) {}        template <typename MultiPass>        static void check(MultiPass const&) {}        template <typename MultiPass>        static void clear_queue(MultiPass&) {}    };    }}}#endif

⌨️ 快捷键说明

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