Chris@16: // Copyright 2008 Christophe Henry Chris@16: // henry UNDERSCORE christophe AT hotmail DOT com Chris@16: // This is an extended version of the state machine available in the boost::mpl library Chris@16: // Distributed under the same license as the original. Chris@16: // Copyright for the original version: Chris@16: // Copyright 2005 David Abrahams and Aleksey Gurtovoy. Distributed Chris@16: // under the Boost Software License, Version 1.0. (See accompanying Chris@16: // file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: #ifndef BOOST_MSM_FRONT_EUML_GUARD_GRAMMAR_H Chris@16: #define BOOST_MSM_FRONT_EUML_GUARD_GRAMMAR_H Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: namespace boost { namespace msm { namespace front { namespace euml Chris@16: { Chris@16: struct BuildGuards; Chris@16: struct BuildActions; Chris@16: Chris@16: struct BuildGuardsCases Chris@16: { Chris@16: // The primary template matches nothing: Chris@16: template Chris@16: struct case_ Chris@16: : proto::not_ Chris@16: {}; Chris@16: }; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::logical_or, Chris@16: Or_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::logical_and, Chris@16: And_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::logical_not, Chris@16: Not_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::less, Chris@16: Less_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::less_equal, Chris@16: LessEqual_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::greater, Chris@16: Greater_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::greater_equal, Chris@16: GreaterEqual_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::equal_to, Chris@16: EqualTo_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::not_equal_to, Chris@16: NotEqualTo_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::pre_inc, Chris@16: Pre_inc_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::dereference, Chris@16: Deref_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::pre_dec, Chris@16: Pre_dec_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::post_inc, Chris@16: Post_inc_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::post_dec, Chris@16: Post_dec_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::plus, Chris@16: Plus_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::minus, Chris@16: Minus_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::multiplies, Chris@16: Multiplies_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::divides, Chris@16: Divides_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::modulus, Chris@16: Modulus_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::bitwise_and, Chris@16: Bitwise_And_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::bitwise_or, Chris@16: Bitwise_Or_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::subscript, Chris@16: Subscript_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::plus_assign, Chris@16: Plus_Assign_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::minus_assign, Chris@16: Minus_Assign_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::multiplies_assign, Chris@16: Multiplies_Assign_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::divides_assign, Chris@16: Divides_Assign_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::modulus_assign, Chris@16: Modulus_Assign_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::shift_left_assign, Chris@16: ShiftLeft_Assign_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::shift_right_assign, Chris@16: ShiftRight_Assign_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::shift_left, Chris@16: ShiftLeft_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::shift_right, Chris@16: ShiftRight_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::assign, Chris@16: Assign_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::bitwise_xor, Chris@16: Bitwise_Xor_() Chris@16: > Chris@16: {}; Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::when< Chris@16: proto::negate, Chris@16: Unary_Minus_() Chris@16: > Chris@16: {}; Chris@16: Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::or_< Chris@16: proto::when< Chris@16: proto::function,BuildGuards,BuildGuards,BuildGuards >, Chris@16: If_Else_), Chris@16: BuildGuards(proto::_child_c<2>), Chris@16: BuildGuards(proto::_child_c<3>) >() Chris@16: >, Chris@16: proto::when< Chris@16: proto::function >, Chris@16: get_fct >() Chris@16: >, Chris@16: proto::when< Chris@16: proto::function,BuildActions >, Chris@16: get_fct,BuildActions(proto::_child_c<1>) >() Chris@16: >, Chris@16: proto::when< Chris@16: proto::function,BuildActions,BuildActions >, Chris@16: get_fct,BuildActions(proto::_child_c<1>),BuildActions(proto::_child_c<2>) >() Chris@16: >, Chris@16: proto::when< Chris@16: proto::function,BuildActions,BuildActions,BuildActions >, Chris@16: get_fct,BuildActions(proto::_child_c<1>) Chris@16: ,BuildActions(proto::_child_c<2>),BuildActions(proto::_child_c<3>) >() Chris@16: >, Chris@16: proto::when< Chris@16: proto::function,BuildActions,BuildActions,BuildActions,BuildActions >, Chris@16: get_fct Chris@16: ,BuildActions(proto::_child_c<1>),BuildActions(proto::_child_c<2>) Chris@16: ,BuildActions(proto::_child_c<3>),BuildActions(proto::_child_c<4>) >() Chris@16: >, Chris@16: proto::when< Chris@16: proto::function,BuildActions,BuildActions,BuildActions,BuildActions,BuildActions >, Chris@16: get_fct Chris@16: ,BuildActions(proto::_child_c<1>),BuildActions(proto::_child_c<2>) Chris@16: ,BuildActions(proto::_child_c<3>),BuildActions(proto::_child_c<4>),BuildActions(proto::_child_c<5>) >() Chris@16: > Chris@16: #ifdef BOOST_MSVC Chris@16: ,proto::when< Chris@16: proto::function,BuildActions,BuildActions,BuildActions,BuildActions,BuildActions,BuildActions >, Chris@16: get_fct Chris@16: ,BuildActions(proto::_child_c<1>),BuildActions(proto::_child_c<2>) Chris@16: ,BuildActions(proto::_child_c<3>),BuildActions(proto::_child_c<4>) Chris@16: ,BuildActions(proto::_child_c<5>),BuildActions(proto::_child_c<6>) >() Chris@16: > Chris@16: #endif Chris@16: > Chris@16: {}; Chris@16: Chris@16: template<> Chris@16: struct BuildGuardsCases::case_ Chris@16: : proto::or_< Chris@16: proto::when < Chris@16: proto::terminal, Chris@16: get_action_name() Chris@16: >, Chris@16: proto::when< Chris@16: proto::terminal, Chris@16: get_state_name() Chris@16: >, Chris@16: proto::when< Chris@16: proto::terminal, Chris@16: proto::_ Chris@16: >, Chris@16: proto::when< Chris@16: proto::terminal, Chris@16: proto::_ Chris@16: >, Chris@16: proto::when< Chris@16: proto::terminal, Chris@16: get_fct() Chris@16: >, Chris@16: proto::when< Chris@16: proto::terminal, Chris@16: proto::_value Chris@16: > Chris@16: > Chris@16: {}; Chris@16: Chris@16: struct BuildGuards Chris@16: : proto::switch_ Chris@16: {}; Chris@16: Chris@16: }}}} Chris@16: Chris@16: #endif //BOOST_MSM_FRONT_EUML_GUARD_GRAMMAR_H