1 /*============================================================================= 2 Copyright (c) 2006 Tobias Schwinger 3 http://spirit.sourceforge.net/ 4 5 Distributed under the Boost Software License, Version 1.0. (See accompanying 6 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 7 =============================================================================*/ 8 #if !defined(BOOST_SPIRIT_DYNAMIC_TYPEOF_HPP) 9 #define BOOST_SPIRIT_DYNAMIC_TYPEOF_HPP 10 11 #include <boost/typeof/typeof.hpp> 12 13 #include <boost/spirit/home/classic/namespace.hpp> 14 #include <boost/spirit/home/classic/core/typeof.hpp> 15 16 #include <boost/spirit/home/classic/dynamic/stored_rule_fwd.hpp> 17 18 namespace boost { namespace spirit { 19 20 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN 21 22 // if.hpp 23 template <class ParsableT, typename CondT> struct if_parser; 24 template <class ParsableTrueT, class ParsableFalseT, typename CondT> 25 struct if_else_parser; 26 27 // for.hpp 28 namespace impl { 29 template<typename InitF, typename CondT, typename StepF, class ParsableT> 30 struct for_parser; 31 } 32 33 // while.hpp 34 template<typename ParsableT, typename CondT, bool is_do_parser> 35 struct while_parser; 36 37 // lazy.hpp 38 template<typename ActorT> struct lazy_parser; 39 40 // rule_alias.hpp 41 template <typename ParserT> class rule_alias; 42 43 // switch.hpp 44 template <typename CaseT, typename CondT> struct switch_parser; 45 template <int N, class ParserT, bool IsDefault> struct case_parser; 46 47 // select.hpp 48 template <typename TupleT, typename BehaviourT, typename T> 49 struct select_parser; 50 51 BOOST_SPIRIT_CLASSIC_NAMESPACE_END 52 53 }} // namespace BOOST_SPIRIT_CLASSIC_NS 54 55 56 #include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP() 57 58 // if.hpp 59 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::if_parser,2) 60 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::if_else_parser,3) 61 62 // for.hpp 63 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::impl::for_parser,4) 64 65 // while.hpp 66 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::while_parser,(class)(class)(bool)) 67 68 // lazy.hpp 69 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::lazy_parser,1) 70 71 // stored_rule.hpp (has forward header) 72 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::stored_rule,(typename)(typename)(typename)(bool)) 73 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::stored_rule,3) 74 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::stored_rule,2) 75 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::stored_rule,1) 76 BOOST_TYPEOF_REGISTER_TYPE(BOOST_SPIRIT_CLASSIC_NS::stored_rule<>) 77 78 // rule_alias.hpp 79 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::rule_alias,1) 80 81 // switch.hpp 82 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::switch_parser,2) 83 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::case_parser,(int)(class)(bool)) 84 85 // select.hpp 86 BOOST_TYPEOF_REGISTER_TEMPLATE(BOOST_SPIRIT_CLASSIC_NS::select_parser,3) 87 88 #endif 89 90