Chris@16: /*============================================================================= Chris@16: Copyright (c) 1998-2003 Joel de Guzman Chris@16: http://spirit.sourceforge.net/ Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: =============================================================================*/ Chris@16: #if !defined(BOOST_SPIRIT_RULE_ALIAS_HPP) Chris@16: #define BOOST_SPIRIT_RULE_ALIAS_HPP Chris@16: Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace spirit { Chris@16: Chris@16: BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // rule_alias class Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: template Chris@16: class rule_alias : Chris@16: public parser > Chris@16: { Chris@16: public: Chris@16: Chris@16: typedef rule_alias self_t; Chris@16: Chris@16: template Chris@16: struct result Chris@16: { Chris@16: typedef typename parser_result::type type; Chris@16: }; Chris@16: Chris@16: rule_alias() Chris@16: : ptr(0) {} Chris@16: Chris@16: rule_alias(ParserT const& p) Chris@16: : ptr(&p) {} Chris@16: Chris@16: rule_alias& Chris@16: operator=(ParserT const& p) Chris@16: { Chris@16: ptr = &p; Chris@16: return *this; Chris@16: } Chris@16: Chris@16: template Chris@16: typename parser_result::type Chris@16: parse(ScannerT const& scan) const Chris@16: { Chris@16: if (ptr) Chris@16: return ptr->parse(scan); Chris@16: else Chris@16: return scan.no_match(); Chris@16: } Chris@16: Chris@16: ParserT const& Chris@16: get() const Chris@16: { Chris@16: BOOST_ASSERT(ptr != 0); Chris@16: return *ptr; Chris@16: } Chris@16: Chris@16: private: Chris@16: Chris@16: ParserT const* ptr; // hold it by pointer Chris@16: }; Chris@16: Chris@16: BOOST_SPIRIT_CLASSIC_NAMESPACE_END Chris@16: Chris@16: }} // namespace BOOST_SPIRIT_CLASSIC_NS Chris@16: Chris@16: #endif