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