Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 10:09:00

0001 /*=============================================================================
0002     Copyright (c) 1998-2003 Joel de Guzman
0003     http://spirit.sourceforge.net/
0004 
0005   Distributed under the Boost Software License, Version 1.0. (See accompanying
0006   file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
0007 =============================================================================*/
0008 #if !defined(BOOST_SPIRIT_RULE_ALIAS_HPP)
0009 #define BOOST_SPIRIT_RULE_ALIAS_HPP
0010 
0011 #include <boost/spirit/home/classic/namespace.hpp>
0012 #include <boost/spirit/home/classic/core/parser.hpp>
0013 
0014 namespace boost { namespace spirit {
0015 
0016 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
0017 
0018     ///////////////////////////////////////////////////////////////////////////
0019     //
0020     //  rule_alias class
0021     //
0022     ///////////////////////////////////////////////////////////////////////////
0023     template <typename ParserT>
0024     class rule_alias :
0025         public parser<rule_alias<ParserT> >
0026     {
0027     public:
0028     
0029         typedef rule_alias<ParserT> self_t;
0030     
0031         template <typename ScannerT>
0032         struct result 
0033         { 
0034             typedef typename parser_result<ParserT, ScannerT>::type type;
0035         };
0036     
0037         rule_alias()
0038         : ptr(0) {}
0039         
0040         rule_alias(ParserT const& p)
0041         : ptr(&p) {}
0042         
0043         rule_alias&
0044         operator=(ParserT const& p)
0045         {
0046             ptr = &p;
0047             return *this;
0048         }
0049     
0050         template <typename ScannerT>
0051         typename parser_result<ParserT, ScannerT>::type
0052         parse(ScannerT const& scan) const
0053         { 
0054             if (ptr)
0055                 return ptr->parse(scan);
0056             else
0057                 return scan.no_match();
0058         }
0059         
0060         ParserT const&
0061         get() const
0062         {
0063             BOOST_ASSERT(ptr != 0);
0064             return *ptr;
0065         }
0066     
0067     private:
0068     
0069         ParserT const* ptr; // hold it by pointer
0070     };
0071 
0072 BOOST_SPIRIT_CLASSIC_NAMESPACE_END
0073 
0074 }} // namespace BOOST_SPIRIT_CLASSIC_NS
0075 
0076 #endif