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_CONTAINER_H Chris@16: #define BOOST_MSM_FRONT_EUML_CONTAINER_H Chris@16: Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: #include Chris@16: Chris@16: BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator_category) Chris@16: Chris@16: namespace boost { namespace msm { namespace front { namespace euml Chris@16: { Chris@16: Chris@16: template Chris@16: struct Front_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_reference< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_reference< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).front(); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).front(); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct front_tag {}; Chris@16: struct Front_Helper: proto::extends< proto::terminal::type, Front_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Front_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Front_ type; Chris@16: }; Chris@16: }; Chris@16: Front_Helper const front_; Chris@16: Chris@16: template Chris@16: struct Back_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_reference< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_reference< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).back(); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).back(); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct back_tag {}; Chris@16: struct Back_Helper: proto::extends< proto::terminal::type, Back_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Back_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Back_ type; Chris@16: }; Chris@16: }; Chris@16: Back_Helper const back_; Chris@16: Chris@16: template Chris@16: struct Begin_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).begin(); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).begin(); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct begin_tag {}; Chris@16: struct Begin_Helper: proto::extends< proto::terminal::type, Begin_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Begin_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Begin_ type; Chris@16: }; Chris@16: }; Chris@16: Begin_Helper const begin_; Chris@16: Chris@16: template Chris@16: struct End_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).end(); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).end(); Chris@16: } Chris@16: }; Chris@16: struct end_tag {}; Chris@16: struct End_Helper: proto::extends< proto::terminal::type, End_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: End_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef End_ type; Chris@16: }; Chris@16: }; Chris@16: End_Helper const end_; Chris@16: Chris@16: template Chris@16: struct RBegin_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_reverse_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_reverse_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).rbegin(); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).rbegin(); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct rbegin_tag {}; Chris@16: struct RBegin_Helper: proto::extends< proto::terminal::type, RBegin_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: RBegin_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef RBegin_ type; Chris@16: }; Chris@16: }; Chris@16: RBegin_Helper const rbegin_; Chris@16: Chris@16: template Chris@16: struct REnd_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_reverse_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_reverse_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).rend(); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).rend(); Chris@16: } Chris@16: }; Chris@16: struct rend_tag {}; Chris@16: struct REnd_Helper: proto::extends< proto::terminal::type, REnd_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: REnd_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef REnd_ type; Chris@16: }; Chris@16: }; Chris@16: REnd_Helper const rend_; Chris@16: Chris@16: template Chris@16: struct Push_Back_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).push_back(Element()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).push_back(Element()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct push_back_tag {}; Chris@16: struct Push_Back_Helper: proto::extends< proto::terminal::type, Push_Back_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Push_Back_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Push_Back_ type; Chris@16: }; Chris@16: }; Chris@16: Push_Back_Helper const push_back_; Chris@16: Chris@16: template Chris@16: struct Pop_Back_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).pop_back(); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).pop_back(); Chris@16: } Chris@16: }; Chris@16: struct pop_back_tag {}; Chris@16: struct Pop_Back_Helper: proto::extends< proto::terminal::type, Pop_Back_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Pop_Back_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Pop_Back_ type; Chris@16: }; Chris@16: }; Chris@16: Pop_Back_Helper const pop_back_; Chris@16: Chris@16: template Chris@16: struct Push_Front_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).push_front(Element()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).push_front(Element()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct push_front_tag {}; Chris@16: struct Push_Front_Helper: proto::extends< proto::terminal::type, Push_Front_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Push_Front_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Push_Front_ type; Chris@16: }; Chris@16: }; Chris@16: Push_Front_Helper const push_front_; Chris@16: Chris@16: template Chris@16: struct Pop_Front_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).pop_front(); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).pop_front(); Chris@16: } Chris@16: }; Chris@16: struct pop_front_tag {}; Chris@16: struct Pop_Front_Helper: proto::extends< proto::terminal::type, Pop_Front_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Pop_Front_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Pop_Front_ type; Chris@16: }; Chris@16: }; Chris@16: Pop_Front_Helper const pop_front_; Chris@16: Chris@16: template Chris@16: struct Clear_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).clear(); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).clear(); Chris@16: } Chris@16: }; Chris@16: struct clear_tag {}; Chris@16: struct Clear_Helper: proto::extends< proto::terminal::type, Clear_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Clear_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Clear_ type; Chris@16: }; Chris@16: }; Chris@16: Clear_Helper const clear_; Chris@16: Chris@16: template Chris@16: struct ListReverse_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).reverse(); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).reverse(); Chris@16: } Chris@16: }; Chris@16: struct list_reverse_tag {}; Chris@16: struct ListReverse_Helper: proto::extends< proto::terminal::type, ListReverse_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: ListReverse_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef ListReverse_ type; Chris@16: }; Chris@16: }; Chris@16: ListReverse_Helper const list_reverse_; Chris@16: Chris@16: template Chris@16: struct ListUnique_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).unique(); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).unique(); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct ListUnique_::type >::type> Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).unique(Predicate()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).unique(Predicate()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct list_unique_tag {}; Chris@16: struct ListUnique_Helper: proto::extends< proto::terminal::type, ListUnique_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: ListUnique_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef ListUnique_ type; Chris@16: }; Chris@16: }; Chris@16: ListUnique_Helper const list_unique_; Chris@16: Chris@16: template Chris@16: struct ListSort_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).sort(); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).sort(); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct ListSort_::type >::type> Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).sort(Predicate()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).sort(Predicate()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct list_sort_tag {}; Chris@16: struct ListSort_Helper: proto::extends< proto::terminal::type, ListSort_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: ListSort_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef ListSort_ type; Chris@16: }; Chris@16: }; Chris@16: ListSort_Helper const list_sort_; Chris@16: Chris@16: template Chris@16: struct Capacity_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).capacity(); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).capacity(); Chris@16: } Chris@16: }; Chris@16: struct capacity_tag {}; Chris@16: struct Capacity_Helper: proto::extends< proto::terminal::type, Capacity_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Capacity_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Capacity_ type; Chris@16: }; Chris@16: }; Chris@16: Capacity_Helper const capacity_; Chris@16: Chris@16: template Chris@16: struct Size_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).size(); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).size(); Chris@16: } Chris@16: }; Chris@16: struct size_tag {}; Chris@16: struct Size_Helper: proto::extends< proto::terminal::type, Size_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Size_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Size_ type; Chris@16: }; Chris@16: }; Chris@16: Size_Helper const size_; Chris@16: Chris@16: template Chris@16: struct Max_Size_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).max_size(); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).max_size(); Chris@16: } Chris@16: }; Chris@16: struct max_size_tag {}; Chris@16: struct Max_Size_Helper: proto::extends< proto::terminal::type, Max_Size_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Max_Size_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Max_Size_ type; Chris@16: }; Chris@16: }; Chris@16: Max_Size_Helper const max_size_; Chris@16: Chris@16: template Chris@16: struct Reserve_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).reserve(Value()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).reserve(Value()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct reserve_tag {}; Chris@16: struct Reserve_Helper: proto::extends< proto::terminal::type, Reserve_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Reserve_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Reserve_ type; Chris@16: }; Chris@16: }; Chris@16: Reserve_Helper const reserve_; Chris@16: Chris@16: template Chris@16: struct Resize_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).resize(Num()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).resize(Num()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct Resize_::type >::type> Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).resize(Num()(evt,fsm,src,tgt),Value()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).resize(Num()(evt,fsm,state),Value()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct resize_tag {}; Chris@16: struct Resize_Helper: proto::extends< proto::terminal::type, Resize_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Resize_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Resize_ type; Chris@16: }; Chris@16: }; Chris@16: Resize_Helper const resize_; Chris@16: Chris@16: // version for 3 parameters (sequence containers) Chris@16: template Chris@16: struct Insert_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt), Chris@16: Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state), Chris@16: Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: // version for 2 parameters Chris@16: template Chris@16: struct Insert_ < Container,Param1,Param2,void> Chris@16: : euml_action > Chris@16: { Chris@16: // return value will actually not be correct for set::insert(it1,it2), should be void Chris@16: // but it's ok as nobody should call an inexistent return type Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: // version for transition + second param not an iterator (meaning that, Container is not an associative container) Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename ::boost::mpl::not_< Chris@16: typename has_iterator_category< Chris@16: typename Param2::template transition_action_result::type Chris@16: >::type Chris@16: >::type Chris@16: >::type, Chris@16: typename transition_action_result::type Chris@16: >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: Chris@16: // version for transition + second param is an iterator (meaning that, Container is an associative container) Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename has_iterator_category< Chris@16: typename Param2::template transition_action_result::type Chris@16: >::type Chris@16: >::type, Chris@16: typename transition_action_result::type Chris@16: >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: Chris@16: // version for state action + second param not an iterator (meaning that, Container is not an associative container) Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename ::boost::mpl::not_< Chris@16: typename has_iterator_category< Chris@16: typename Param2::template state_action_result::type Chris@16: >::type Chris@16: >::type Chris@16: >::type, Chris@16: typename state_action_result::type Chris@16: >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: Chris@16: // version for state action + second param is an iterator (meaning that, Container is an associative container) Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename has_iterator_category< Chris@16: typename Param2::template state_action_result::type Chris@16: >::type Chris@16: >::type, Chris@16: typename state_action_result::type Chris@16: >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: // version for 1 parameter (associative containers) Chris@16: template Chris@16: struct Insert_ < Container,Param1,void,void> Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename std::pair< Chris@16: typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type,bool> type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename std::pair< Chris@16: typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type,bool> type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct insert_tag {}; Chris@16: struct Insert_Helper: proto::extends< proto::terminal::type, Insert_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Insert_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Insert_ type; Chris@16: }; Chris@16: }; Chris@16: Insert_Helper const insert_; Chris@16: Chris@16: template Chris@16: struct Swap_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container1()(evt,fsm,src,tgt)).swap(Container2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container1()(evt,fsm,state)).swap(Container2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct swap_tag {}; Chris@16: struct Swap_Helper: proto::extends< proto::terminal::type, Swap_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Swap_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Swap_ type; Chris@16: }; Chris@16: }; Chris@16: Swap_Helper const swap_; Chris@16: Chris@16: template Chris@16: struct Erase_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Iterator1::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).erase(Iterator1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Iterator1::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).erase(Iterator1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct Erase_::type >::type> Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Iterator1::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).erase(Iterator1()(evt,fsm,src,tgt),Iterator2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Iterator1::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).erase(Iterator1()(evt,fsm,state),Iterator2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct erase_tag {}; Chris@16: struct Erase_Helper: proto::extends< proto::terminal::type, Erase_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Erase_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Erase_ type; Chris@16: }; Chris@16: }; Chris@16: Erase_Helper const erase_; Chris@16: Chris@16: template Chris@16: struct Empty_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef bool type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef bool type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: bool operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).empty(); Chris@16: } Chris@16: template Chris@16: bool operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).empty(); Chris@16: } Chris@16: }; Chris@16: struct empty_tag {}; Chris@16: struct Empty_Helper: proto::extends< proto::terminal::type, Empty_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Empty_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Empty_ type; Chris@16: }; Chris@16: }; Chris@16: Empty_Helper const empty_; Chris@16: Chris@16: template Chris@16: struct ListRemove_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).remove(Element()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).remove(Element()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct list_remove_tag {}; Chris@16: struct ListRemove_Helper: proto::extends< proto::terminal::type, ListRemove_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: ListRemove_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef ListRemove_ type; Chris@16: }; Chris@16: }; Chris@16: ListRemove_Helper const list_remove_; Chris@16: Chris@16: template Chris@16: struct ListRemove_If_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).remove_if(Element()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).remove_if(Element()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct list_remove_if_tag {}; Chris@16: struct ListRemove_If_Helper: proto::extends< proto::terminal::type, ListRemove_If_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: ListRemove_If_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef ListRemove_If_ type; Chris@16: }; Chris@16: }; Chris@16: ListRemove_If_Helper const list_remove_if_; Chris@16: Chris@16: template Chris@16: struct ListMerge_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).merge(ToMerge()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).merge(ToMerge()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct ListMerge_::type >::type> Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).merge(ToMerge()(evt,fsm,src,tgt),Predicate()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).merge(ToMerge()(evt,fsm,state),Predicate()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct list_merge_tag {}; Chris@16: struct ListMerge_Helper: proto::extends< proto::terminal::type, ListMerge_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: ListMerge_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef ListMerge_ type; Chris@16: }; Chris@16: }; Chris@16: ListMerge_Helper const list_merge_; Chris@16: Chris@16: template Chris@16: struct Splice_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).splice(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).splice(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct Splice_::type, Chris@16: typename ::boost::mpl::not_< Chris@16: typename ::boost::is_same::type>::type>::type >::type> Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).splice(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt), Chris@16: Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).splice(Param1()(evt,fsm,state),Param2()(evt,fsm,state), Chris@16: Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct Splice_::type >::type> Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).splice(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt), Chris@16: Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: void operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).splice(Param1()(evt,fsm,state),Param2()(evt,fsm,state), Chris@16: Param3()(evt,fsm,state),Param4()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct splice_tag {}; Chris@16: struct Splice_Helper: proto::extends< proto::terminal::type, Splice_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Splice_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Splice_ type; Chris@16: }; Chris@16: }; Chris@16: Splice_Helper const splice_; Chris@16: Chris@16: //template Chris@16: //struct StringFind_ : euml_action > Chris@16: //{ Chris@16: //}; Chris@16: template Chris@16: struct StringFind_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)). Chris@16: find(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)). Chris@16: find(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFind_ < Container,Param1,void,void> Chris@16: : euml_action > Chris@16: Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).find(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).find(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFind_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).find(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).find(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct string_find_tag {}; Chris@16: struct StringFind_Helper: proto::extends< proto::terminal::type, StringFind_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringFind_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringFind_ type; Chris@16: }; Chris@16: }; Chris@16: StringFind_Helper const string_find_; Chris@16: Chris@16: template Chris@16: struct StringRFind_ : euml_action > Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringRFind_ < Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).rfind(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).rfind(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringRFind_ < Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::is_same::type, Chris@16: typename ::boost::mpl::not_< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: >::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).rfind(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).rfind(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringRFind_< Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::disable_if< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)). Chris@16: rfind(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)). Chris@16: rfind(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct string_rfind_tag {}; Chris@16: struct StringRFind_Helper: proto::extends< proto::terminal::type, StringRFind_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringRFind_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringRFind_ type; Chris@16: }; Chris@16: }; Chris@16: StringRFind_Helper const string_rfind_; Chris@16: Chris@16: template Chris@16: struct StringFindFirstOf_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)). Chris@16: find_first_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)). Chris@16: find_first_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct StringFindFirstOf_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).find_first_of(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).find_first_of(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFindFirstOf_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).find_first_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).find_first_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct string_find_first_of_tag {}; Chris@16: struct StringFindFirstOf_Helper: Chris@16: proto::extends< proto::terminal::type, StringFindFirstOf_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringFindFirstOf_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringFindFirstOf_ type; Chris@16: }; Chris@16: }; Chris@16: StringFindFirstOf_Helper const string_find_first_of_; Chris@16: Chris@16: template Chris@16: struct StringFindFirstNotOf_ : euml_action > Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFindFirstNotOf_ < Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).find_first_not_of(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).find_first_not_of(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFindFirstNotOf_ < Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::is_same::type, Chris@16: typename ::boost::mpl::not_< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: >::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).find_first_not_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).find_first_not_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFindFirstNotOf_< Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::disable_if< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)). Chris@16: find_first_not_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)). Chris@16: find_first_not_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct string_find_first_not_of_tag {}; Chris@16: struct StringFindFirstNotOf_Helper: Chris@16: proto::extends< proto::terminal::type, StringFindFirstNotOf_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringFindFirstNotOf_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringFindFirstNotOf_ type; Chris@16: }; Chris@16: }; Chris@16: StringFindFirstNotOf_Helper const string_find_first_not_of_; Chris@16: Chris@16: template Chris@16: struct StringFindLastOf_ : euml_action > Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFindLastOf_ < Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).find_last_of(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).find_last_of(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFindLastOf_ < Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::is_same::type, Chris@16: typename ::boost::mpl::not_< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: >::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).find_last_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).find_last_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFindLastOf_< Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::disable_if< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)). Chris@16: find_last_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)). Chris@16: find_last_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct string_find_last_of_tag {}; Chris@16: struct StringFindLastOf_Helper: Chris@16: proto::extends< proto::terminal::type, StringFindLastOf_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringFindLastOf_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringFindLastOf_ type; Chris@16: }; Chris@16: }; Chris@16: StringFindLastOf_Helper const string_find_last_of_; Chris@16: Chris@16: template Chris@16: struct StringFindLastNotOf_ : euml_action > Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFindLastNotOf_ < Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).find_last_not_of(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).find_last_not_of(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFindLastNotOf_ < Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::is_same::type, Chris@16: typename ::boost::mpl::not_< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: >::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).find_last_not_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).find_last_not_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringFindLastNotOf_< Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::disable_if< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)). Chris@16: find_last_not_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)). Chris@16: find_last_not_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct string_find_last_not_of_tag {}; Chris@16: struct StringFindLastNotOf_Helper: Chris@16: proto::extends< proto::terminal::type, StringFindLastNotOf_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringFindLastNotOf_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringFindLastNotOf_ type; Chris@16: }; Chris@16: }; Chris@16: StringFindLastNotOf_Helper const string_find_last_not_of_; Chris@16: Chris@16: template Chris@16: struct Npos_ : euml_action > Chris@16: { Chris@16: Npos_(){} Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename Container::size_type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename Container::size_type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return Container::npos; Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return Container::npos; Chris@16: } Chris@16: }; Chris@16: Chris@16: // version for 2 parameters Chris@16: template Chris@16: struct Associative_Erase_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef void type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: // version for 1 parameter Chris@16: template Chris@16: struct Associative_Erase_ < Container,Param1,void> Chris@16: : euml_action > Chris@16: { Chris@16: // return value will actually not be correct for set::erase(it), should be void Chris@16: // but it's ok as nobody should call an inexistent return type Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: // version for transition + param is an iterator Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename has_iterator_category< Chris@16: typename Param1::template transition_action_result::type Chris@16: >::type Chris@16: >::type, Chris@16: void Chris@16: >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: Chris@16: // version for state action + param is an iterator Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename has_iterator_category< Chris@16: typename Param1::template state_action_result::type Chris@16: >::type Chris@16: >::type, Chris@16: void Chris@16: >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state)); Chris@16: } Chris@16: Chris@16: // version for transition + param not an iterator Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename ::boost::mpl::not_< Chris@16: typename has_iterator_category< Chris@16: typename Param1::template transition_action_result::type Chris@16: >::type Chris@16: >::type Chris@16: >::type, Chris@16: typename transition_action_result::type Chris@16: >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: Chris@16: // version for state action + param not an iterator Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::and_< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename ::boost::mpl::not_< Chris@16: typename has_iterator_category< Chris@16: typename Param1::template state_action_result::type Chris@16: >::type Chris@16: >::type Chris@16: >::type, Chris@16: typename state_action_result::type Chris@16: >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct associative_erase_tag {}; Chris@16: struct Associative_Erase_Helper: proto::extends< proto::terminal::type, Associative_Erase_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Associative_Erase_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Associative_Erase_ type; Chris@16: }; Chris@16: }; Chris@16: Associative_Erase_Helper const associative_erase_; Chris@16: Chris@16: Chris@16: template Chris@16: struct Associative_Find_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).find(Param()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).find(Param()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct associative_find_tag {}; Chris@16: struct Associative_Find_Helper: proto::extends< proto::terminal::type, Associative_Find_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Associative_Find_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Associative_Find_ type; Chris@16: }; Chris@16: }; Chris@16: Associative_Find_Helper const associative_find_; Chris@16: Chris@16: template Chris@16: struct AssociativeCount_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).count(Param()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).count(Param()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct associative_count_tag {}; Chris@16: struct AssociativeCount_Helper: proto::extends< proto::terminal::type, AssociativeCount_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: AssociativeCount_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef AssociativeCount_ type; Chris@16: }; Chris@16: }; Chris@16: AssociativeCount_Helper const associative_count_; Chris@16: Chris@16: template Chris@16: struct Associative_Lower_Bound_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).lower_bound(Param()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).lower_bound(Param()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct associative_lower_bound_tag {}; Chris@16: struct Associative_Lower_Bound_Helper: proto::extends< proto::terminal::type, Chris@16: Associative_Lower_Bound_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Associative_Lower_Bound_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Associative_Lower_Bound_ type; Chris@16: }; Chris@16: }; Chris@16: Associative_Lower_Bound_Helper const associative_lower_bound_; Chris@16: Chris@16: template Chris@16: struct Associative_Upper_Bound_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).upper_bound(Param()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).upper_bound(Param()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct associative_upper_bound_tag {}; Chris@16: struct Associative_Upper_Bound_Helper: proto::extends< proto::terminal::type, Chris@16: Associative_Upper_Bound_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Associative_Upper_Bound_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Associative_Upper_Bound_ type; Chris@16: }; Chris@16: }; Chris@16: Associative_Upper_Bound_Helper const associative_upper_bound_; Chris@16: Chris@16: template Chris@16: struct First_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_first_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_first_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).first; Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).first; Chris@16: } Chris@16: }; Chris@16: Chris@16: struct first_tag {}; Chris@16: struct First_Helper: proto::extends< proto::terminal::type, First_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: First_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef First_ type; Chris@16: }; Chris@16: }; Chris@16: First_Helper const first_; Chris@16: Chris@16: template Chris@16: struct Second_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_second_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_second_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).second; Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).second; Chris@16: } Chris@16: }; Chris@16: Chris@16: struct second_tag {}; Chris@16: struct Second_Helper: proto::extends< proto::terminal::type, Second_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Second_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Second_ type; Chris@16: }; Chris@16: }; Chris@16: Second_Helper const second_; Chris@16: Chris@16: template Chris@16: struct Associative_Equal_Range_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef std::pair< Chris@16: typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type, Chris@16: typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type > type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef std::pair< Chris@16: typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type, Chris@16: typename get_iterator< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type > type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (T()(evt,fsm,src,tgt)).equal_range(Param()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename T::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (T()(evt,fsm,state)).equal_range(Param()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct associative_equal_range_tag {}; Chris@16: struct Associative_Equal_Range_Helper: proto::extends< proto::terminal::type, Chris@16: Associative_Equal_Range_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Associative_Equal_Range_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Associative_Equal_Range_ type; Chris@16: }; Chris@16: }; Chris@16: Associative_Equal_Range_Helper const associative_equal_range_; Chris@16: Chris@16: template Chris@16: struct Substr_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)). Chris@16: substr(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)). Chris@16: substr(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct Substr_ Chris@16: : euml_action > Chris@16: Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).substr(); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).substr(); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct Substr_ < Container,Param1,void> Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type2::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename remove_reference< Chris@16: typename get_result_type::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).substr(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).substr(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct substr_tag {}; Chris@16: struct Substr_Helper: proto::extends< proto::terminal::type, Substr_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Substr_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Substr_ type; Chris@16: }; Chris@16: }; Chris@16: Substr_Helper const substr_; Chris@16: Chris@16: template Chris@16: struct StringCompare_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef int type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef int type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt), Chris@16: Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state),Param2()(evt,fsm,state), Chris@16: Param3()(evt,fsm,state),Param4()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct StringCompare_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef int type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef int type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringCompare_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef int type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef int type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringCompare_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef int type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef int type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt), Chris@16: Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state),Param2()(evt,fsm,state), Chris@16: Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct string_compare_tag {}; Chris@16: struct StringCompare_Helper: proto::extends< proto::terminal::type, StringCompare_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringCompare_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringCompare_ type; Chris@16: }; Chris@16: }; Chris@16: StringCompare_Helper const string_compare_; Chris@16: Chris@16: template Chris@16: struct Append_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).append (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt), Chris@16: Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).append (Param1()(evt,fsm,state),Param2()(evt,fsm,state), Chris@16: Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct Append_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).append(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).append(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct Append_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).append(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).append(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct append_tag {}; Chris@16: struct Append_Helper: proto::extends< proto::terminal::type, Append_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: Append_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef Append_ type; Chris@16: }; Chris@16: }; Chris@16: Append_Helper const append_; Chris@16: Chris@16: template Chris@16: struct StringInsert_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt), Chris@16: Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state), Chris@16: Param3()(evt,fsm,state),Param4()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct StringInsert_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct StringInsert_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt), Chris@16: Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state), Chris@16: Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct string_insert_tag {}; Chris@16: struct StringInsert_Helper: proto::extends< proto::terminal::type, StringInsert_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringInsert_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringInsert_ type; Chris@16: }; Chris@16: }; Chris@16: StringInsert_Helper const string_insert_; Chris@16: Chris@16: template Chris@16: struct StringErase_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)). Chris@16: erase(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)). Chris@16: erase(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct StringErase_ Chris@16: : euml_action > Chris@16: Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).erase(); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).erase(); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringErase_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct string_erase_tag {}; Chris@16: struct StringErase_Helper: proto::extends< proto::terminal::type, StringErase_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringErase_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringErase_ type; Chris@16: }; Chris@16: }; Chris@16: StringErase_Helper const string_erase_; Chris@16: Chris@16: template Chris@16: struct StringAssign_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).assign (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt), Chris@16: Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).assign (Param1()(evt,fsm,state),Param2()(evt,fsm,state), Chris@16: Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: template Chris@16: struct StringAssign_ < Chris@16: Container,Param1,void,void> Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).assign(Param1()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).assign(Param1()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringAssign_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).assign(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).assign(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: struct assign_tag {}; Chris@16: struct StringAssign_Helper: proto::extends< proto::terminal::type, StringAssign_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringAssign_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringAssign_ type; Chris@16: }; Chris@16: }; Chris@16: StringAssign_Helper const string_assign_; Chris@16: Chris@16: template Chris@16: struct StringReplace_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).replace (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt), Chris@16: Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).replace (Param1()(evt,fsm,state),Param2()(evt,fsm,state), Chris@16: Param3()(evt,fsm,state),Param4()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringReplace_ Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_result_type2::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_result_type::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).replace(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt), Chris@16: Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).replace(Param1()(evt,fsm,state),Param2()(evt,fsm,state), Chris@16: Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct string_replace_tag {}; Chris@16: struct StringReplace_Helper: proto::extends< proto::terminal::type, StringReplace_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringReplace_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringReplace_ type; Chris@16: }; Chris@16: }; Chris@16: StringReplace_Helper const string_replace_; Chris@16: Chris@16: template Chris@16: struct CStr_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename ::boost::add_const< Chris@16: typename get_value_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type>::type* type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename ::boost::add_const< Chris@16: typename get_value_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type>::type* type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).c_str(); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).c_str(); Chris@16: } Chris@16: }; Chris@16: struct c_str_tag {}; Chris@16: struct CStr_Helper: proto::extends< proto::terminal::type, CStr_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: CStr_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef CStr_ type; Chris@16: }; Chris@16: }; Chris@16: CStr_Helper const c_str_; Chris@16: Chris@16: template Chris@16: struct StringData_ : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename ::boost::add_const< Chris@16: typename get_value_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type>::type* type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename ::boost::add_const< Chris@16: typename get_value_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type>::type* type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,action_tag>::type, Chris@16: typename transition_action_result::type >::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).data(); Chris@16: } Chris@16: template Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::mpl::has_key< Chris@16: typename Container::tag_type,state_action_tag>::type, Chris@16: typename state_action_result::type >::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).data(); Chris@16: } Chris@16: }; Chris@16: struct string_data_tag {}; Chris@16: struct StringData_Helper: proto::extends< proto::terminal::type, StringData_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringData_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringData_ type; Chris@16: }; Chris@16: }; Chris@16: StringData_Helper const string_data_; Chris@16: Chris@16: template Chris@16: struct StringCopy_ : euml_action > Chris@16: { Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringCopy_< Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::enable_if< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)).copy(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)).copy(Param1()(evt,fsm,state),Param2()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: template Chris@16: struct StringCopy_< Chris@16: Container,Param1,Param2,Param3, Chris@16: typename ::boost::disable_if< Chris@16: typename ::boost::is_same::type Chris@16: >::type Chris@16: > Chris@16: : euml_action > Chris@16: { Chris@16: template Chris@16: struct state_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type2::type>::type>::type type; Chris@16: }; Chris@16: template Chris@16: struct transition_action_result Chris@16: { Chris@16: typedef typename get_size_type< Chris@16: typename ::boost::remove_reference< Chris@16: typename get_result_type::type>::type>::type type; Chris@16: }; Chris@16: typedef ::boost::mpl::set tag_type; Chris@16: Chris@16: template Chris@16: typename transition_action_result::type Chris@16: operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const Chris@16: { Chris@16: return (Container()(evt,fsm,src,tgt)). Chris@16: copy(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt)); Chris@16: } Chris@16: template Chris@16: typename state_action_result::type Chris@16: operator()(Event const& evt,FSM& fsm,STATE& state )const Chris@16: { Chris@16: return (Container()(evt,fsm,state)). Chris@16: copy(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state)); Chris@16: } Chris@16: }; Chris@16: Chris@16: struct string_copy_tag {}; Chris@16: struct StringCopy_Helper: proto::extends< proto::terminal::type, StringCopy_Helper, boost::msm::sm_domain> Chris@16: { Chris@16: StringCopy_Helper(){} Chris@16: template Chris@16: struct In Chris@16: { Chris@16: typedef StringCopy_ type; Chris@16: }; Chris@16: }; Chris@16: StringCopy_Helper const string_copy_; Chris@16: Chris@16: }}}} Chris@16: Chris@16: #endif //BOOST_MSM_FRONT_EUML_CONTAINER_H