annotate DEPENDENCIES/generic/include/boost/spirit/home/classic/dynamic/rule_alias.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 /*=============================================================================
Chris@16 2 Copyright (c) 1998-2003 Joel de Guzman
Chris@16 3 http://spirit.sourceforge.net/
Chris@16 4
Chris@16 5 Distributed under the Boost Software License, Version 1.0. (See accompanying
Chris@16 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
Chris@16 7 =============================================================================*/
Chris@16 8 #if !defined(BOOST_SPIRIT_RULE_ALIAS_HPP)
Chris@16 9 #define BOOST_SPIRIT_RULE_ALIAS_HPP
Chris@16 10
Chris@16 11 #include <boost/spirit/home/classic/namespace.hpp>
Chris@16 12 #include <boost/spirit/home/classic/core/parser.hpp>
Chris@16 13
Chris@16 14 namespace boost { namespace spirit {
Chris@16 15
Chris@16 16 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
Chris@16 17
Chris@16 18 ///////////////////////////////////////////////////////////////////////////
Chris@16 19 //
Chris@16 20 // rule_alias class
Chris@16 21 //
Chris@16 22 ///////////////////////////////////////////////////////////////////////////
Chris@16 23 template <typename ParserT>
Chris@16 24 class rule_alias :
Chris@16 25 public parser<rule_alias<ParserT> >
Chris@16 26 {
Chris@16 27 public:
Chris@16 28
Chris@16 29 typedef rule_alias<ParserT> self_t;
Chris@16 30
Chris@16 31 template <typename ScannerT>
Chris@16 32 struct result
Chris@16 33 {
Chris@16 34 typedef typename parser_result<ParserT, ScannerT>::type type;
Chris@16 35 };
Chris@16 36
Chris@16 37 rule_alias()
Chris@16 38 : ptr(0) {}
Chris@16 39
Chris@16 40 rule_alias(ParserT const& p)
Chris@16 41 : ptr(&p) {}
Chris@16 42
Chris@16 43 rule_alias&
Chris@16 44 operator=(ParserT const& p)
Chris@16 45 {
Chris@16 46 ptr = &p;
Chris@16 47 return *this;
Chris@16 48 }
Chris@16 49
Chris@16 50 template <typename ScannerT>
Chris@16 51 typename parser_result<ParserT, ScannerT>::type
Chris@16 52 parse(ScannerT const& scan) const
Chris@16 53 {
Chris@16 54 if (ptr)
Chris@16 55 return ptr->parse(scan);
Chris@16 56 else
Chris@16 57 return scan.no_match();
Chris@16 58 }
Chris@16 59
Chris@16 60 ParserT const&
Chris@16 61 get() const
Chris@16 62 {
Chris@16 63 BOOST_ASSERT(ptr != 0);
Chris@16 64 return *ptr;
Chris@16 65 }
Chris@16 66
Chris@16 67 private:
Chris@16 68
Chris@16 69 ParserT const* ptr; // hold it by pointer
Chris@16 70 };
Chris@16 71
Chris@16 72 BOOST_SPIRIT_CLASSIC_NAMESPACE_END
Chris@16 73
Chris@16 74 }} // namespace BOOST_SPIRIT_CLASSIC_NS
Chris@16 75
Chris@16 76 #endif