File indexing completed on 2025-12-17 09:53:02
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef BOOST_MSM_FRONT_EUML_CONTAINER_H
0012 #define BOOST_MSM_FRONT_EUML_CONTAINER_H
0013
0014 #include <utility>
0015 #include <boost/msm/front/euml/common.hpp>
0016 #include <boost/utility/enable_if.hpp>
0017 #include <boost/mpl/has_key.hpp>
0018 #include <boost/mpl/set.hpp>
0019 #include <boost/mpl/not.hpp>
0020 #include <boost/msm/front/euml/operator.hpp>
0021 #include <boost/type_traits.hpp>
0022 #include <boost/fusion/container/set.hpp>
0023
0024
0025 BOOST_MPL_HAS_XXX_TRAIT_DEF(iterator_category)
0026
0027 namespace boost { namespace msm { namespace front { namespace euml
0028 {
0029
0030 template <class T>
0031 struct Front_ : euml_action<Front_<T> >
0032 {
0033 template <class Event,class FSM,class STATE >
0034 struct state_action_result
0035 {
0036 typedef typename get_reference<
0037 typename ::boost::remove_reference<
0038 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type type;
0039 };
0040 template <class EVT,class FSM,class SourceState,class TargetState>
0041 struct transition_action_result
0042 {
0043 typedef typename get_reference<
0044 typename ::boost::remove_reference<
0045 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
0046 };
0047 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0048
0049 template <class EVT,class FSM,class SourceState,class TargetState>
0050 typename ::boost::enable_if<
0051 typename ::boost::mpl::has_key<
0052 typename T::tag_type,action_tag>::type,
0053 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
0054 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0055 {
0056 return (T()(evt,fsm,src,tgt)).front();
0057 }
0058 template <class Event,class FSM,class STATE>
0059 typename ::boost::enable_if<
0060 typename ::boost::mpl::has_key<
0061 typename T::tag_type,state_action_tag>::type,
0062 typename state_action_result<Event,FSM,STATE>::type >::type
0063 operator()(Event const& evt,FSM& fsm,STATE& state )const
0064 {
0065 return (T()(evt,fsm,state)).front();
0066 }
0067 };
0068
0069 struct front_tag {};
0070 struct Front_Helper: proto::extends< proto::terminal<front_tag>::type, Front_Helper, boost::msm::sm_domain>
0071 {
0072 Front_Helper(){}
0073 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0074 #ifdef BOOST_MSVC
0075 ,class Arg6
0076 #endif
0077 >
0078 struct In
0079 {
0080 typedef Front_<Arg1> type;
0081 };
0082 };
0083 Front_Helper const front_;
0084
0085 template <class T>
0086 struct Back_ : euml_action<Back_<T> >
0087 {
0088 template <class Event,class FSM,class STATE >
0089 struct state_action_result
0090 {
0091 typedef typename get_reference<
0092 typename ::boost::remove_reference<
0093 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type type;
0094 };
0095 template <class EVT,class FSM,class SourceState,class TargetState>
0096 struct transition_action_result
0097 {
0098 typedef typename get_reference<
0099 typename ::boost::remove_reference<
0100 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
0101 };
0102 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0103
0104 template <class EVT,class FSM,class SourceState,class TargetState>
0105 typename ::boost::enable_if<
0106 typename ::boost::mpl::has_key<
0107 typename T::tag_type,action_tag>::type,
0108 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
0109 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0110 {
0111 return (T()(evt,fsm,src,tgt)).back();
0112 }
0113 template <class Event,class FSM,class STATE>
0114 typename ::boost::enable_if<
0115 typename ::boost::mpl::has_key<
0116 typename T::tag_type,state_action_tag>::type,
0117 typename state_action_result<Event,FSM,STATE>::type >::type
0118 operator()(Event const& evt,FSM& fsm,STATE& state )const
0119 {
0120 return (T()(evt,fsm,state)).back();
0121 }
0122 };
0123
0124 struct back_tag {};
0125 struct Back_Helper: proto::extends< proto::terminal<back_tag>::type, Back_Helper, boost::msm::sm_domain>
0126 {
0127 Back_Helper(){}
0128 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0129 #ifdef BOOST_MSVC
0130 ,class Arg6
0131 #endif
0132 >
0133 struct In
0134 {
0135 typedef Back_<Arg1> type;
0136 };
0137 };
0138 Back_Helper const back_;
0139
0140 template <class T>
0141 struct Begin_ : euml_action<Begin_<T> >
0142 {
0143 template <class Event,class FSM,class STATE >
0144 struct state_action_result
0145 {
0146 typedef typename get_iterator<
0147 typename ::boost::remove_reference<
0148 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type type;
0149 };
0150 template <class EVT,class FSM,class SourceState,class TargetState>
0151 struct transition_action_result
0152 {
0153 typedef typename get_iterator<
0154 typename ::boost::remove_reference<
0155 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
0156 };
0157 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0158
0159 template <class EVT,class FSM,class SourceState,class TargetState>
0160 typename ::boost::enable_if<
0161 typename ::boost::mpl::has_key<
0162 typename T::tag_type,action_tag>::type,
0163 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
0164 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0165 {
0166 return (T()(evt,fsm,src,tgt)).begin();
0167 }
0168 template <class Event,class FSM,class STATE>
0169 typename ::boost::enable_if<
0170 typename ::boost::mpl::has_key<
0171 typename T::tag_type,state_action_tag>::type,
0172 typename state_action_result<Event,FSM,STATE>::type >::type
0173 operator()(Event const& evt,FSM& fsm,STATE& state )const
0174 {
0175 return (T()(evt,fsm,state)).begin();
0176 }
0177 };
0178
0179 struct begin_tag {};
0180 struct Begin_Helper: proto::extends< proto::terminal<begin_tag>::type, Begin_Helper, boost::msm::sm_domain>
0181 {
0182 Begin_Helper(){}
0183 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0184 #ifdef BOOST_MSVC
0185 ,class Arg6
0186 #endif
0187 >
0188 struct In
0189 {
0190 typedef Begin_<Arg1> type;
0191 };
0192 };
0193 Begin_Helper const begin_;
0194
0195 template <class T>
0196 struct End_ : euml_action<End_<T> >
0197 {
0198 template <class Event,class FSM,class STATE >
0199 struct state_action_result
0200 {
0201 typedef typename get_iterator<
0202 typename ::boost::remove_reference<
0203 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type type;
0204 };
0205 template <class EVT,class FSM,class SourceState,class TargetState>
0206 struct transition_action_result
0207 {
0208 typedef typename get_iterator<
0209 typename ::boost::remove_reference<
0210 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
0211 };
0212 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0213
0214 template <class EVT,class FSM,class SourceState,class TargetState>
0215 typename ::boost::enable_if<
0216 typename ::boost::mpl::has_key<
0217 typename T::tag_type,action_tag>::type,
0218 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
0219 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0220 {
0221 return (T()(evt,fsm,src,tgt)).end();
0222 }
0223 template <class Event,class FSM,class STATE>
0224 typename ::boost::enable_if<
0225 typename ::boost::mpl::has_key<
0226 typename T::tag_type,state_action_tag>::type,
0227 typename state_action_result<Event,FSM,STATE>::type >::type
0228 operator()(Event const& evt,FSM& fsm,STATE& state )const
0229 {
0230 return (T()(evt,fsm,state)).end();
0231 }
0232 };
0233 struct end_tag {};
0234 struct End_Helper: proto::extends< proto::terminal<end_tag>::type, End_Helper, boost::msm::sm_domain>
0235 {
0236 End_Helper(){}
0237 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0238 #ifdef BOOST_MSVC
0239 ,class Arg6
0240 #endif
0241 >
0242 struct In
0243 {
0244 typedef End_<Arg1> type;
0245 };
0246 };
0247 End_Helper const end_;
0248
0249 template <class T>
0250 struct RBegin_ : euml_action<RBegin_<T> >
0251 {
0252 template <class Event,class FSM,class STATE >
0253 struct state_action_result
0254 {
0255 typedef typename get_reverse_iterator<
0256 typename ::boost::remove_reference<
0257 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type type;
0258 };
0259 template <class EVT,class FSM,class SourceState,class TargetState>
0260 struct transition_action_result
0261 {
0262 typedef typename get_reverse_iterator<
0263 typename ::boost::remove_reference<
0264 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
0265 };
0266 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0267
0268 template <class EVT,class FSM,class SourceState,class TargetState>
0269 typename ::boost::enable_if<
0270 typename ::boost::mpl::has_key<
0271 typename T::tag_type,action_tag>::type,
0272 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
0273 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0274 {
0275 return (T()(evt,fsm,src,tgt)).rbegin();
0276 }
0277 template <class Event,class FSM,class STATE>
0278 typename ::boost::enable_if<
0279 typename ::boost::mpl::has_key<
0280 typename T::tag_type,state_action_tag>::type,
0281 typename state_action_result<Event,FSM,STATE>::type >::type
0282 operator()(Event const& evt,FSM& fsm,STATE& state )const
0283 {
0284 return (T()(evt,fsm,state)).rbegin();
0285 }
0286 };
0287
0288 struct rbegin_tag {};
0289 struct RBegin_Helper: proto::extends< proto::terminal<rbegin_tag>::type, RBegin_Helper, boost::msm::sm_domain>
0290 {
0291 RBegin_Helper(){}
0292 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0293 #ifdef BOOST_MSVC
0294 ,class Arg6
0295 #endif
0296 >
0297 struct In
0298 {
0299 typedef RBegin_<Arg1> type;
0300 };
0301 };
0302 RBegin_Helper const rbegin_;
0303
0304 template <class T>
0305 struct REnd_ : euml_action<REnd_<T> >
0306 {
0307 template <class Event,class FSM,class STATE >
0308 struct state_action_result
0309 {
0310 typedef typename get_reverse_iterator<
0311 typename ::boost::remove_reference<
0312 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type type;
0313 };
0314 template <class EVT,class FSM,class SourceState,class TargetState>
0315 struct transition_action_result
0316 {
0317 typedef typename get_reverse_iterator<
0318 typename ::boost::remove_reference<
0319 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
0320 };
0321 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0322
0323 template <class EVT,class FSM,class SourceState,class TargetState>
0324 typename ::boost::enable_if<
0325 typename ::boost::mpl::has_key<
0326 typename T::tag_type,action_tag>::type,
0327 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
0328 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0329 {
0330 return (T()(evt,fsm,src,tgt)).rend();
0331 }
0332 template <class Event,class FSM,class STATE>
0333 typename ::boost::enable_if<
0334 typename ::boost::mpl::has_key<
0335 typename T::tag_type,state_action_tag>::type,
0336 typename state_action_result<Event,FSM,STATE>::type >::type
0337 operator()(Event const& evt,FSM& fsm,STATE& state )const
0338 {
0339 return (T()(evt,fsm,state)).rend();
0340 }
0341 };
0342 struct rend_tag {};
0343 struct REnd_Helper: proto::extends< proto::terminal<rend_tag>::type, REnd_Helper, boost::msm::sm_domain>
0344 {
0345 REnd_Helper(){}
0346 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0347 #ifdef BOOST_MSVC
0348 ,class Arg6
0349 #endif
0350 >
0351 struct In
0352 {
0353 typedef REnd_<Arg1> type;
0354 };
0355 };
0356 REnd_Helper const rend_;
0357
0358 template <class Container,class Element>
0359 struct Push_Back_ : euml_action<Push_Back_<Container,Element> >
0360 {
0361 template <class Event,class FSM,class STATE >
0362 struct state_action_result
0363 {
0364 typedef void type;
0365 };
0366 template <class EVT,class FSM,class SourceState,class TargetState>
0367 struct transition_action_result
0368 {
0369 typedef void type;
0370 };
0371 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0372
0373 template <class EVT,class FSM,class SourceState,class TargetState>
0374 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0375 {
0376 (Container()(evt,fsm,src,tgt)).push_back(Element()(evt,fsm,src,tgt));
0377 }
0378 template <class Event,class FSM,class STATE>
0379 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0380 {
0381 (Container()(evt,fsm,state)).push_back(Element()(evt,fsm,state));
0382 }
0383 };
0384 struct push_back_tag {};
0385 struct Push_Back_Helper: proto::extends< proto::terminal<push_back_tag>::type, Push_Back_Helper, boost::msm::sm_domain>
0386 {
0387 Push_Back_Helper(){}
0388 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0389 #ifdef BOOST_MSVC
0390 ,class Arg6
0391 #endif
0392 >
0393 struct In
0394 {
0395 typedef Push_Back_<Arg1,Arg2> type;
0396 };
0397 };
0398 Push_Back_Helper const push_back_;
0399
0400 template <class Container>
0401 struct Pop_Back_ : euml_action<Pop_Back_<Container> >
0402 {
0403 template <class Event,class FSM,class STATE >
0404 struct state_action_result
0405 {
0406 typedef void type;
0407 };
0408 template <class EVT,class FSM,class SourceState,class TargetState>
0409 struct transition_action_result
0410 {
0411 typedef void type;
0412 };
0413 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0414
0415 template <class EVT,class FSM,class SourceState,class TargetState>
0416 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0417 {
0418 (Container()(evt,fsm,src,tgt)).pop_back();
0419 }
0420 template <class Event,class FSM,class STATE>
0421 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0422 {
0423 (Container()(evt,fsm,state)).pop_back();
0424 }
0425 };
0426 struct pop_back_tag {};
0427 struct Pop_Back_Helper: proto::extends< proto::terminal<pop_back_tag>::type, Pop_Back_Helper, boost::msm::sm_domain>
0428 {
0429 Pop_Back_Helper(){}
0430 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0431 #ifdef BOOST_MSVC
0432 ,class Arg6
0433 #endif
0434 >
0435 struct In
0436 {
0437 typedef Pop_Back_<Arg1> type;
0438 };
0439 };
0440 Pop_Back_Helper const pop_back_;
0441
0442 template <class Container,class Element>
0443 struct Push_Front_ : euml_action<Push_Front_<Container,Element> >
0444 {
0445 template <class Event,class FSM,class STATE >
0446 struct state_action_result
0447 {
0448 typedef void type;
0449 };
0450 template <class EVT,class FSM,class SourceState,class TargetState>
0451 struct transition_action_result
0452 {
0453 typedef void type;
0454 };
0455 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0456
0457 template <class EVT,class FSM,class SourceState,class TargetState>
0458 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0459 {
0460 (Container()(evt,fsm,src,tgt)).push_front(Element()(evt,fsm,src,tgt));
0461 }
0462 template <class Event,class FSM,class STATE>
0463 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0464 {
0465 (Container()(evt,fsm,state)).push_front(Element()(evt,fsm,state));
0466 }
0467 };
0468 struct push_front_tag {};
0469 struct Push_Front_Helper: proto::extends< proto::terminal<push_front_tag>::type, Push_Front_Helper, boost::msm::sm_domain>
0470 {
0471 Push_Front_Helper(){}
0472 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0473 #ifdef BOOST_MSVC
0474 ,class Arg6
0475 #endif
0476 >
0477 struct In
0478 {
0479 typedef Push_Front_<Arg1,Arg2> type;
0480 };
0481 };
0482 Push_Front_Helper const push_front_;
0483
0484 template <class Container>
0485 struct Pop_Front_ : euml_action<Pop_Front_<Container> >
0486 {
0487 template <class Event,class FSM,class STATE >
0488 struct state_action_result
0489 {
0490 typedef void type;
0491 };
0492 template <class EVT,class FSM,class SourceState,class TargetState>
0493 struct transition_action_result
0494 {
0495 typedef void type;
0496 };
0497 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0498
0499 template <class EVT,class FSM,class SourceState,class TargetState>
0500 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0501 {
0502 (Container()(evt,fsm,src,tgt)).pop_front();
0503 }
0504 template <class Event,class FSM,class STATE>
0505 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0506 {
0507 (Container()(evt,fsm,state)).pop_front();
0508 }
0509 };
0510 struct pop_front_tag {};
0511 struct Pop_Front_Helper: proto::extends< proto::terminal<pop_front_tag>::type, Pop_Front_Helper, boost::msm::sm_domain>
0512 {
0513 Pop_Front_Helper(){}
0514 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0515 #ifdef BOOST_MSVC
0516 ,class Arg6
0517 #endif
0518 >
0519 struct In
0520 {
0521 typedef Pop_Front_<Arg1> type;
0522 };
0523 };
0524 Pop_Front_Helper const pop_front_;
0525
0526 template <class Container>
0527 struct Clear_ : euml_action<Clear_<Container> >
0528 {
0529 template <class Event,class FSM,class STATE >
0530 struct state_action_result
0531 {
0532 typedef void type;
0533 };
0534 template <class EVT,class FSM,class SourceState,class TargetState>
0535 struct transition_action_result
0536 {
0537 typedef void type;
0538 };
0539 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0540
0541 template <class EVT,class FSM,class SourceState,class TargetState>
0542 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0543 {
0544 (Container()(evt,fsm,src,tgt)).clear();
0545 }
0546 template <class Event,class FSM,class STATE>
0547 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0548 {
0549 (Container()(evt,fsm,state)).clear();
0550 }
0551 };
0552 struct clear_tag {};
0553 struct Clear_Helper: proto::extends< proto::terminal<clear_tag>::type, Clear_Helper, boost::msm::sm_domain>
0554 {
0555 Clear_Helper(){}
0556 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0557 #ifdef BOOST_MSVC
0558 ,class Arg6
0559 #endif
0560 >
0561 struct In
0562 {
0563 typedef Clear_<Arg1> type;
0564 };
0565 };
0566 Clear_Helper const clear_;
0567
0568 template <class Container>
0569 struct ListReverse_ : euml_action<ListReverse_<Container> >
0570 {
0571 template <class Event,class FSM,class STATE >
0572 struct state_action_result
0573 {
0574 typedef void type;
0575 };
0576 template <class EVT,class FSM,class SourceState,class TargetState>
0577 struct transition_action_result
0578 {
0579 typedef void type;
0580 };
0581 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0582
0583 template <class EVT,class FSM,class SourceState,class TargetState>
0584 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0585 {
0586 (Container()(evt,fsm,src,tgt)).reverse();
0587 }
0588 template <class Event,class FSM,class STATE>
0589 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0590 {
0591 (Container()(evt,fsm,state)).reverse();
0592 }
0593 };
0594 struct list_reverse_tag {};
0595 struct ListReverse_Helper: proto::extends< proto::terminal<list_reverse_tag>::type, ListReverse_Helper, boost::msm::sm_domain>
0596 {
0597 ListReverse_Helper(){}
0598 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0599 #ifdef BOOST_MSVC
0600 ,class Arg6
0601 #endif
0602 >
0603 struct In
0604 {
0605 typedef ListReverse_<Arg1> type;
0606 };
0607 };
0608 ListReverse_Helper const list_reverse_;
0609
0610 template <class Container, class Predicate, class Enable=void>
0611 struct ListUnique_ : euml_action<ListUnique_<Container,Predicate,Enable> >
0612 {
0613 template <class Event,class FSM,class STATE >
0614 struct state_action_result
0615 {
0616 typedef void type;
0617 };
0618 template <class EVT,class FSM,class SourceState,class TargetState>
0619 struct transition_action_result
0620 {
0621 typedef void type;
0622 };
0623 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0624
0625 template <class EVT,class FSM,class SourceState,class TargetState>
0626 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0627 {
0628 (Container()(evt,fsm,src,tgt)).unique();
0629 }
0630 template <class Event,class FSM,class STATE>
0631 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0632 {
0633 (Container()(evt,fsm,state)).unique();
0634 }
0635 };
0636 template <class Container, class Predicate >
0637 struct ListUnique_<Container,Predicate,
0638 typename ::boost::disable_if<typename ::boost::is_same<Predicate,void>::type >::type>
0639 : euml_action<ListUnique_<Container,Predicate> >
0640 {
0641 template <class Event,class FSM,class STATE >
0642 struct state_action_result
0643 {
0644 typedef void type;
0645 };
0646 template <class EVT,class FSM,class SourceState,class TargetState>
0647 struct transition_action_result
0648 {
0649 typedef void type;
0650 };
0651 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0652
0653 template <class EVT,class FSM,class SourceState,class TargetState>
0654 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0655 {
0656 (Container()(evt,fsm,src,tgt)).unique(Predicate()(evt,fsm,src,tgt));
0657 }
0658 template <class Event,class FSM,class STATE>
0659 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0660 {
0661 (Container()(evt,fsm,state)).unique(Predicate()(evt,fsm,state));
0662 }
0663 };
0664 struct list_unique_tag {};
0665 struct ListUnique_Helper: proto::extends< proto::terminal<list_unique_tag>::type, ListUnique_Helper, boost::msm::sm_domain>
0666 {
0667 ListUnique_Helper(){}
0668 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0669 #ifdef BOOST_MSVC
0670 ,class Arg6
0671 #endif
0672 >
0673 struct In
0674 {
0675 typedef ListUnique_<Arg1,Arg2> type;
0676 };
0677 };
0678 ListUnique_Helper const list_unique_;
0679
0680 template <class Container, class Predicate, class Enable=void>
0681 struct ListSort_ : euml_action<ListSort_<Container,Predicate,Enable> >
0682 {
0683 template <class Event,class FSM,class STATE >
0684 struct state_action_result
0685 {
0686 typedef void type;
0687 };
0688 template <class EVT,class FSM,class SourceState,class TargetState>
0689 struct transition_action_result
0690 {
0691 typedef void type;
0692 };
0693 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0694
0695 template <class EVT,class FSM,class SourceState,class TargetState>
0696 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0697 {
0698 (Container()(evt,fsm,src,tgt)).sort();
0699 }
0700 template <class Event,class FSM,class STATE>
0701 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0702 {
0703 (Container()(evt,fsm,state)).sort();
0704 }
0705 };
0706 template <class Container, class Predicate >
0707 struct ListSort_<Container,Predicate,
0708 typename ::boost::disable_if<typename ::boost::is_same<Predicate,void>::type >::type>
0709 : euml_action<ListSort_<Container,Predicate> >
0710 {
0711 template <class Event,class FSM,class STATE >
0712 struct state_action_result
0713 {
0714 typedef void type;
0715 };
0716 template <class EVT,class FSM,class SourceState,class TargetState>
0717 struct transition_action_result
0718 {
0719 typedef void type;
0720 };
0721 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0722
0723 template <class EVT,class FSM,class SourceState,class TargetState>
0724 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0725 {
0726 (Container()(evt,fsm,src,tgt)).sort(Predicate()(evt,fsm,src,tgt));
0727 }
0728 template <class Event,class FSM,class STATE>
0729 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0730 {
0731 (Container()(evt,fsm,state)).sort(Predicate()(evt,fsm,state));
0732 }
0733 };
0734 struct list_sort_tag {};
0735 struct ListSort_Helper: proto::extends< proto::terminal<list_sort_tag>::type, ListSort_Helper, boost::msm::sm_domain>
0736 {
0737 ListSort_Helper(){}
0738 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0739 #ifdef BOOST_MSVC
0740 ,class Arg6
0741 #endif
0742 >
0743 struct In
0744 {
0745 typedef ListSort_<Arg1,Arg2> type;
0746 };
0747 };
0748 ListSort_Helper const list_sort_;
0749
0750 template <class Container>
0751 struct Capacity_ : euml_action<Capacity_<Container> >
0752 {
0753 template <class Event,class FSM,class STATE >
0754 struct state_action_result
0755 {
0756 typedef typename get_size_type<
0757 typename ::boost::remove_reference<
0758 typename get_result_type2<Container,Event,FSM,STATE>::type>::type>::type type;
0759 };
0760 template <class EVT,class FSM,class SourceState,class TargetState>
0761 struct transition_action_result
0762 {
0763 typedef typename get_size_type<
0764 typename ::boost::remove_reference<
0765 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
0766 };
0767 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0768
0769 template <class EVT,class FSM,class SourceState,class TargetState>
0770 typename ::boost::enable_if<
0771 typename ::boost::mpl::has_key<
0772 typename Container::tag_type,action_tag>::type,
0773 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
0774 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0775 {
0776 return (Container()(evt,fsm,src,tgt)).capacity();
0777 }
0778 template <class Event,class FSM,class STATE>
0779 typename ::boost::enable_if<
0780 typename ::boost::mpl::has_key<
0781 typename Container::tag_type,state_action_tag>::type,
0782 typename state_action_result<Event,FSM,STATE>::type >::type
0783 operator()(Event const& evt,FSM& fsm,STATE& state )const
0784 {
0785 return (Container()(evt,fsm,state)).capacity();
0786 }
0787 };
0788 struct capacity_tag {};
0789 struct Capacity_Helper: proto::extends< proto::terminal<capacity_tag>::type, Capacity_Helper, boost::msm::sm_domain>
0790 {
0791 Capacity_Helper(){}
0792 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0793 #ifdef BOOST_MSVC
0794 ,class Arg6
0795 #endif
0796 >
0797 struct In
0798 {
0799 typedef Capacity_<Arg1> type;
0800 };
0801 };
0802 Capacity_Helper const capacity_;
0803
0804 template <class Container>
0805 struct Size_ : euml_action<Size_<Container> >
0806 {
0807 template <class Event,class FSM,class STATE >
0808 struct state_action_result
0809 {
0810 typedef typename get_size_type<
0811 typename ::boost::remove_reference<
0812 typename get_result_type2<Container,Event,FSM,STATE>::type>::type>::type type;
0813 };
0814 template <class EVT,class FSM,class SourceState,class TargetState>
0815 struct transition_action_result
0816 {
0817 typedef typename get_size_type<
0818 typename ::boost::remove_reference<
0819 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
0820 };
0821 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0822
0823 template <class EVT,class FSM,class SourceState,class TargetState>
0824 typename ::boost::enable_if<
0825 typename ::boost::mpl::has_key<
0826 typename Container::tag_type,action_tag>::type,
0827 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
0828 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0829 {
0830 return (Container()(evt,fsm,src,tgt)).size();
0831 }
0832 template <class Event,class FSM,class STATE>
0833 typename ::boost::enable_if<
0834 typename ::boost::mpl::has_key<
0835 typename Container::tag_type,state_action_tag>::type,
0836 typename state_action_result<Event,FSM,STATE>::type >::type
0837 operator()(Event const& evt,FSM& fsm,STATE& state )const
0838 {
0839 return (Container()(evt,fsm,state)).size();
0840 }
0841 };
0842 struct size_tag {};
0843 struct Size_Helper: proto::extends< proto::terminal<size_tag>::type, Size_Helper, boost::msm::sm_domain>
0844 {
0845 Size_Helper(){}
0846 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0847 #ifdef BOOST_MSVC
0848 ,class Arg6
0849 #endif
0850 >
0851 struct In
0852 {
0853 typedef Size_<Arg1> type;
0854 };
0855 };
0856 Size_Helper const size_;
0857
0858 template <class Container>
0859 struct Max_Size_ : euml_action<Max_Size_<Container> >
0860 {
0861 template <class Event,class FSM,class STATE >
0862 struct state_action_result
0863 {
0864 typedef typename get_size_type<
0865 typename ::boost::remove_reference<
0866 typename get_result_type2<Container,Event,FSM,STATE>::type>::type>::type type;
0867 };
0868 template <class EVT,class FSM,class SourceState,class TargetState>
0869 struct transition_action_result
0870 {
0871 typedef typename get_size_type<
0872 typename ::boost::remove_reference<
0873 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
0874 };
0875 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0876
0877 template <class EVT,class FSM,class SourceState,class TargetState>
0878 typename ::boost::enable_if<
0879 typename ::boost::mpl::has_key<
0880 typename Container::tag_type,action_tag>::type,
0881 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
0882 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0883 {
0884 return (Container()(evt,fsm,src,tgt)).max_size();
0885 }
0886 template <class Event,class FSM,class STATE>
0887 typename ::boost::enable_if<
0888 typename ::boost::mpl::has_key<
0889 typename Container::tag_type,state_action_tag>::type,
0890 typename state_action_result<Event,FSM,STATE>::type >::type
0891 operator()(Event const& evt,FSM& fsm,STATE& state )const
0892 {
0893 return (Container()(evt,fsm,state)).max_size();
0894 }
0895 };
0896 struct max_size_tag {};
0897 struct Max_Size_Helper: proto::extends< proto::terminal<max_size_tag>::type, Max_Size_Helper, boost::msm::sm_domain>
0898 {
0899 Max_Size_Helper(){}
0900 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0901 #ifdef BOOST_MSVC
0902 ,class Arg6
0903 #endif
0904 >
0905 struct In
0906 {
0907 typedef Max_Size_<Arg1> type;
0908 };
0909 };
0910 Max_Size_Helper const max_size_;
0911
0912 template <class Container, class Value>
0913 struct Reserve_ : euml_action<Reserve_<Container,Value> >
0914 {
0915 template <class Event,class FSM,class STATE >
0916 struct state_action_result
0917 {
0918 typedef void type;
0919 };
0920 template <class EVT,class FSM,class SourceState,class TargetState>
0921 struct transition_action_result
0922 {
0923 typedef void type;
0924 };
0925 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0926
0927 template <class EVT,class FSM,class SourceState,class TargetState>
0928 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0929 {
0930 (Container()(evt,fsm,src,tgt)).reserve(Value()(evt,fsm,src,tgt));
0931 }
0932 template <class Event,class FSM,class STATE>
0933 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0934 {
0935 (Container()(evt,fsm,state)).reserve(Value()(evt,fsm,state));
0936 }
0937 };
0938 struct reserve_tag {};
0939 struct Reserve_Helper: proto::extends< proto::terminal<reserve_tag>::type, Reserve_Helper, boost::msm::sm_domain>
0940 {
0941 Reserve_Helper(){}
0942 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
0943 #ifdef BOOST_MSVC
0944 ,class Arg6
0945 #endif
0946 >
0947 struct In
0948 {
0949 typedef Reserve_<Arg1,Arg2> type;
0950 };
0951 };
0952 Reserve_Helper const reserve_;
0953
0954 template <class Container, class Num, class Value ,class Enable=void >
0955 struct Resize_ : euml_action<Resize_<Container,Num,Value> >
0956 {
0957 template <class Event,class FSM,class STATE >
0958 struct state_action_result
0959 {
0960 typedef void type;
0961 };
0962 template <class EVT,class FSM,class SourceState,class TargetState>
0963 struct transition_action_result
0964 {
0965 typedef void type;
0966 };
0967 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0968
0969 template <class EVT,class FSM,class SourceState,class TargetState>
0970 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0971 {
0972 (Container()(evt,fsm,src,tgt)).resize(Num()(evt,fsm,src,tgt));
0973 }
0974 template <class Event,class FSM,class STATE>
0975 void operator()(Event const& evt,FSM& fsm,STATE& state )const
0976 {
0977 (Container()(evt,fsm,state)).resize(Num()(evt,fsm,state));
0978 }
0979 };
0980 template <class Container, class Num , class Value >
0981 struct Resize_<Container,Num,Value,typename ::boost::disable_if<typename ::boost::is_same<Value,void>::type >::type>
0982 : euml_action<Resize_<Container,Num,Value> >
0983 {
0984 template <class Event,class FSM,class STATE >
0985 struct state_action_result
0986 {
0987 typedef void type;
0988 };
0989 template <class EVT,class FSM,class SourceState,class TargetState>
0990 struct transition_action_result
0991 {
0992 typedef void type;
0993 };
0994 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
0995
0996 template <class EVT,class FSM,class SourceState,class TargetState>
0997 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
0998 {
0999 (Container()(evt,fsm,src,tgt)).resize(Num()(evt,fsm,src,tgt),Value()(evt,fsm,src,tgt));
1000 }
1001 template <class Event,class FSM,class STATE>
1002 void operator()(Event const& evt,FSM& fsm,STATE& state )const
1003 {
1004 (Container()(evt,fsm,state)).resize(Num()(evt,fsm,state),Value()(evt,fsm,state));
1005 }
1006 };
1007 struct resize_tag {};
1008 struct Resize_Helper: proto::extends< proto::terminal<resize_tag>::type, Resize_Helper, boost::msm::sm_domain>
1009 {
1010 Resize_Helper(){}
1011 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
1012 #ifdef BOOST_MSVC
1013 ,class Arg6
1014 #endif
1015 >
1016 struct In
1017 {
1018 typedef Resize_<Arg1,Arg2,Arg3> type;
1019 };
1020 };
1021 Resize_Helper const resize_;
1022
1023
1024 template <class Container, class Param1, class Param2, class Param3 >
1025 struct Insert_ : euml_action<Insert_<Container,Param1,Param2,Param3> >
1026 {
1027 template <class Event,class FSM,class STATE >
1028 struct state_action_result
1029 {
1030 typedef void type;
1031 };
1032 template <class EVT,class FSM,class SourceState,class TargetState>
1033 struct transition_action_result
1034 {
1035 typedef void type;
1036 };
1037 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1038
1039 template <class EVT,class FSM,class SourceState,class TargetState>
1040 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1041 {
1042 (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
1043 Param3()(evt,fsm,src,tgt));
1044 }
1045 template <class Event,class FSM,class STATE>
1046 void operator()(Event const& evt,FSM& fsm,STATE& state )const
1047 {
1048 (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
1049 Param3()(evt,fsm,state));
1050 }
1051 };
1052
1053 template <class Container, class Param1, class Param2>
1054 struct Insert_ < Container,Param1,Param2,void>
1055 : euml_action<Insert_<Container,Param1,Param2,void> >
1056 {
1057
1058
1059 template <class Event,class FSM,class STATE >
1060 struct state_action_result
1061 {
1062 typedef typename get_iterator<
1063 typename ::boost::remove_reference<
1064 typename get_result_type2<Container,Event,FSM,STATE>::type>::type>::type type;
1065 };
1066 template <class EVT,class FSM,class SourceState,class TargetState>
1067 struct transition_action_result
1068 {
1069 typedef typename get_iterator<
1070 typename ::boost::remove_reference<
1071 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
1072 };
1073 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1074
1075
1076 template <class EVT,class FSM,class SourceState,class TargetState>
1077 typename ::boost::enable_if<
1078 typename ::boost::mpl::and_<
1079 typename ::boost::mpl::has_key<
1080 typename Container::tag_type,action_tag>::type,
1081 typename ::boost::mpl::not_<
1082 typename has_iterator_category<
1083 typename Param2::template transition_action_result<EVT,FSM,SourceState,TargetState>::type
1084 >::type
1085 >::type
1086 >::type,
1087 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
1088 >::type
1089 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1090 {
1091 return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
1092 }
1093
1094
1095 template <class EVT,class FSM,class SourceState,class TargetState>
1096 typename ::boost::enable_if<
1097 typename ::boost::mpl::and_<
1098 typename ::boost::mpl::has_key<
1099 typename Container::tag_type,action_tag>::type,
1100 typename has_iterator_category<
1101 typename Param2::template transition_action_result<EVT,FSM,SourceState,TargetState>::type
1102 >::type
1103 >::type,
1104 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
1105 >::type
1106 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1107 {
1108 (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
1109 }
1110
1111
1112 template <class Event,class FSM,class STATE>
1113 typename ::boost::enable_if<
1114 typename ::boost::mpl::and_<
1115 typename ::boost::mpl::has_key<
1116 typename Container::tag_type,state_action_tag>::type,
1117 typename ::boost::mpl::not_<
1118 typename has_iterator_category<
1119 typename Param2::template state_action_result<Event,FSM,STATE>::type
1120 >::type
1121 >::type
1122 >::type,
1123 typename state_action_result<Event,FSM,STATE>::type
1124 >::type
1125 operator()(Event const& evt,FSM& fsm,STATE& state )const
1126 {
1127 return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
1128 }
1129
1130
1131 template <class Event,class FSM,class STATE>
1132 typename ::boost::enable_if<
1133 typename ::boost::mpl::and_<
1134 typename ::boost::mpl::has_key<
1135 typename Container::tag_type,state_action_tag>::type,
1136 typename has_iterator_category<
1137 typename Param2::template state_action_result<Event,FSM,STATE>::type
1138 >::type
1139 >::type,
1140 typename state_action_result<Event,FSM,STATE>::type
1141 >::type
1142 operator()(Event const& evt,FSM& fsm,STATE& state )const
1143 {
1144 (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
1145 }
1146 };
1147
1148
1149 template <class Container, class Param1>
1150 struct Insert_ < Container,Param1,void,void>
1151 : euml_action<Insert_<Container,Param1,void,void> >
1152 {
1153 template <class Event,class FSM,class STATE >
1154 struct state_action_result
1155 {
1156 typedef typename std::pair<
1157 typename get_iterator<
1158 typename ::boost::remove_reference<
1159 typename get_result_type2<Container,Event,FSM,STATE>::type>::type>::type,bool> type;
1160 };
1161 template <class EVT,class FSM,class SourceState,class TargetState>
1162 struct transition_action_result
1163 {
1164 typedef typename std::pair<
1165 typename get_iterator<
1166 typename ::boost::remove_reference<
1167 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type>::type,bool> type;
1168 };
1169 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1170
1171 template <class EVT,class FSM,class SourceState,class TargetState>
1172 typename ::boost::enable_if<
1173 typename ::boost::mpl::has_key<
1174 typename Container::tag_type,action_tag>::type,
1175 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
1176 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1177 {
1178 return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt));
1179 }
1180 template <class Event,class FSM,class STATE>
1181 typename ::boost::enable_if<
1182 typename ::boost::mpl::has_key<
1183 typename Container::tag_type,state_action_tag>::type,
1184 typename state_action_result<Event,FSM,STATE>::type >::type
1185 operator()(Event const& evt,FSM& fsm,STATE& state )const
1186 {
1187 return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state));
1188 }
1189 };
1190 struct insert_tag {};
1191 struct Insert_Helper: proto::extends< proto::terminal<insert_tag>::type, Insert_Helper, boost::msm::sm_domain>
1192 {
1193 Insert_Helper(){}
1194 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
1195 #ifdef BOOST_MSVC
1196 ,class Arg6
1197 #endif
1198 >
1199 struct In
1200 {
1201 typedef Insert_<Arg1,Arg2,Arg3,Arg4> type;
1202 };
1203 };
1204 Insert_Helper const insert_;
1205
1206 template <class Container1,class Container2>
1207 struct Swap_ : euml_action<Swap_<Container1,Container2> >
1208 {
1209 template <class Event,class FSM,class STATE >
1210 struct state_action_result
1211 {
1212 typedef void type;
1213 };
1214 template <class EVT,class FSM,class SourceState,class TargetState>
1215 struct transition_action_result
1216 {
1217 typedef void type;
1218 };
1219 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1220
1221 template <class EVT,class FSM,class SourceState,class TargetState>
1222 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1223 {
1224 (Container1()(evt,fsm,src,tgt)).swap(Container2()(evt,fsm,src,tgt));
1225 }
1226 template <class Event,class FSM,class STATE>
1227 void operator()(Event const& evt,FSM& fsm,STATE& state )const
1228 {
1229 (Container1()(evt,fsm,state)).swap(Container2()(evt,fsm,state));
1230 }
1231 };
1232 struct swap_tag {};
1233 struct Swap_Helper: proto::extends< proto::terminal<swap_tag>::type, Swap_Helper, boost::msm::sm_domain>
1234 {
1235 Swap_Helper(){}
1236 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
1237 #ifdef BOOST_MSVC
1238 ,class Arg6
1239 #endif
1240 >
1241 struct In
1242 {
1243 typedef Swap_<Arg1,Arg2> type;
1244 };
1245 };
1246 Swap_Helper const swap_;
1247
1248 template <class Container, class Iterator1, class Iterator2 ,class Enable=void >
1249 struct Erase_ : euml_action<Erase_<Container,Iterator1,Iterator2> >
1250 {
1251 template <class Event,class FSM,class STATE >
1252 struct state_action_result
1253 {
1254 typedef typename get_result_type2<Iterator1,Event,FSM,STATE>::type type;
1255 };
1256 template <class EVT,class FSM,class SourceState,class TargetState>
1257 struct transition_action_result
1258 {
1259 typedef typename get_result_type<Iterator1,EVT,FSM,SourceState,TargetState>::type type;
1260 };
1261 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1262
1263 template <class EVT,class FSM,class SourceState,class TargetState>
1264 typename ::boost::enable_if<
1265 typename ::boost::mpl::has_key<
1266 typename Iterator1::tag_type,action_tag>::type,
1267 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
1268 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1269 {
1270 return (Container()(evt,fsm,src,tgt)).erase(Iterator1()(evt,fsm,src,tgt));
1271 }
1272 template <class Event,class FSM,class STATE>
1273 typename ::boost::enable_if<
1274 typename ::boost::mpl::has_key<
1275 typename Iterator1::tag_type,state_action_tag>::type,
1276 typename state_action_result<Event,FSM,STATE>::type >::type
1277 operator()(Event const& evt,FSM& fsm,STATE& state )const
1278 {
1279 return (Container()(evt,fsm,state)).erase(Iterator1()(evt,fsm,state));
1280 }
1281 };
1282 template <class Container, class Iterator1 , class Iterator2 >
1283 struct Erase_<Container,Iterator1,Iterator2,
1284 typename ::boost::disable_if<typename ::boost::is_same<Iterator2,void>::type >::type>
1285 : euml_action<Erase_<Container,Iterator1,Iterator2> >
1286 {
1287 template <class Event,class FSM,class STATE >
1288 struct state_action_result
1289 {
1290 typedef typename get_result_type2<Iterator1,Event,FSM,STATE>::type type;
1291 };
1292 template <class EVT,class FSM,class SourceState,class TargetState>
1293 struct transition_action_result
1294 {
1295 typedef typename get_result_type<Iterator1,EVT,FSM,SourceState,TargetState>::type type;
1296 };
1297 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1298
1299 template <class EVT,class FSM,class SourceState,class TargetState>
1300 typename ::boost::enable_if<
1301 typename ::boost::mpl::has_key<
1302 typename Iterator1::tag_type,action_tag>::type,
1303 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
1304 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1305 {
1306 return (Container()(evt,fsm,src,tgt)).erase(Iterator1()(evt,fsm,src,tgt),Iterator2()(evt,fsm,src,tgt));
1307 }
1308 template <class Event,class FSM,class STATE>
1309 typename ::boost::enable_if<
1310 typename ::boost::mpl::has_key<
1311 typename Iterator1::tag_type,state_action_tag>::type,
1312 typename state_action_result<Event,FSM,STATE>::type >::type
1313 operator()(Event const& evt,FSM& fsm,STATE& state )const
1314 {
1315 return (Container()(evt,fsm,state)).erase(Iterator1()(evt,fsm,state),Iterator2()(evt,fsm,state));
1316 }
1317 };
1318 struct erase_tag {};
1319 struct Erase_Helper: proto::extends< proto::terminal<erase_tag>::type, Erase_Helper, boost::msm::sm_domain>
1320 {
1321 Erase_Helper(){}
1322 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
1323 #ifdef BOOST_MSVC
1324 ,class Arg6
1325 #endif
1326 >
1327 struct In
1328 {
1329 typedef Erase_<Arg1,Arg2,Arg3> type;
1330 };
1331 };
1332 Erase_Helper const erase_;
1333
1334 template <class Container>
1335 struct Empty_ : euml_action<Empty_<Container> >
1336 {
1337 template <class Event,class FSM,class STATE >
1338 struct state_action_result
1339 {
1340 typedef bool type;
1341 };
1342 template <class EVT,class FSM,class SourceState,class TargetState>
1343 struct transition_action_result
1344 {
1345 typedef bool type;
1346 };
1347 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1348
1349 template <class EVT,class FSM,class SourceState,class TargetState>
1350 bool operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1351 {
1352 return (Container()(evt,fsm,src,tgt)).empty();
1353 }
1354 template <class Event,class FSM,class STATE>
1355 bool operator()(Event const& evt,FSM& fsm,STATE& state )const
1356 {
1357 return (Container()(evt,fsm,state)).empty();
1358 }
1359 };
1360 struct empty_tag {};
1361 struct Empty_Helper: proto::extends< proto::terminal<empty_tag>::type, Empty_Helper, boost::msm::sm_domain>
1362 {
1363 Empty_Helper(){}
1364 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
1365 #ifdef BOOST_MSVC
1366 ,class Arg6
1367 #endif
1368 >
1369 struct In
1370 {
1371 typedef Empty_<Arg1> type;
1372 };
1373 };
1374 Empty_Helper const empty_;
1375
1376 template <class Container,class Element>
1377 struct ListRemove_ : euml_action<ListRemove_<Container,Element> >
1378 {
1379 template <class Event,class FSM,class STATE >
1380 struct state_action_result
1381 {
1382 typedef void type;
1383 };
1384 template <class EVT,class FSM,class SourceState,class TargetState>
1385 struct transition_action_result
1386 {
1387 typedef void type;
1388 };
1389 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1390
1391 template <class EVT,class FSM,class SourceState,class TargetState>
1392 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1393 {
1394 (Container()(evt,fsm,src,tgt)).remove(Element()(evt,fsm,src,tgt));
1395 }
1396 template <class Event,class FSM,class STATE>
1397 void operator()(Event const& evt,FSM& fsm,STATE& state )const
1398 {
1399 (Container()(evt,fsm,state)).remove(Element()(evt,fsm,state));
1400 }
1401 };
1402 struct list_remove_tag {};
1403 struct ListRemove_Helper: proto::extends< proto::terminal<list_remove_tag>::type, ListRemove_Helper, boost::msm::sm_domain>
1404 {
1405 ListRemove_Helper(){}
1406 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
1407 #ifdef BOOST_MSVC
1408 ,class Arg6
1409 #endif
1410 >
1411 struct In
1412 {
1413 typedef ListRemove_<Arg1,Arg2> type;
1414 };
1415 };
1416 ListRemove_Helper const list_remove_;
1417
1418 template <class Container,class Element>
1419 struct ListRemove_If_ : euml_action<ListRemove_If_<Container,Element> >
1420 {
1421 template <class Event,class FSM,class STATE >
1422 struct state_action_result
1423 {
1424 typedef void type;
1425 };
1426 template <class EVT,class FSM,class SourceState,class TargetState>
1427 struct transition_action_result
1428 {
1429 typedef void type;
1430 };
1431 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1432
1433 template <class EVT,class FSM,class SourceState,class TargetState>
1434 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1435 {
1436 (Container()(evt,fsm,src,tgt)).remove_if(Element()(evt,fsm,src,tgt));
1437 }
1438 template <class Event,class FSM,class STATE>
1439 void operator()(Event const& evt,FSM& fsm,STATE& state )const
1440 {
1441 (Container()(evt,fsm,state)).remove_if(Element()(evt,fsm,state));
1442 }
1443 };
1444 struct list_remove_if_tag {};
1445 struct ListRemove_If_Helper: proto::extends< proto::terminal<list_remove_if_tag>::type, ListRemove_If_Helper, boost::msm::sm_domain>
1446 {
1447 ListRemove_If_Helper(){}
1448 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
1449 #ifdef BOOST_MSVC
1450 ,class Arg6
1451 #endif
1452 >
1453 struct In
1454 {
1455 typedef ListRemove_If_<Arg1,Arg2> type;
1456 };
1457 };
1458 ListRemove_If_Helper const list_remove_if_;
1459
1460 template <class Container, class ToMerge, class Predicate, class Enable=void>
1461 struct ListMerge_ : euml_action<ListMerge_<Container,ToMerge,Predicate,Enable> >
1462 {
1463 template <class Event,class FSM,class STATE >
1464 struct state_action_result
1465 {
1466 typedef void type;
1467 };
1468 template <class EVT,class FSM,class SourceState,class TargetState>
1469 struct transition_action_result
1470 {
1471 typedef void type;
1472 };
1473 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1474
1475 template <class EVT,class FSM,class SourceState,class TargetState>
1476 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1477 {
1478 (Container()(evt,fsm,src,tgt)).merge(ToMerge()(evt,fsm,src,tgt));
1479 }
1480 template <class Event,class FSM,class STATE>
1481 void operator()(Event const& evt,FSM& fsm,STATE& state )const
1482 {
1483 (Container()(evt,fsm,state)).merge(ToMerge()(evt,fsm,state));
1484 }
1485 };
1486 template <class Container, class ToMerge, class Predicate >
1487 struct ListMerge_<Container,ToMerge,Predicate,
1488 typename ::boost::disable_if<typename ::boost::is_same<Predicate,void>::type >::type>
1489 : euml_action<ListMerge_<Container,ToMerge,Predicate> >
1490 {
1491 template <class Event,class FSM,class STATE >
1492 struct state_action_result
1493 {
1494 typedef void type;
1495 };
1496 template <class EVT,class FSM,class SourceState,class TargetState>
1497 struct transition_action_result
1498 {
1499 typedef void type;
1500 };
1501 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1502
1503 template <class EVT,class FSM,class SourceState,class TargetState>
1504 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1505 {
1506 (Container()(evt,fsm,src,tgt)).merge(ToMerge()(evt,fsm,src,tgt),Predicate()(evt,fsm,src,tgt));
1507 }
1508 template <class Event,class FSM,class STATE>
1509 void operator()(Event const& evt,FSM& fsm,STATE& state )const
1510 {
1511 (Container()(evt,fsm,state)).merge(ToMerge()(evt,fsm,state),Predicate()(evt,fsm,state));
1512 }
1513 };
1514 struct list_merge_tag {};
1515 struct ListMerge_Helper: proto::extends< proto::terminal<list_merge_tag>::type, ListMerge_Helper, boost::msm::sm_domain>
1516 {
1517 ListMerge_Helper(){}
1518 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
1519 #ifdef BOOST_MSVC
1520 ,class Arg6
1521 #endif
1522 >
1523 struct In
1524 {
1525 typedef ListMerge_<Arg1,Arg2,Arg3> type;
1526 };
1527 };
1528 ListMerge_Helper const list_merge_;
1529
1530 template <class Container, class Param1, class Param2, class Param3, class Param4 ,class Enable=void >
1531 struct Splice_ : euml_action<Splice_<Container,Param1,Param2,Param3,Param4,Enable> >
1532 {
1533 template <class Event,class FSM,class STATE >
1534 struct state_action_result
1535 {
1536 typedef void type;
1537 };
1538 template <class EVT,class FSM,class SourceState,class TargetState>
1539 struct transition_action_result
1540 {
1541 typedef void type;
1542 };
1543 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1544
1545 template <class EVT,class FSM,class SourceState,class TargetState>
1546 typename ::boost::enable_if<
1547 typename ::boost::mpl::has_key<
1548 typename Container::tag_type,action_tag>::type,
1549 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
1550 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1551 {
1552 return (Container()(evt,fsm,src,tgt)).splice(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
1553 }
1554 template <class Event,class FSM,class STATE>
1555 typename ::boost::enable_if<
1556 typename ::boost::mpl::has_key<
1557 typename Container::tag_type,state_action_tag>::type,
1558 typename state_action_result<Event,FSM,STATE>::type >::type
1559 operator()(Event const& evt,FSM& fsm,STATE& state )const
1560 {
1561 return (Container()(evt,fsm,state)).splice(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
1562 }
1563 };
1564 template <class Container, class Param1, class Param2, class Param3, class Param4 >
1565 struct Splice_<Container,Param1,Param2,Param3,Param4,
1566 typename ::boost::disable_if<
1567 typename ::boost::mpl::or_<typename ::boost::is_same<Param3,void>::type,
1568 typename ::boost::mpl::not_<
1569 typename ::boost::is_same<Param4,void>::type>::type>::type >::type>
1570 : euml_action<Splice_<Container,Param1,Param2,Param3,Param4> >
1571 {
1572 template <class Event,class FSM,class STATE >
1573 struct state_action_result
1574 {
1575 typedef void type;
1576 };
1577 template <class EVT,class FSM,class SourceState,class TargetState>
1578 struct transition_action_result
1579 {
1580 typedef void type;
1581 };
1582 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1583
1584 template <class EVT,class FSM,class SourceState,class TargetState>
1585 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1586 {
1587 (Container()(evt,fsm,src,tgt)).splice(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
1588 Param3()(evt,fsm,src,tgt));
1589 }
1590 template <class Event,class FSM,class STATE>
1591 void operator()(Event const& evt,FSM& fsm,STATE& state )const
1592 {
1593 (Container()(evt,fsm,state)).splice(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
1594 Param3()(evt,fsm,state));
1595 }
1596 };
1597 template <class Container, class Param1, class Param2, class Param3, class Param4 >
1598 struct Splice_<Container,Param1,Param2,Param3,Param4,
1599 typename ::boost::disable_if<typename ::boost::is_same<Param4,void>::type >::type>
1600 : euml_action<Splice_<Container,Param1,Param2,Param3,Param4> >
1601 {
1602 template <class Event,class FSM,class STATE >
1603 struct state_action_result
1604 {
1605 typedef void type;
1606 };
1607 template <class EVT,class FSM,class SourceState,class TargetState>
1608 struct transition_action_result
1609 {
1610 typedef void type;
1611 };
1612 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1613
1614 template <class EVT,class FSM,class SourceState,class TargetState>
1615 void operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1616 {
1617 (Container()(evt,fsm,src,tgt)).splice(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
1618 Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt));
1619 }
1620 template <class Event,class FSM,class STATE>
1621 void operator()(Event const& evt,FSM& fsm,STATE& state )const
1622 {
1623 (Container()(evt,fsm,state)).splice(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
1624 Param3()(evt,fsm,state),Param4()(evt,fsm,state));
1625 }
1626 };
1627 struct splice_tag {};
1628 struct Splice_Helper: proto::extends< proto::terminal<splice_tag>::type, Splice_Helper, boost::msm::sm_domain>
1629 {
1630 Splice_Helper(){}
1631 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
1632 #ifdef BOOST_MSVC
1633 ,class Arg6
1634 #endif
1635 >
1636 struct In
1637 {
1638 typedef Splice_<Arg1,Arg2,Arg3,Arg4,Arg5> type;
1639 };
1640 };
1641 Splice_Helper const splice_;
1642
1643
1644
1645
1646
1647 template <class Container,class Param1, class Param2, class Param3>
1648 struct StringFind_ : euml_action<StringFind_<Container,Param1,Param2,Param3> >
1649 {
1650 template <class Event,class FSM,class STATE >
1651 struct state_action_result
1652 {
1653 typedef typename remove_reference<
1654 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
1655 };
1656 template <class EVT,class FSM,class SourceState,class TargetState>
1657 struct transition_action_result
1658 {
1659 typedef typename remove_reference<
1660 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
1661 };
1662 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1663
1664 template <class EVT,class FSM,class SourceState,class TargetState>
1665 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
1666 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1667 {
1668 return (Container()(evt,fsm,src,tgt)).
1669 find(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));
1670 }
1671 template <class Event,class FSM,class STATE>
1672 typename state_action_result<Event,FSM,STATE>::type
1673 operator()(Event const& evt,FSM& fsm,STATE& state )const
1674 {
1675 return (Container()(evt,fsm,state)).
1676 find(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));
1677 }
1678 };
1679
1680 template <class Container,class Param1>
1681 struct StringFind_ < Container,Param1,void,void>
1682 : euml_action<StringFind_<Container,Param1,void,void> >
1683
1684 {
1685 template <class Event,class FSM,class STATE >
1686 struct state_action_result
1687 {
1688 typedef typename remove_reference<
1689 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
1690 };
1691 template <class EVT,class FSM,class SourceState,class TargetState>
1692 struct transition_action_result
1693 {
1694 typedef typename remove_reference<
1695 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
1696 };
1697 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1698
1699 template <class EVT,class FSM,class SourceState,class TargetState>
1700 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
1701 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1702 {
1703 return (Container()(evt,fsm,src,tgt)).find(Param1()(evt,fsm,src,tgt));
1704 }
1705 template <class Event,class FSM,class STATE>
1706 typename state_action_result<Event,FSM,STATE>::type
1707 operator()(Event const& evt,FSM& fsm,STATE& state )const
1708 {
1709 return (Container()(evt,fsm,state)).find(Param1()(evt,fsm,state));
1710 }
1711 };
1712
1713 template <class Container,class Param1, class Param2>
1714 struct StringFind_ <Container,Param1,Param2,void>
1715 : euml_action<StringFind_<Container,Param1,Param2,void> >
1716 {
1717 template <class Event,class FSM,class STATE >
1718 struct state_action_result
1719 {
1720 typedef typename remove_reference<
1721 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
1722 };
1723 template <class EVT,class FSM,class SourceState,class TargetState>
1724 struct transition_action_result
1725 {
1726 typedef typename remove_reference<
1727 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
1728 };
1729 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1730
1731 template <class EVT,class FSM,class SourceState,class TargetState>
1732 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
1733 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1734 {
1735 return (Container()(evt,fsm,src,tgt)).find(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
1736 }
1737 template <class Event,class FSM,class STATE>
1738 typename state_action_result<Event,FSM,STATE>::type
1739 operator()(Event const& evt,FSM& fsm,STATE& state )const
1740 {
1741 return (Container()(evt,fsm,state)).find(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
1742 }
1743 };
1744
1745 struct string_find_tag {};
1746 struct StringFind_Helper: proto::extends< proto::terminal<string_find_tag>::type, StringFind_Helper, boost::msm::sm_domain>
1747 {
1748 StringFind_Helper(){}
1749 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
1750 #ifdef BOOST_MSVC
1751 ,class Arg6
1752 #endif
1753 >
1754 struct In
1755 {
1756 typedef StringFind_<Arg1,Arg2,Arg3,Arg4> type;
1757 };
1758 };
1759 StringFind_Helper const string_find_;
1760
1761 template <class Container, class Param1, class Param2, class Param3, class Enable=void >
1762 struct StringRFind_ : euml_action<StringRFind_<Container,Param1,Param2,Param3,Enable> >
1763 {
1764 };
1765
1766 template <class Container,class Param1, class Param2, class Param3>
1767 struct StringRFind_ <
1768 Container,Param1,Param2,Param3,
1769 typename ::boost::enable_if<
1770 typename ::boost::is_same<Param2,void>::type
1771 >::type
1772 >
1773 : euml_action<StringRFind_<Container,Param1,Param2,Param3> >
1774
1775 {
1776 template <class Event,class FSM,class STATE >
1777 struct state_action_result
1778 {
1779 typedef typename remove_reference<
1780 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
1781 };
1782 template <class EVT,class FSM,class SourceState,class TargetState>
1783 struct transition_action_result
1784 {
1785 typedef typename remove_reference<
1786 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
1787 };
1788 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1789
1790 template <class EVT,class FSM,class SourceState,class TargetState>
1791 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
1792 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1793 {
1794 return (Container()(evt,fsm,src,tgt)).rfind(Param1()(evt,fsm,src,tgt));
1795 }
1796 template <class Event,class FSM,class STATE>
1797 typename state_action_result<Event,FSM,STATE>::type
1798 operator()(Event const& evt,FSM& fsm,STATE& state )const
1799 {
1800 return (Container()(evt,fsm,state)).rfind(Param1()(evt,fsm,state));
1801 }
1802 };
1803
1804 template <class Container,class Param1, class Param2, class Param3>
1805 struct StringRFind_ <
1806 Container,Param1,Param2,Param3,
1807 typename ::boost::enable_if<
1808 typename ::boost::mpl::and_<
1809 typename ::boost::is_same<Param3,void>::type,
1810 typename ::boost::mpl::not_<
1811 typename ::boost::is_same<Param2,void>::type
1812 >::type
1813 >::type
1814 >::type
1815 >
1816 : euml_action<StringRFind_<Container,Param1,Param2,Param3> >
1817 {
1818 template <class Event,class FSM,class STATE >
1819 struct state_action_result
1820 {
1821 typedef typename remove_reference<
1822 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
1823 };
1824 template <class EVT,class FSM,class SourceState,class TargetState>
1825 struct transition_action_result
1826 {
1827 typedef typename remove_reference<
1828 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
1829 };
1830 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1831
1832 template <class EVT,class FSM,class SourceState,class TargetState>
1833 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
1834 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1835 {
1836 return (Container()(evt,fsm,src,tgt)).rfind(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
1837 }
1838 template <class Event,class FSM,class STATE>
1839 typename state_action_result<Event,FSM,STATE>::type
1840 operator()(Event const& evt,FSM& fsm,STATE& state )const
1841 {
1842 return (Container()(evt,fsm,state)).rfind(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
1843 }
1844 };
1845
1846 template <class Container,class Param1, class Param2, class Param3>
1847 struct StringRFind_<
1848 Container,Param1,Param2,Param3,
1849 typename ::boost::disable_if<
1850 typename ::boost::is_same<Param3,void>::type
1851 >::type
1852 >
1853 : euml_action<StringRFind_<Container,Param1,Param2,Param3> >
1854 {
1855 template <class Event,class FSM,class STATE >
1856 struct state_action_result
1857 {
1858 typedef typename remove_reference<
1859 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
1860 };
1861 template <class EVT,class FSM,class SourceState,class TargetState>
1862 struct transition_action_result
1863 {
1864 typedef typename remove_reference<
1865 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
1866 };
1867 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1868
1869 template <class EVT,class FSM,class SourceState,class TargetState>
1870 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
1871 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1872 {
1873 return (Container()(evt,fsm,src,tgt)).
1874 rfind(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));
1875 }
1876 template <class Event,class FSM,class STATE>
1877 typename state_action_result<Event,FSM,STATE>::type
1878 operator()(Event const& evt,FSM& fsm,STATE& state )const
1879 {
1880 return (Container()(evt,fsm,state)).
1881 rfind(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));
1882 }
1883 };
1884
1885 struct string_rfind_tag {};
1886 struct StringRFind_Helper: proto::extends< proto::terminal<string_rfind_tag>::type, StringRFind_Helper, boost::msm::sm_domain>
1887 {
1888 StringRFind_Helper(){}
1889 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
1890 #ifdef BOOST_MSVC
1891 ,class Arg6
1892 #endif
1893 >
1894 struct In
1895 {
1896 typedef StringRFind_<Arg1,Arg2,Arg3,Arg4> type;
1897 };
1898 };
1899 StringRFind_Helper const string_rfind_;
1900
1901 template <class Container,class Param1, class Param2, class Param3>
1902 struct StringFindFirstOf_ : euml_action<StringFindFirstOf_<Container,Param1,Param2,Param3> >
1903 {
1904 template <class Event,class FSM,class STATE >
1905 struct state_action_result
1906 {
1907 typedef typename remove_reference<
1908 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
1909 };
1910 template <class EVT,class FSM,class SourceState,class TargetState>
1911 struct transition_action_result
1912 {
1913 typedef typename remove_reference<
1914 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
1915 };
1916 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1917
1918 template <class EVT,class FSM,class SourceState,class TargetState>
1919 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
1920 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1921 {
1922 return (Container()(evt,fsm,src,tgt)).
1923 find_first_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));
1924 }
1925 template <class Event,class FSM,class STATE>
1926 typename state_action_result<Event,FSM,STATE>::type
1927 operator()(Event const& evt,FSM& fsm,STATE& state )const
1928 {
1929 return (Container()(evt,fsm,state)).
1930 find_first_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));
1931 }
1932 };
1933 template <class Container,class Param1>
1934 struct StringFindFirstOf_ <Container,Param1,void,void>
1935 : euml_action<StringFindFirstOf_<Container,Param1,void,void> >
1936 {
1937 template <class Event,class FSM,class STATE >
1938 struct state_action_result
1939 {
1940 typedef typename remove_reference<
1941 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
1942 };
1943 template <class EVT,class FSM,class SourceState,class TargetState>
1944 struct transition_action_result
1945 {
1946 typedef typename remove_reference<
1947 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
1948 };
1949 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1950
1951 template <class EVT,class FSM,class SourceState,class TargetState>
1952 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
1953 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1954 {
1955 return (Container()(evt,fsm,src,tgt)).find_first_of(Param1()(evt,fsm,src,tgt));
1956 }
1957 template <class Event,class FSM,class STATE>
1958 typename state_action_result<Event,FSM,STATE>::type
1959 operator()(Event const& evt,FSM& fsm,STATE& state )const
1960 {
1961 return (Container()(evt,fsm,state)).find_first_of(Param1()(evt,fsm,state));
1962 }
1963 };
1964
1965 template <class Container,class Param1, class Param2>
1966 struct StringFindFirstOf_ <Container,Param1,Param2,void>
1967 : euml_action<StringFindFirstOf_<Container,Param1,Param2,void> >
1968 {
1969 template <class Event,class FSM,class STATE >
1970 struct state_action_result
1971 {
1972 typedef typename remove_reference<
1973 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
1974 };
1975 template <class EVT,class FSM,class SourceState,class TargetState>
1976 struct transition_action_result
1977 {
1978 typedef typename remove_reference<
1979 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
1980 };
1981 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
1982
1983 template <class EVT,class FSM,class SourceState,class TargetState>
1984 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
1985 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
1986 {
1987 return (Container()(evt,fsm,src,tgt)).find_first_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
1988 }
1989 template <class Event,class FSM,class STATE>
1990 typename state_action_result<Event,FSM,STATE>::type
1991 operator()(Event const& evt,FSM& fsm,STATE& state )const
1992 {
1993 return (Container()(evt,fsm,state)).find_first_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
1994 }
1995 };
1996
1997 struct string_find_first_of_tag {};
1998 struct StringFindFirstOf_Helper:
1999 proto::extends< proto::terminal<string_find_first_of_tag>::type, StringFindFirstOf_Helper, boost::msm::sm_domain>
2000 {
2001 StringFindFirstOf_Helper(){}
2002 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2003 #ifdef BOOST_MSVC
2004 ,class Arg6
2005 #endif
2006 >
2007 struct In
2008 {
2009 typedef StringFindFirstOf_<Arg1,Arg2,Arg3,Arg4> type;
2010 };
2011 };
2012 StringFindFirstOf_Helper const string_find_first_of_;
2013
2014 template <class Container, class Param1, class Param2, class Param3, class Enable=void >
2015 struct StringFindFirstNotOf_ : euml_action<StringFindFirstNotOf_<Container,Param1,Param2,Param3,Enable> >
2016 {
2017 };
2018
2019 template <class Container,class Param1, class Param2, class Param3>
2020 struct StringFindFirstNotOf_ <
2021 Container,Param1,Param2,Param3,
2022 typename ::boost::enable_if<
2023 typename ::boost::is_same<Param2,void>::type
2024 >::type
2025 >
2026 : euml_action<StringFindFirstNotOf_<Container,Param1,Param2,Param3> >
2027
2028 {
2029 template <class Event,class FSM,class STATE >
2030 struct state_action_result
2031 {
2032 typedef typename remove_reference<
2033 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
2034 };
2035 template <class EVT,class FSM,class SourceState,class TargetState>
2036 struct transition_action_result
2037 {
2038 typedef typename remove_reference<
2039 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
2040 };
2041 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2042
2043 template <class EVT,class FSM,class SourceState,class TargetState>
2044 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
2045 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2046 {
2047 return (Container()(evt,fsm,src,tgt)).find_first_not_of(Param1()(evt,fsm,src,tgt));
2048 }
2049 template <class Event,class FSM,class STATE>
2050 typename state_action_result<Event,FSM,STATE>::type
2051 operator()(Event const& evt,FSM& fsm,STATE& state )const
2052 {
2053 return (Container()(evt,fsm,state)).find_first_not_of(Param1()(evt,fsm,state));
2054 }
2055 };
2056
2057 template <class Container,class Param1, class Param2, class Param3>
2058 struct StringFindFirstNotOf_ <
2059 Container,Param1,Param2,Param3,
2060 typename ::boost::enable_if<
2061 typename ::boost::mpl::and_<
2062 typename ::boost::is_same<Param3,void>::type,
2063 typename ::boost::mpl::not_<
2064 typename ::boost::is_same<Param2,void>::type
2065 >::type
2066 >::type
2067 >::type
2068 >
2069 : euml_action<StringFindFirstNotOf_<Container,Param1,Param2,Param3> >
2070 {
2071 template <class Event,class FSM,class STATE >
2072 struct state_action_result
2073 {
2074 typedef typename remove_reference<
2075 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
2076 };
2077 template <class EVT,class FSM,class SourceState,class TargetState>
2078 struct transition_action_result
2079 {
2080 typedef typename remove_reference<
2081 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
2082 };
2083 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2084
2085 template <class EVT,class FSM,class SourceState,class TargetState>
2086 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
2087 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2088 {
2089 return (Container()(evt,fsm,src,tgt)).find_first_not_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
2090 }
2091 template <class Event,class FSM,class STATE>
2092 typename state_action_result<Event,FSM,STATE>::type
2093 operator()(Event const& evt,FSM& fsm,STATE& state )const
2094 {
2095 return (Container()(evt,fsm,state)).find_first_not_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
2096 }
2097 };
2098
2099 template <class Container,class Param1, class Param2, class Param3>
2100 struct StringFindFirstNotOf_<
2101 Container,Param1,Param2,Param3,
2102 typename ::boost::disable_if<
2103 typename ::boost::is_same<Param3,void>::type
2104 >::type
2105 >
2106 : euml_action<StringFindFirstNotOf_<Container,Param1,Param2,Param3> >
2107 {
2108 template <class Event,class FSM,class STATE >
2109 struct state_action_result
2110 {
2111 typedef typename remove_reference<
2112 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
2113 };
2114 template <class EVT,class FSM,class SourceState,class TargetState>
2115 struct transition_action_result
2116 {
2117 typedef typename remove_reference<
2118 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
2119 };
2120 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2121
2122 template <class EVT,class FSM,class SourceState,class TargetState>
2123 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
2124 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2125 {
2126 return (Container()(evt,fsm,src,tgt)).
2127 find_first_not_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));
2128 }
2129 template <class Event,class FSM,class STATE>
2130 typename state_action_result<Event,FSM,STATE>::type
2131 operator()(Event const& evt,FSM& fsm,STATE& state )const
2132 {
2133 return (Container()(evt,fsm,state)).
2134 find_first_not_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));
2135 }
2136 };
2137
2138 struct string_find_first_not_of_tag {};
2139 struct StringFindFirstNotOf_Helper:
2140 proto::extends< proto::terminal<string_find_first_not_of_tag>::type, StringFindFirstNotOf_Helper, boost::msm::sm_domain>
2141 {
2142 StringFindFirstNotOf_Helper(){}
2143 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2144 #ifdef BOOST_MSVC
2145 ,class Arg6
2146 #endif
2147 >
2148 struct In
2149 {
2150 typedef StringFindFirstNotOf_<Arg1,Arg2,Arg3,Arg4> type;
2151 };
2152 };
2153 StringFindFirstNotOf_Helper const string_find_first_not_of_;
2154
2155 template <class Container, class Param1, class Param2, class Param3, class Enable=void >
2156 struct StringFindLastOf_ : euml_action<StringFindLastOf_<Container,Param1,Param2,Param3,Enable> >
2157 {
2158 };
2159
2160 template <class Container,class Param1, class Param2, class Param3>
2161 struct StringFindLastOf_ <
2162 Container,Param1,Param2,Param3,
2163 typename ::boost::enable_if<
2164 typename ::boost::is_same<Param2,void>::type
2165 >::type
2166 >
2167 : euml_action<StringFindLastOf_<Container,Param1,Param2,Param3> >
2168
2169 {
2170 template <class Event,class FSM,class STATE >
2171 struct state_action_result
2172 {
2173 typedef typename remove_reference<
2174 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
2175 };
2176 template <class EVT,class FSM,class SourceState,class TargetState>
2177 struct transition_action_result
2178 {
2179 typedef typename remove_reference<
2180 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
2181 };
2182 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2183
2184 template <class EVT,class FSM,class SourceState,class TargetState>
2185 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
2186 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2187 {
2188 return (Container()(evt,fsm,src,tgt)).find_last_of(Param1()(evt,fsm,src,tgt));
2189 }
2190 template <class Event,class FSM,class STATE>
2191 typename state_action_result<Event,FSM,STATE>::type
2192 operator()(Event const& evt,FSM& fsm,STATE& state )const
2193 {
2194 return (Container()(evt,fsm,state)).find_last_of(Param1()(evt,fsm,state));
2195 }
2196 };
2197
2198 template <class Container,class Param1, class Param2, class Param3>
2199 struct StringFindLastOf_ <
2200 Container,Param1,Param2,Param3,
2201 typename ::boost::enable_if<
2202 typename ::boost::mpl::and_<
2203 typename ::boost::is_same<Param3,void>::type,
2204 typename ::boost::mpl::not_<
2205 typename ::boost::is_same<Param2,void>::type
2206 >::type
2207 >::type
2208 >::type
2209 >
2210 : euml_action<StringFindLastOf_<Container,Param1,Param2,Param3> >
2211 {
2212 template <class Event,class FSM,class STATE >
2213 struct state_action_result
2214 {
2215 typedef typename remove_reference<
2216 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
2217 };
2218 template <class EVT,class FSM,class SourceState,class TargetState>
2219 struct transition_action_result
2220 {
2221 typedef typename remove_reference<
2222 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
2223 };
2224 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2225
2226 template <class EVT,class FSM,class SourceState,class TargetState>
2227 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
2228 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2229 {
2230 return (Container()(evt,fsm,src,tgt)).find_last_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
2231 }
2232 template <class Event,class FSM,class STATE>
2233 typename state_action_result<Event,FSM,STATE>::type
2234 operator()(Event const& evt,FSM& fsm,STATE& state )const
2235 {
2236 return (Container()(evt,fsm,state)).find_last_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
2237 }
2238 };
2239
2240 template <class Container,class Param1, class Param2, class Param3>
2241 struct StringFindLastOf_<
2242 Container,Param1,Param2,Param3,
2243 typename ::boost::disable_if<
2244 typename ::boost::is_same<Param3,void>::type
2245 >::type
2246 >
2247 : euml_action<StringFindLastOf_<Container,Param1,Param2,Param3> >
2248 {
2249 template <class Event,class FSM,class STATE >
2250 struct state_action_result
2251 {
2252 typedef typename remove_reference<
2253 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
2254 };
2255 template <class EVT,class FSM,class SourceState,class TargetState>
2256 struct transition_action_result
2257 {
2258 typedef typename remove_reference<
2259 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
2260 };
2261 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2262
2263 template <class EVT,class FSM,class SourceState,class TargetState>
2264 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
2265 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2266 {
2267 return (Container()(evt,fsm,src,tgt)).
2268 find_last_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));
2269 }
2270 template <class Event,class FSM,class STATE>
2271 typename state_action_result<Event,FSM,STATE>::type
2272 operator()(Event const& evt,FSM& fsm,STATE& state )const
2273 {
2274 return (Container()(evt,fsm,state)).
2275 find_last_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));
2276 }
2277 };
2278
2279 struct string_find_last_of_tag {};
2280 struct StringFindLastOf_Helper:
2281 proto::extends< proto::terminal<string_find_last_of_tag>::type, StringFindLastOf_Helper, boost::msm::sm_domain>
2282 {
2283 StringFindLastOf_Helper(){}
2284 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2285 #ifdef BOOST_MSVC
2286 ,class Arg6
2287 #endif
2288 >
2289 struct In
2290 {
2291 typedef StringFindLastOf_<Arg1,Arg2,Arg3,Arg4> type;
2292 };
2293 };
2294 StringFindLastOf_Helper const string_find_last_of_;
2295
2296 template <class Container, class Param1, class Param2, class Param3, class Enable=void >
2297 struct StringFindLastNotOf_ : euml_action<StringFindLastNotOf_<Container,Param1,Param2,Param3,Enable> >
2298 {
2299 };
2300
2301 template <class Container,class Param1, class Param2, class Param3>
2302 struct StringFindLastNotOf_ <
2303 Container,Param1,Param2,Param3,
2304 typename ::boost::enable_if<
2305 typename ::boost::is_same<Param2,void>::type
2306 >::type
2307 >
2308 : euml_action<StringFindLastNotOf_<Container,Param1,Param2,Param3> >
2309
2310 {
2311 template <class Event,class FSM,class STATE >
2312 struct state_action_result
2313 {
2314 typedef typename remove_reference<
2315 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
2316 };
2317 template <class EVT,class FSM,class SourceState,class TargetState>
2318 struct transition_action_result
2319 {
2320 typedef typename remove_reference<
2321 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
2322 };
2323 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2324
2325 template <class EVT,class FSM,class SourceState,class TargetState>
2326 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
2327 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2328 {
2329 return (Container()(evt,fsm,src,tgt)).find_last_not_of(Param1()(evt,fsm,src,tgt));
2330 }
2331 template <class Event,class FSM,class STATE>
2332 typename state_action_result<Event,FSM,STATE>::type
2333 operator()(Event const& evt,FSM& fsm,STATE& state )const
2334 {
2335 return (Container()(evt,fsm,state)).find_last_not_of(Param1()(evt,fsm,state));
2336 }
2337 };
2338
2339 template <class Container,class Param1, class Param2, class Param3>
2340 struct StringFindLastNotOf_ <
2341 Container,Param1,Param2,Param3,
2342 typename ::boost::enable_if<
2343 typename ::boost::mpl::and_<
2344 typename ::boost::is_same<Param3,void>::type,
2345 typename ::boost::mpl::not_<
2346 typename ::boost::is_same<Param2,void>::type
2347 >::type
2348 >::type
2349 >::type
2350 >
2351 : euml_action<StringFindLastNotOf_<Container,Param1,Param2,Param3> >
2352 {
2353 template <class Event,class FSM,class STATE >
2354 struct state_action_result
2355 {
2356 typedef typename remove_reference<
2357 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
2358 };
2359 template <class EVT,class FSM,class SourceState,class TargetState>
2360 struct transition_action_result
2361 {
2362 typedef typename remove_reference<
2363 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
2364 };
2365 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2366
2367 template <class EVT,class FSM,class SourceState,class TargetState>
2368 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
2369 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2370 {
2371 return (Container()(evt,fsm,src,tgt)).find_last_not_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
2372 }
2373 template <class Event,class FSM,class STATE>
2374 typename state_action_result<Event,FSM,STATE>::type
2375 operator()(Event const& evt,FSM& fsm,STATE& state )const
2376 {
2377 return (Container()(evt,fsm,state)).find_last_not_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
2378 }
2379 };
2380
2381 template <class Container,class Param1, class Param2, class Param3>
2382 struct StringFindLastNotOf_<
2383 Container,Param1,Param2,Param3,
2384 typename ::boost::disable_if<
2385 typename ::boost::is_same<Param3,void>::type
2386 >::type
2387 >
2388 : euml_action<StringFindLastNotOf_<Container,Param1,Param2,Param3> >
2389 {
2390 template <class Event,class FSM,class STATE >
2391 struct state_action_result
2392 {
2393 typedef typename remove_reference<
2394 typename get_result_type2<Container,Event,FSM,STATE>::type>::type::size_type type;
2395 };
2396 template <class EVT,class FSM,class SourceState,class TargetState>
2397 struct transition_action_result
2398 {
2399 typedef typename remove_reference<
2400 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type::size_type type;
2401 };
2402 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2403
2404 template <class EVT,class FSM,class SourceState,class TargetState>
2405 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
2406 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2407 {
2408 return (Container()(evt,fsm,src,tgt)).
2409 find_last_not_of(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));
2410 }
2411 template <class Event,class FSM,class STATE>
2412 typename state_action_result<Event,FSM,STATE>::type
2413 operator()(Event const& evt,FSM& fsm,STATE& state )const
2414 {
2415 return (Container()(evt,fsm,state)).
2416 find_last_not_of(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));
2417 }
2418 };
2419
2420 struct string_find_last_not_of_tag {};
2421 struct StringFindLastNotOf_Helper:
2422 proto::extends< proto::terminal<string_find_last_of_tag>::type, StringFindLastNotOf_Helper, boost::msm::sm_domain>
2423 {
2424 StringFindLastNotOf_Helper(){}
2425 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2426 #ifdef BOOST_MSVC
2427 ,class Arg6
2428 #endif
2429 >
2430 struct In
2431 {
2432 typedef StringFindLastNotOf_<Arg1,Arg2,Arg3,Arg4> type;
2433 };
2434 };
2435 StringFindLastNotOf_Helper const string_find_last_not_of_;
2436
2437 template <class Container>
2438 struct Npos_ : euml_action<Npos_<Container> >
2439 {
2440 Npos_(){}
2441 template <class Event,class FSM,class STATE >
2442 struct state_action_result
2443 {
2444 typedef typename Container::size_type type;
2445 };
2446 template <class EVT,class FSM,class SourceState,class TargetState>
2447 struct transition_action_result
2448 {
2449 typedef typename Container::size_type type;
2450 };
2451 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2452
2453 template <class EVT,class FSM,class SourceState,class TargetState>
2454 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
2455 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2456 {
2457 return Container::npos;
2458 }
2459 template <class Event,class FSM,class STATE>
2460 typename state_action_result<Event,FSM,STATE>::type
2461 operator()(Event const& evt,FSM& fsm,STATE& state )const
2462 {
2463 return Container::npos;
2464 }
2465 };
2466
2467
2468 template <class Container, class Param1, class Param2>
2469 struct Associative_Erase_ : euml_action<Associative_Erase_<Container,Param1,Param2> >
2470 {
2471 template <class Event,class FSM,class STATE >
2472 struct state_action_result
2473 {
2474 typedef void type;
2475 };
2476 template <class EVT,class FSM,class SourceState,class TargetState>
2477 struct transition_action_result
2478 {
2479 typedef void type;
2480 };
2481 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2482
2483 template <class EVT,class FSM,class SourceState,class TargetState>
2484 typename ::boost::enable_if<
2485 typename ::boost::mpl::has_key<
2486 typename Container::tag_type,action_tag>::type,
2487 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
2488 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2489 {
2490 (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
2491 }
2492 template <class Event,class FSM,class STATE>
2493 typename ::boost::enable_if<
2494 typename ::boost::mpl::has_key<
2495 typename Container::tag_type,state_action_tag>::type,
2496 typename state_action_result<Event,FSM,STATE>::type >::type
2497 operator()(Event const& evt,FSM& fsm,STATE& state )const
2498 {
2499 (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
2500 }
2501 };
2502
2503 template <class Container, class Param1>
2504 struct Associative_Erase_ < Container,Param1,void>
2505 : euml_action<Associative_Erase_<Container,Param1,void> >
2506 {
2507
2508
2509 template <class Event,class FSM,class STATE >
2510 struct state_action_result
2511 {
2512 typedef typename get_size_type<
2513 typename ::boost::remove_reference<
2514 typename get_result_type2<Container,Event,FSM,STATE>::type>::type>::type type;
2515 };
2516 template <class EVT,class FSM,class SourceState,class TargetState>
2517 struct transition_action_result
2518 {
2519 typedef typename get_size_type<
2520 typename ::boost::remove_reference<
2521 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
2522 };
2523 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2524
2525
2526 template <class EVT,class FSM,class SourceState,class TargetState>
2527 typename ::boost::enable_if<
2528 typename ::boost::mpl::and_<
2529 typename ::boost::mpl::has_key<
2530 typename Container::tag_type,action_tag>::type,
2531 typename has_iterator_category<
2532 typename Param1::template transition_action_result<EVT,FSM,SourceState,TargetState>::type
2533 >::type
2534 >::type,
2535 void
2536 >::type
2537 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2538 {
2539 (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt));
2540 }
2541
2542
2543 template <class Event,class FSM,class STATE>
2544 typename ::boost::enable_if<
2545 typename ::boost::mpl::and_<
2546 typename ::boost::mpl::has_key<
2547 typename Container::tag_type,state_action_tag>::type,
2548 typename has_iterator_category<
2549 typename Param1::template state_action_result<Event,FSM,STATE>::type
2550 >::type
2551 >::type,
2552 void
2553 >::type
2554 operator()(Event const& evt,FSM& fsm,STATE& state )const
2555 {
2556 (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state));
2557 }
2558
2559
2560 template <class EVT,class FSM,class SourceState,class TargetState>
2561 typename ::boost::enable_if<
2562 typename ::boost::mpl::and_<
2563 typename ::boost::mpl::has_key<
2564 typename Container::tag_type,action_tag>::type,
2565 typename ::boost::mpl::not_<
2566 typename has_iterator_category<
2567 typename Param1::template transition_action_result<EVT,FSM,SourceState,TargetState>::type
2568 >::type
2569 >::type
2570 >::type,
2571 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
2572 >::type
2573 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2574 {
2575 return (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt));
2576 }
2577
2578
2579 template <class Event,class FSM,class STATE>
2580 typename ::boost::enable_if<
2581 typename ::boost::mpl::and_<
2582 typename ::boost::mpl::has_key<
2583 typename Container::tag_type,state_action_tag>::type,
2584 typename ::boost::mpl::not_<
2585 typename has_iterator_category<
2586 typename Param1::template state_action_result<Event,FSM,STATE>::type
2587 >::type
2588 >::type
2589 >::type,
2590 typename state_action_result<Event,FSM,STATE>::type
2591 >::type
2592 operator()(Event const& evt,FSM& fsm,STATE& state )const
2593 {
2594 return (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state));
2595 }
2596 };
2597
2598 struct associative_erase_tag {};
2599 struct Associative_Erase_Helper: proto::extends< proto::terminal<associative_erase_tag>::type, Associative_Erase_Helper, boost::msm::sm_domain>
2600 {
2601 Associative_Erase_Helper(){}
2602 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2603 #ifdef BOOST_MSVC
2604 ,class Arg6
2605 #endif
2606 >
2607 struct In
2608 {
2609 typedef Associative_Erase_<Arg1,Arg2,Arg3> type;
2610 };
2611 };
2612 Associative_Erase_Helper const associative_erase_;
2613
2614
2615 template <class T, class Param>
2616 struct Associative_Find_ : euml_action<Associative_Find_<T,Param> >
2617 {
2618 template <class Event,class FSM,class STATE >
2619 struct state_action_result
2620 {
2621 typedef typename get_iterator<
2622 typename ::boost::remove_reference<
2623 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type type;
2624 };
2625 template <class EVT,class FSM,class SourceState,class TargetState>
2626 struct transition_action_result
2627 {
2628 typedef typename get_iterator<
2629 typename ::boost::remove_reference<
2630 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
2631 };
2632 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2633
2634 template <class EVT,class FSM,class SourceState,class TargetState>
2635 typename ::boost::enable_if<
2636 typename ::boost::mpl::has_key<
2637 typename T::tag_type,action_tag>::type,
2638 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
2639 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2640 {
2641 return (T()(evt,fsm,src,tgt)).find(Param()(evt,fsm,src,tgt));
2642 }
2643 template <class Event,class FSM,class STATE>
2644 typename ::boost::enable_if<
2645 typename ::boost::mpl::has_key<
2646 typename T::tag_type,state_action_tag>::type,
2647 typename state_action_result<Event,FSM,STATE>::type >::type
2648 operator()(Event const& evt,FSM& fsm,STATE& state )const
2649 {
2650 return (T()(evt,fsm,state)).find(Param()(evt,fsm,state));
2651 }
2652 };
2653
2654 struct associative_find_tag {};
2655 struct Associative_Find_Helper: proto::extends< proto::terminal<associative_find_tag>::type, Associative_Find_Helper, boost::msm::sm_domain>
2656 {
2657 Associative_Find_Helper(){}
2658 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2659 #ifdef BOOST_MSVC
2660 ,class Arg6
2661 #endif
2662 >
2663 struct In
2664 {
2665 typedef Associative_Find_<Arg1,Arg2> type;
2666 };
2667 };
2668 Associative_Find_Helper const associative_find_;
2669
2670 template <class Container,class Param>
2671 struct AssociativeCount_ : euml_action<AssociativeCount_<Container,Param> >
2672 {
2673 template <class Event,class FSM,class STATE >
2674 struct state_action_result
2675 {
2676 typedef typename get_size_type<
2677 typename ::boost::remove_reference<
2678 typename get_result_type2<Container,Event,FSM,STATE>::type>::type>::type type;
2679 };
2680 template <class EVT,class FSM,class SourceState,class TargetState>
2681 struct transition_action_result
2682 {
2683 typedef typename get_size_type<
2684 typename ::boost::remove_reference<
2685 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
2686 };
2687 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2688
2689 template <class EVT,class FSM,class SourceState,class TargetState>
2690 typename ::boost::enable_if<
2691 typename ::boost::mpl::has_key<
2692 typename Container::tag_type,action_tag>::type,
2693 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
2694 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2695 {
2696 return (Container()(evt,fsm,src,tgt)).count(Param()(evt,fsm,src,tgt));
2697 }
2698 template <class Event,class FSM,class STATE>
2699 typename ::boost::enable_if<
2700 typename ::boost::mpl::has_key<
2701 typename Container::tag_type,state_action_tag>::type,
2702 typename state_action_result<Event,FSM,STATE>::type >::type
2703 operator()(Event const& evt,FSM& fsm,STATE& state )const
2704 {
2705 return (Container()(evt,fsm,state)).count(Param()(evt,fsm,state));
2706 }
2707 };
2708 struct associative_count_tag {};
2709 struct AssociativeCount_Helper: proto::extends< proto::terminal<associative_count_tag>::type, AssociativeCount_Helper, boost::msm::sm_domain>
2710 {
2711 AssociativeCount_Helper(){}
2712 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2713 #ifdef BOOST_MSVC
2714 ,class Arg6
2715 #endif
2716 >
2717 struct In
2718 {
2719 typedef AssociativeCount_<Arg1,Arg2> type;
2720 };
2721 };
2722 AssociativeCount_Helper const associative_count_;
2723
2724 template <class T, class Param>
2725 struct Associative_Lower_Bound_ : euml_action<Associative_Lower_Bound_<T,Param> >
2726 {
2727 template <class Event,class FSM,class STATE >
2728 struct state_action_result
2729 {
2730 typedef typename get_iterator<
2731 typename ::boost::remove_reference<
2732 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type type;
2733 };
2734 template <class EVT,class FSM,class SourceState,class TargetState>
2735 struct transition_action_result
2736 {
2737 typedef typename get_iterator<
2738 typename ::boost::remove_reference<
2739 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
2740 };
2741 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2742
2743 template <class EVT,class FSM,class SourceState,class TargetState>
2744 typename ::boost::enable_if<
2745 typename ::boost::mpl::has_key<
2746 typename T::tag_type,action_tag>::type,
2747 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
2748 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2749 {
2750 return (T()(evt,fsm,src,tgt)).lower_bound(Param()(evt,fsm,src,tgt));
2751 }
2752 template <class Event,class FSM,class STATE>
2753 typename ::boost::enable_if<
2754 typename ::boost::mpl::has_key<
2755 typename T::tag_type,state_action_tag>::type,
2756 typename state_action_result<Event,FSM,STATE>::type >::type
2757 operator()(Event const& evt,FSM& fsm,STATE& state )const
2758 {
2759 return (T()(evt,fsm,state)).lower_bound(Param()(evt,fsm,state));
2760 }
2761 };
2762
2763 struct associative_lower_bound_tag {};
2764 struct Associative_Lower_Bound_Helper: proto::extends< proto::terminal<associative_lower_bound_tag>::type,
2765 Associative_Lower_Bound_Helper, boost::msm::sm_domain>
2766 {
2767 Associative_Lower_Bound_Helper(){}
2768 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2769 #ifdef BOOST_MSVC
2770 ,class Arg6
2771 #endif
2772 >
2773 struct In
2774 {
2775 typedef Associative_Lower_Bound_<Arg1,Arg2> type;
2776 };
2777 };
2778 Associative_Lower_Bound_Helper const associative_lower_bound_;
2779
2780 template <class T, class Param>
2781 struct Associative_Upper_Bound_ : euml_action<Associative_Upper_Bound_<T,Param> >
2782 {
2783 template <class Event,class FSM,class STATE >
2784 struct state_action_result
2785 {
2786 typedef typename get_iterator<
2787 typename ::boost::remove_reference<
2788 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type type;
2789 };
2790 template <class EVT,class FSM,class SourceState,class TargetState>
2791 struct transition_action_result
2792 {
2793 typedef typename get_iterator<
2794 typename ::boost::remove_reference<
2795 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
2796 };
2797 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2798
2799 template <class EVT,class FSM,class SourceState,class TargetState>
2800 typename ::boost::enable_if<
2801 typename ::boost::mpl::has_key<
2802 typename T::tag_type,action_tag>::type,
2803 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
2804 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2805 {
2806 return (T()(evt,fsm,src,tgt)).upper_bound(Param()(evt,fsm,src,tgt));
2807 }
2808 template <class Event,class FSM,class STATE>
2809 typename ::boost::enable_if<
2810 typename ::boost::mpl::has_key<
2811 typename T::tag_type,state_action_tag>::type,
2812 typename state_action_result<Event,FSM,STATE>::type >::type
2813 operator()(Event const& evt,FSM& fsm,STATE& state )const
2814 {
2815 return (T()(evt,fsm,state)).upper_bound(Param()(evt,fsm,state));
2816 }
2817 };
2818
2819 struct associative_upper_bound_tag {};
2820 struct Associative_Upper_Bound_Helper: proto::extends< proto::terminal<associative_upper_bound_tag>::type,
2821 Associative_Upper_Bound_Helper, boost::msm::sm_domain>
2822 {
2823 Associative_Upper_Bound_Helper(){}
2824 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2825 #ifdef BOOST_MSVC
2826 ,class Arg6
2827 #endif
2828 >
2829 struct In
2830 {
2831 typedef Associative_Upper_Bound_<Arg1,Arg2> type;
2832 };
2833 };
2834 Associative_Upper_Bound_Helper const associative_upper_bound_;
2835
2836 template <class T>
2837 struct First_ : euml_action<First_<T> >
2838 {
2839 template <class Event,class FSM,class STATE >
2840 struct state_action_result
2841 {
2842 typedef typename get_first_type<
2843 typename ::boost::remove_reference<
2844 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type type;
2845 };
2846 template <class EVT,class FSM,class SourceState,class TargetState>
2847 struct transition_action_result
2848 {
2849 typedef typename get_first_type<
2850 typename ::boost::remove_reference<
2851 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
2852 };
2853 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2854
2855 template <class EVT,class FSM,class SourceState,class TargetState>
2856 typename ::boost::enable_if<
2857 typename ::boost::mpl::has_key<
2858 typename T::tag_type,action_tag>::type,
2859 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
2860 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2861 {
2862 return (T()(evt,fsm,src,tgt)).first;
2863 }
2864 template <class Event,class FSM,class STATE>
2865 typename ::boost::enable_if<
2866 typename ::boost::mpl::has_key<
2867 typename T::tag_type,state_action_tag>::type,
2868 typename state_action_result<Event,FSM,STATE>::type >::type
2869 operator()(Event const& evt,FSM& fsm,STATE& state )const
2870 {
2871 return (T()(evt,fsm,state)).first;
2872 }
2873 };
2874
2875 struct first_tag {};
2876 struct First_Helper: proto::extends< proto::terminal<first_tag>::type, First_Helper, boost::msm::sm_domain>
2877 {
2878 First_Helper(){}
2879 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2880 #ifdef BOOST_MSVC
2881 ,class Arg6
2882 #endif
2883 >
2884 struct In
2885 {
2886 typedef First_<Arg1> type;
2887 };
2888 };
2889 First_Helper const first_;
2890
2891 template <class T>
2892 struct Second_ : euml_action<Second_<T> >
2893 {
2894 template <class Event,class FSM,class STATE >
2895 struct state_action_result
2896 {
2897 typedef typename get_second_type<
2898 typename ::boost::remove_reference<
2899 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type type;
2900 };
2901 template <class EVT,class FSM,class SourceState,class TargetState>
2902 struct transition_action_result
2903 {
2904 typedef typename get_second_type<
2905 typename ::boost::remove_reference<
2906 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
2907 };
2908 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2909
2910 template <class EVT,class FSM,class SourceState,class TargetState>
2911 typename ::boost::enable_if<
2912 typename ::boost::mpl::has_key<
2913 typename T::tag_type,action_tag>::type,
2914 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
2915 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2916 {
2917 return (T()(evt,fsm,src,tgt)).second;
2918 }
2919 template <class Event,class FSM,class STATE>
2920 typename ::boost::enable_if<
2921 typename ::boost::mpl::has_key<
2922 typename T::tag_type,state_action_tag>::type,
2923 typename state_action_result<Event,FSM,STATE>::type >::type
2924 operator()(Event const& evt,FSM& fsm,STATE& state )const
2925 {
2926 return (T()(evt,fsm,state)).second;
2927 }
2928 };
2929
2930 struct second_tag {};
2931 struct Second_Helper: proto::extends< proto::terminal<second_tag>::type, Second_Helper, boost::msm::sm_domain>
2932 {
2933 Second_Helper(){}
2934 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2935 #ifdef BOOST_MSVC
2936 ,class Arg6
2937 #endif
2938 >
2939 struct In
2940 {
2941 typedef Second_<Arg1> type;
2942 };
2943 };
2944 Second_Helper const second_;
2945
2946 template <class T, class Param>
2947 struct Associative_Equal_Range_ : euml_action<Associative_Equal_Range_<T,Param> >
2948 {
2949 template <class Event,class FSM,class STATE >
2950 struct state_action_result
2951 {
2952 typedef std::pair<
2953 typename get_iterator<
2954 typename ::boost::remove_reference<
2955 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type,
2956 typename get_iterator<
2957 typename ::boost::remove_reference<
2958 typename get_result_type2<T,Event,FSM,STATE>::type>::type>::type > type;
2959 };
2960 template <class EVT,class FSM,class SourceState,class TargetState>
2961 struct transition_action_result
2962 {
2963 typedef std::pair<
2964 typename get_iterator<
2965 typename ::boost::remove_reference<
2966 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type,
2967 typename get_iterator<
2968 typename ::boost::remove_reference<
2969 typename get_result_type<T,EVT,FSM,SourceState,TargetState>::type>::type>::type > type;
2970 };
2971 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
2972
2973 template <class EVT,class FSM,class SourceState,class TargetState>
2974 typename ::boost::enable_if<
2975 typename ::boost::mpl::has_key<
2976 typename T::tag_type,action_tag>::type,
2977 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
2978 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
2979 {
2980 return (T()(evt,fsm,src,tgt)).equal_range(Param()(evt,fsm,src,tgt));
2981 }
2982 template <class Event,class FSM,class STATE>
2983 typename ::boost::enable_if<
2984 typename ::boost::mpl::has_key<
2985 typename T::tag_type,state_action_tag>::type,
2986 typename state_action_result<Event,FSM,STATE>::type >::type
2987 operator()(Event const& evt,FSM& fsm,STATE& state )const
2988 {
2989 return (T()(evt,fsm,state)).equal_range(Param()(evt,fsm,state));
2990 }
2991 };
2992
2993 struct associative_equal_range_tag {};
2994 struct Associative_Equal_Range_Helper: proto::extends< proto::terminal<associative_equal_range_tag>::type,
2995 Associative_Equal_Range_Helper, boost::msm::sm_domain>
2996 {
2997 Associative_Equal_Range_Helper(){}
2998 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
2999 #ifdef BOOST_MSVC
3000 ,class Arg6
3001 #endif
3002 >
3003 struct In
3004 {
3005 typedef Associative_Equal_Range_<Arg1,Arg2> type;
3006 };
3007 };
3008 Associative_Equal_Range_Helper const associative_equal_range_;
3009
3010 template <class Container,class Param1, class Param2>
3011 struct Substr_ : euml_action<Substr_<Container,Param1,Param2> >
3012 {
3013 template <class Event,class FSM,class STATE >
3014 struct state_action_result
3015 {
3016 typedef typename remove_reference<
3017 typename get_result_type2<Container,Event,FSM,STATE>::type>::type type;
3018 };
3019 template <class EVT,class FSM,class SourceState,class TargetState>
3020 struct transition_action_result
3021 {
3022 typedef typename remove_reference<
3023 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type type;
3024 };
3025 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3026
3027 template <class EVT,class FSM,class SourceState,class TargetState>
3028 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
3029 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3030 {
3031 return (Container()(evt,fsm,src,tgt)).
3032 substr(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
3033 }
3034 template <class Event,class FSM,class STATE>
3035 typename state_action_result<Event,FSM,STATE>::type
3036 operator()(Event const& evt,FSM& fsm,STATE& state )const
3037 {
3038 return (Container()(evt,fsm,state)).
3039 substr(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
3040 }
3041 };
3042 template <class Container>
3043 struct Substr_ <Container,void,void>
3044 : euml_action<Substr_<Container,void,void> >
3045
3046 {
3047 template <class Event,class FSM,class STATE >
3048 struct state_action_result
3049 {
3050 typedef typename remove_reference<
3051 typename get_result_type2<Container,Event,FSM,STATE>::type>::type type;
3052 };
3053 template <class EVT,class FSM,class SourceState,class TargetState>
3054 struct transition_action_result
3055 {
3056 typedef typename remove_reference<
3057 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type type;
3058 };
3059 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3060
3061 template <class EVT,class FSM,class SourceState,class TargetState>
3062 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
3063 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3064 {
3065 return (Container()(evt,fsm,src,tgt)).substr();
3066 }
3067 template <class Event,class FSM,class STATE>
3068 typename state_action_result<Event,FSM,STATE>::type
3069 operator()(Event const& evt,FSM& fsm,STATE& state )const
3070 {
3071 return (Container()(evt,fsm,state)).substr();
3072 }
3073 };
3074
3075 template <class Container,class Param1>
3076 struct Substr_ < Container,Param1,void>
3077 : euml_action<Substr_<Container,Param1,void> >
3078 {
3079 template <class Event,class FSM,class STATE >
3080 struct state_action_result
3081 {
3082 typedef typename remove_reference<
3083 typename get_result_type2<Container,Event,FSM,STATE>::type>::type type;
3084 };
3085 template <class EVT,class FSM,class SourceState,class TargetState>
3086 struct transition_action_result
3087 {
3088 typedef typename remove_reference<
3089 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type type;
3090 };
3091 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3092
3093 template <class EVT,class FSM,class SourceState,class TargetState>
3094 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
3095 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3096 {
3097 return (Container()(evt,fsm,src,tgt)).substr(Param1()(evt,fsm,src,tgt));
3098 }
3099 template <class Event,class FSM,class STATE>
3100 typename state_action_result<Event,FSM,STATE>::type
3101 operator()(Event const& evt,FSM& fsm,STATE& state )const
3102 {
3103 return (Container()(evt,fsm,state)).substr(Param1()(evt,fsm,state));
3104 }
3105 };
3106 struct substr_tag {};
3107 struct Substr_Helper: proto::extends< proto::terminal<substr_tag>::type, Substr_Helper, boost::msm::sm_domain>
3108 {
3109 Substr_Helper(){}
3110 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
3111 #ifdef BOOST_MSVC
3112 ,class Arg6
3113 #endif
3114 >
3115 struct In
3116 {
3117 typedef Substr_<Arg1,Arg2,Arg3> type;
3118 };
3119 };
3120 Substr_Helper const substr_;
3121
3122 template <class Container, class Param1, class Param2, class Param3, class Param4 >
3123 struct StringCompare_ : euml_action<StringCompare_<Container,Param1,Param2,Param3,Param4> >
3124 {
3125 template <class Event,class FSM,class STATE >
3126 struct state_action_result
3127 {
3128 typedef int type;
3129 };
3130 template <class EVT,class FSM,class SourceState,class TargetState>
3131 struct transition_action_result
3132 {
3133 typedef int type;
3134 };
3135 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3136
3137 template <class EVT,class FSM,class SourceState,class TargetState>
3138 typename ::boost::enable_if<
3139 typename ::boost::mpl::has_key<
3140 typename Container::tag_type,action_tag>::type,
3141 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3142 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3143 {
3144 return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
3145 Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt));
3146 }
3147 template <class Event,class FSM,class STATE>
3148 typename ::boost::enable_if<
3149 typename ::boost::mpl::has_key<
3150 typename Container::tag_type,state_action_tag>::type,
3151 typename state_action_result<Event,FSM,STATE>::type >::type
3152 operator()(Event const& evt,FSM& fsm,STATE& state )const
3153 {
3154 return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
3155 Param3()(evt,fsm,state),Param4()(evt,fsm,state));
3156 }
3157 };
3158 template <class Container, class Param1 >
3159 struct StringCompare_<Container,Param1,void,void,void>
3160 : euml_action<StringCompare_<Container,Param1,void,void,void> >
3161 {
3162 template <class Event,class FSM,class STATE >
3163 struct state_action_result
3164 {
3165 typedef int type;
3166 };
3167 template <class EVT,class FSM,class SourceState,class TargetState>
3168 struct transition_action_result
3169 {
3170 typedef int type;
3171 };
3172 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3173
3174 template <class EVT,class FSM,class SourceState,class TargetState>
3175 typename ::boost::enable_if<
3176 typename ::boost::mpl::has_key<
3177 typename Container::tag_type,action_tag>::type,
3178 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3179 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3180 {
3181 return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt));
3182 }
3183 template <class Event,class FSM,class STATE>
3184 typename ::boost::enable_if<
3185 typename ::boost::mpl::has_key<
3186 typename Container::tag_type,state_action_tag>::type,
3187 typename state_action_result<Event,FSM,STATE>::type >::type
3188 operator()(Event const& evt,FSM& fsm,STATE& state )const
3189 {
3190 return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state));
3191 }
3192 };
3193
3194 template <class Container, class Param1, class Param2>
3195 struct StringCompare_<Container,Param1,Param2,void,void>
3196 : euml_action<StringCompare_<Container,Param1,Param2,void,void> >
3197 {
3198 template <class Event,class FSM,class STATE >
3199 struct state_action_result
3200 {
3201 typedef int type;
3202 };
3203 template <class EVT,class FSM,class SourceState,class TargetState>
3204 struct transition_action_result
3205 {
3206 typedef int type;
3207 };
3208 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3209
3210 template <class EVT,class FSM,class SourceState,class TargetState>
3211 typename ::boost::enable_if<
3212 typename ::boost::mpl::has_key<
3213 typename Container::tag_type,action_tag>::type,
3214 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3215 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3216 {
3217 return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
3218 }
3219 template <class Event,class FSM,class STATE>
3220 typename ::boost::enable_if<
3221 typename ::boost::mpl::has_key<
3222 typename Container::tag_type,state_action_tag>::type,
3223 typename state_action_result<Event,FSM,STATE>::type >::type
3224 operator()(Event const& evt,FSM& fsm,STATE& state )const
3225 {
3226 return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
3227 }
3228 };
3229
3230 template <class Container, class Param1, class Param2, class Param3 >
3231 struct StringCompare_<Container,Param1,Param2,Param3,void>
3232 : euml_action<StringCompare_<Container,Param1,Param2,Param3,void> >
3233 {
3234 template <class Event,class FSM,class STATE >
3235 struct state_action_result
3236 {
3237 typedef int type;
3238 };
3239 template <class EVT,class FSM,class SourceState,class TargetState>
3240 struct transition_action_result
3241 {
3242 typedef int type;
3243 };
3244 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3245
3246 template <class EVT,class FSM,class SourceState,class TargetState>
3247 typename ::boost::enable_if<
3248 typename ::boost::mpl::has_key<
3249 typename Container::tag_type,action_tag>::type,
3250 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3251 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3252 {
3253 return (Container()(evt,fsm,src,tgt)).compare(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
3254 Param3()(evt,fsm,src,tgt));
3255 }
3256 template <class Event,class FSM,class STATE>
3257 typename ::boost::enable_if<
3258 typename ::boost::mpl::has_key<
3259 typename Container::tag_type,state_action_tag>::type,
3260 typename state_action_result<Event,FSM,STATE>::type >::type
3261 operator()(Event const& evt,FSM& fsm,STATE& state )const
3262 {
3263 return (Container()(evt,fsm,state)).compare(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
3264 Param3()(evt,fsm,state));
3265 }
3266 };
3267
3268 struct string_compare_tag {};
3269 struct StringCompare_Helper: proto::extends< proto::terminal<string_compare_tag>::type, StringCompare_Helper, boost::msm::sm_domain>
3270 {
3271 StringCompare_Helper(){}
3272 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
3273 #ifdef BOOST_MSVC
3274 ,class Arg6
3275 #endif
3276 >
3277 struct In
3278 {
3279 typedef StringCompare_<Arg1,Arg2,Arg3,Arg4,Arg5> type;
3280 };
3281 };
3282 StringCompare_Helper const string_compare_;
3283
3284 template <class Container, class Param1, class Param2, class Param3 >
3285 struct Append_ : euml_action<Append_<Container,Param1,Param2,Param3> >
3286 {
3287 template <class Event,class FSM,class STATE >
3288 struct state_action_result
3289 {
3290 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3291 };
3292 template <class EVT,class FSM,class SourceState,class TargetState>
3293 struct transition_action_result
3294 {
3295 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3296 };
3297 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3298
3299 template <class EVT,class FSM,class SourceState,class TargetState>
3300 typename ::boost::enable_if<
3301 typename ::boost::mpl::has_key<
3302 typename Container::tag_type,action_tag>::type,
3303 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3304 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3305 {
3306 return (Container()(evt,fsm,src,tgt)).append (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
3307 Param3()(evt,fsm,src,tgt));
3308 }
3309 template <class Event,class FSM,class STATE>
3310 typename ::boost::enable_if<
3311 typename ::boost::mpl::has_key<
3312 typename Container::tag_type,state_action_tag>::type,
3313 typename state_action_result<Event,FSM,STATE>::type >::type
3314 operator()(Event const& evt,FSM& fsm,STATE& state )const
3315 {
3316 return (Container()(evt,fsm,state)).append (Param1()(evt,fsm,state),Param2()(evt,fsm,state),
3317 Param3()(evt,fsm,state));
3318 }
3319 };
3320 template <class Container, class Param1>
3321 struct Append_<Container,Param1,void,void>
3322 : euml_action<Append_<Container,Param1,void,void> >
3323 {
3324 template <class Event,class FSM,class STATE >
3325 struct state_action_result
3326 {
3327 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3328 };
3329 template <class EVT,class FSM,class SourceState,class TargetState>
3330 struct transition_action_result
3331 {
3332 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3333 };
3334 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3335
3336 template <class EVT,class FSM,class SourceState,class TargetState>
3337 typename ::boost::enable_if<
3338 typename ::boost::mpl::has_key<
3339 typename Container::tag_type,action_tag>::type,
3340 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3341 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3342 {
3343 return (Container()(evt,fsm,src,tgt)).append(Param1()(evt,fsm,src,tgt));
3344 }
3345 template <class Event,class FSM,class STATE>
3346 typename ::boost::enable_if<
3347 typename ::boost::mpl::has_key<
3348 typename Container::tag_type,state_action_tag>::type,
3349 typename state_action_result<Event,FSM,STATE>::type >::type
3350 operator()(Event const& evt,FSM& fsm,STATE& state )const
3351 {
3352 return (Container()(evt,fsm,state)).append(Param1()(evt,fsm,state));
3353 }
3354 };
3355
3356 template <class Container, class Param1, class Param2 >
3357 struct Append_<Container,Param1,Param2,void>
3358 : euml_action<Append_<Container,Param1,Param2,void> >
3359 {
3360 template <class Event,class FSM,class STATE >
3361 struct state_action_result
3362 {
3363 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3364 };
3365 template <class EVT,class FSM,class SourceState,class TargetState>
3366 struct transition_action_result
3367 {
3368 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3369 };
3370 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3371
3372 template <class EVT,class FSM,class SourceState,class TargetState>
3373 typename ::boost::enable_if<
3374 typename ::boost::mpl::has_key<
3375 typename Container::tag_type,action_tag>::type,
3376 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3377 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3378 {
3379 return (Container()(evt,fsm,src,tgt)).append(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
3380 }
3381 template <class Event,class FSM,class STATE>
3382 typename ::boost::enable_if<
3383 typename ::boost::mpl::has_key<
3384 typename Container::tag_type,state_action_tag>::type,
3385 typename state_action_result<Event,FSM,STATE>::type >::type
3386 operator()(Event const& evt,FSM& fsm,STATE& state )const
3387 {
3388 return (Container()(evt,fsm,state)).append(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
3389 }
3390 };
3391
3392 struct append_tag {};
3393 struct Append_Helper: proto::extends< proto::terminal<append_tag>::type, Append_Helper, boost::msm::sm_domain>
3394 {
3395 Append_Helper(){}
3396 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
3397 #ifdef BOOST_MSVC
3398 ,class Arg6
3399 #endif
3400 >
3401 struct In
3402 {
3403 typedef Append_<Arg1,Arg2,Arg3,Arg4> type;
3404 };
3405 };
3406 Append_Helper const append_;
3407
3408 template <class Container, class Param1, class Param2, class Param3, class Param4 >
3409 struct StringInsert_ : euml_action<StringInsert_<Container,Param1,Param2,Param3,Param4> >
3410 {
3411 template <class Event,class FSM,class STATE >
3412 struct state_action_result
3413 {
3414 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3415 };
3416 template <class EVT,class FSM,class SourceState,class TargetState>
3417 struct transition_action_result
3418 {
3419 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3420 };
3421 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3422
3423 template <class EVT,class FSM,class SourceState,class TargetState>
3424 typename ::boost::enable_if<
3425 typename ::boost::mpl::has_key<
3426 typename Container::tag_type,action_tag>::type,
3427 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3428 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3429 {
3430 return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
3431 Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt));
3432 }
3433 template <class Event,class FSM,class STATE>
3434 typename ::boost::enable_if<
3435 typename ::boost::mpl::has_key<
3436 typename Container::tag_type,state_action_tag>::type,
3437 typename state_action_result<Event,FSM,STATE>::type >::type
3438 operator()(Event const& evt,FSM& fsm,STATE& state )const
3439 {
3440 return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
3441 Param3()(evt,fsm,state),Param4()(evt,fsm,state));
3442 }
3443 };
3444 template <class Container, class Param1, class Param2>
3445 struct StringInsert_ <Container,Param1,Param2,void,void>
3446 : euml_action<StringInsert_<Container,Param1,Param2,void,void> >
3447 {
3448 template <class Event,class FSM,class STATE >
3449 struct state_action_result
3450 {
3451 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3452 };
3453 template <class EVT,class FSM,class SourceState,class TargetState>
3454 struct transition_action_result
3455 {
3456 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3457 };
3458 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3459
3460 template <class EVT,class FSM,class SourceState,class TargetState>
3461 typename ::boost::enable_if<
3462 typename ::boost::mpl::has_key<
3463 typename Container::tag_type,action_tag>::type,
3464 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3465 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3466 {
3467 return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
3468 }
3469 template <class Event,class FSM,class STATE>
3470 typename ::boost::enable_if<
3471 typename ::boost::mpl::has_key<
3472 typename Container::tag_type,state_action_tag>::type,
3473 typename state_action_result<Event,FSM,STATE>::type >::type
3474 operator()(Event const& evt,FSM& fsm,STATE& state )const
3475 {
3476 return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
3477 }
3478 };
3479 template <class Container, class Param1, class Param2, class Param3>
3480 struct StringInsert_<Container,Param1,Param2,Param3,void>
3481 : euml_action<StringInsert_<Container,Param1,Param2,Param3,void> >
3482 {
3483 template <class Event,class FSM,class STATE >
3484 struct state_action_result
3485 {
3486 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3487 };
3488 template <class EVT,class FSM,class SourceState,class TargetState>
3489 struct transition_action_result
3490 {
3491 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3492 };
3493 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3494
3495 template <class EVT,class FSM,class SourceState,class TargetState>
3496 typename ::boost::enable_if<
3497 typename ::boost::mpl::has_key<
3498 typename Container::tag_type,action_tag>::type,
3499 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3500 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3501 {
3502 return (Container()(evt,fsm,src,tgt)).insert(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
3503 Param3()(evt,fsm,src,tgt));
3504 }
3505 template <class Event,class FSM,class STATE>
3506 typename ::boost::enable_if<
3507 typename ::boost::mpl::has_key<
3508 typename Container::tag_type,state_action_tag>::type,
3509 typename state_action_result<Event,FSM,STATE>::type >::type
3510 operator()(Event const& evt,FSM& fsm,STATE& state )const
3511 {
3512 return (Container()(evt,fsm,state)).insert(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
3513 Param3()(evt,fsm,state));
3514 }
3515 };
3516
3517 struct string_insert_tag {};
3518 struct StringInsert_Helper: proto::extends< proto::terminal<string_insert_tag>::type, StringInsert_Helper, boost::msm::sm_domain>
3519 {
3520 StringInsert_Helper(){}
3521 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
3522 #ifdef BOOST_MSVC
3523 ,class Arg6
3524 #endif
3525 >
3526 struct In
3527 {
3528 typedef StringInsert_<Arg1,Arg2,Arg3,Arg4,Arg5> type;
3529 };
3530 };
3531 StringInsert_Helper const string_insert_;
3532
3533 template <class Container,class Param1, class Param2>
3534 struct StringErase_ : euml_action<StringErase_<Container,Param1,Param2> >
3535 {
3536 template <class Event,class FSM,class STATE >
3537 struct state_action_result
3538 {
3539 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3540 };
3541 template <class EVT,class FSM,class SourceState,class TargetState>
3542 struct transition_action_result
3543 {
3544 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3545 };
3546 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3547
3548 template <class EVT,class FSM,class SourceState,class TargetState>
3549 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
3550 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3551 {
3552 return (Container()(evt,fsm,src,tgt)).
3553 erase(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
3554 }
3555 template <class Event,class FSM,class STATE>
3556 typename state_action_result<Event,FSM,STATE>::type
3557 operator()(Event const& evt,FSM& fsm,STATE& state )const
3558 {
3559 return (Container()(evt,fsm,state)).
3560 erase(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
3561 }
3562 };
3563 template <class Container>
3564 struct StringErase_ <Container,void,void>
3565 : euml_action<StringErase_<Container,void,void> >
3566
3567 {
3568 template <class Event,class FSM,class STATE >
3569 struct state_action_result
3570 {
3571 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3572 };
3573 template <class EVT,class FSM,class SourceState,class TargetState>
3574 struct transition_action_result
3575 {
3576 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3577 };
3578 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3579
3580 template <class EVT,class FSM,class SourceState,class TargetState>
3581 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
3582 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3583 {
3584 return (Container()(evt,fsm,src,tgt)).erase();
3585 }
3586 template <class Event,class FSM,class STATE>
3587 typename state_action_result<Event,FSM,STATE>::type
3588 operator()(Event const& evt,FSM& fsm,STATE& state )const
3589 {
3590 return (Container()(evt,fsm,state)).erase();
3591 }
3592 };
3593
3594 template <class Container,class Param1>
3595 struct StringErase_ <Container,Param1,void>
3596 : euml_action<StringErase_<Container,Param1,void> >
3597 {
3598 template <class Event,class FSM,class STATE >
3599 struct state_action_result
3600 {
3601 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3602 };
3603 template <class EVT,class FSM,class SourceState,class TargetState>
3604 struct transition_action_result
3605 {
3606 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3607 };
3608 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3609
3610 template <class EVT,class FSM,class SourceState,class TargetState>
3611 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
3612 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3613 {
3614 return (Container()(evt,fsm,src,tgt)).erase(Param1()(evt,fsm,src,tgt));
3615 }
3616 template <class Event,class FSM,class STATE>
3617 typename state_action_result<Event,FSM,STATE>::type
3618 operator()(Event const& evt,FSM& fsm,STATE& state )const
3619 {
3620 return (Container()(evt,fsm,state)).erase(Param1()(evt,fsm,state));
3621 }
3622 };
3623
3624 struct string_erase_tag {};
3625 struct StringErase_Helper: proto::extends< proto::terminal<string_erase_tag>::type, StringErase_Helper, boost::msm::sm_domain>
3626 {
3627 StringErase_Helper(){}
3628 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
3629 #ifdef BOOST_MSVC
3630 ,class Arg6
3631 #endif
3632 >
3633 struct In
3634 {
3635 typedef StringErase_<Arg1,Arg2,Arg3> type;
3636 };
3637 };
3638 StringErase_Helper const string_erase_;
3639
3640 template <class Container, class Param1, class Param2, class Param3 >
3641 struct StringAssign_ : euml_action<StringAssign_<Container,Param1,Param2,Param3> >
3642 {
3643 template <class Event,class FSM,class STATE >
3644 struct state_action_result
3645 {
3646 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3647 };
3648 template <class EVT,class FSM,class SourceState,class TargetState>
3649 struct transition_action_result
3650 {
3651 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3652 };
3653 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3654
3655 template <class EVT,class FSM,class SourceState,class TargetState>
3656 typename ::boost::enable_if<
3657 typename ::boost::mpl::has_key<
3658 typename Container::tag_type,action_tag>::type,
3659 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3660 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3661 {
3662 return (Container()(evt,fsm,src,tgt)).assign (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
3663 Param3()(evt,fsm,src,tgt));
3664 }
3665 template <class Event,class FSM,class STATE>
3666 typename ::boost::enable_if<
3667 typename ::boost::mpl::has_key<
3668 typename Container::tag_type,state_action_tag>::type,
3669 typename state_action_result<Event,FSM,STATE>::type >::type
3670 operator()(Event const& evt,FSM& fsm,STATE& state )const
3671 {
3672 return (Container()(evt,fsm,state)).assign (Param1()(evt,fsm,state),Param2()(evt,fsm,state),
3673 Param3()(evt,fsm,state));
3674 }
3675 };
3676 template <class Container,class Param1>
3677 struct StringAssign_ <
3678 Container,Param1,void,void>
3679 : euml_action<StringAssign_<Container,Param1,void,void> >
3680 {
3681 template <class Event,class FSM,class STATE >
3682 struct state_action_result
3683 {
3684 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3685 };
3686 template <class EVT,class FSM,class SourceState,class TargetState>
3687 struct transition_action_result
3688 {
3689 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3690 };
3691 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3692
3693 template <class EVT,class FSM,class SourceState,class TargetState>
3694 typename ::boost::enable_if<
3695 typename ::boost::mpl::has_key<
3696 typename Container::tag_type,action_tag>::type,
3697 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3698 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3699 {
3700 return (Container()(evt,fsm,src,tgt)).assign(Param1()(evt,fsm,src,tgt));
3701 }
3702 template <class Event,class FSM,class STATE>
3703 typename ::boost::enable_if<
3704 typename ::boost::mpl::has_key<
3705 typename Container::tag_type,state_action_tag>::type,
3706 typename state_action_result<Event,FSM,STATE>::type >::type
3707 operator()(Event const& evt,FSM& fsm,STATE& state )const
3708 {
3709 return (Container()(evt,fsm,state)).assign(Param1()(evt,fsm,state));
3710 }
3711 };
3712
3713 template <class Container, class Param1, class Param2 >
3714 struct StringAssign_<Container,Param1,Param2,void>
3715 : euml_action<StringAssign_<Container,Param1,Param2,void> >
3716 {
3717 template <class Event,class FSM,class STATE >
3718 struct state_action_result
3719 {
3720 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3721 };
3722 template <class EVT,class FSM,class SourceState,class TargetState>
3723 struct transition_action_result
3724 {
3725 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3726 };
3727 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3728
3729 template <class EVT,class FSM,class SourceState,class TargetState>
3730 typename ::boost::enable_if<
3731 typename ::boost::mpl::has_key<
3732 typename Container::tag_type,action_tag>::type,
3733 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3734 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3735 {
3736 return (Container()(evt,fsm,src,tgt)).assign(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
3737 }
3738 template <class Event,class FSM,class STATE>
3739 typename ::boost::enable_if<
3740 typename ::boost::mpl::has_key<
3741 typename Container::tag_type,state_action_tag>::type,
3742 typename state_action_result<Event,FSM,STATE>::type >::type
3743 operator()(Event const& evt,FSM& fsm,STATE& state )const
3744 {
3745 return (Container()(evt,fsm,state)).assign(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
3746 }
3747 };
3748 struct assign_tag {};
3749 struct StringAssign_Helper: proto::extends< proto::terminal<assign_tag>::type, StringAssign_Helper, boost::msm::sm_domain>
3750 {
3751 StringAssign_Helper(){}
3752 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
3753 #ifdef BOOST_MSVC
3754 ,class Arg6
3755 #endif
3756 >
3757 struct In
3758 {
3759 typedef StringAssign_<Arg1,Arg2,Arg3,Arg4> type;
3760 };
3761 };
3762 StringAssign_Helper const string_assign_;
3763
3764 template <class Container,class Param1, class Param2, class Param3, class Param4>
3765 struct StringReplace_ : euml_action<StringReplace_<Container,Param1,Param2,Param3,Param4> >
3766 {
3767 template <class Event,class FSM,class STATE >
3768 struct state_action_result
3769 {
3770 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3771 };
3772 template <class EVT,class FSM,class SourceState,class TargetState>
3773 struct transition_action_result
3774 {
3775 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3776 };
3777 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3778
3779 template <class EVT,class FSM,class SourceState,class TargetState>
3780 typename ::boost::enable_if<
3781 typename ::boost::mpl::has_key<
3782 typename Container::tag_type,action_tag>::type,
3783 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3784 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3785 {
3786 return (Container()(evt,fsm,src,tgt)).replace (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
3787 Param3()(evt,fsm,src,tgt),Param4()(evt,fsm,src,tgt));
3788 }
3789 template <class Event,class FSM,class STATE>
3790 typename ::boost::enable_if<
3791 typename ::boost::mpl::has_key<
3792 typename Container::tag_type,state_action_tag>::type,
3793 typename state_action_result<Event,FSM,STATE>::type >::type
3794 operator()(Event const& evt,FSM& fsm,STATE& state )const
3795 {
3796 return (Container()(evt,fsm,state)).replace (Param1()(evt,fsm,state),Param2()(evt,fsm,state),
3797 Param3()(evt,fsm,state),Param4()(evt,fsm,state));
3798 }
3799 };
3800
3801 template <class Container,class Param1, class Param2, class Param3>
3802 struct StringReplace_<Container,Param1,Param2,Param3,void>
3803 : euml_action<StringReplace_<Container,Param1,Param2,Param3,void> >
3804 {
3805 template <class Event,class FSM,class STATE >
3806 struct state_action_result
3807 {
3808 typedef typename get_result_type2<Container,Event,FSM,STATE>::type type;
3809 };
3810 template <class EVT,class FSM,class SourceState,class TargetState>
3811 struct transition_action_result
3812 {
3813 typedef typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type type;
3814 };
3815 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3816
3817 template <class EVT,class FSM,class SourceState,class TargetState>
3818 typename ::boost::enable_if<
3819 typename ::boost::mpl::has_key<
3820 typename Container::tag_type,action_tag>::type,
3821 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3822 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3823 {
3824 return (Container()(evt,fsm,src,tgt)).replace(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),
3825 Param3()(evt,fsm,src,tgt));
3826 }
3827 template <class Event,class FSM,class STATE>
3828 typename ::boost::enable_if<
3829 typename ::boost::mpl::has_key<
3830 typename Container::tag_type,state_action_tag>::type,
3831 typename state_action_result<Event,FSM,STATE>::type >::type
3832 operator()(Event const& evt,FSM& fsm,STATE& state )const
3833 {
3834 return (Container()(evt,fsm,state)).replace(Param1()(evt,fsm,state),Param2()(evt,fsm,state),
3835 Param3()(evt,fsm,state));
3836 }
3837 };
3838
3839 struct string_replace_tag {};
3840 struct StringReplace_Helper: proto::extends< proto::terminal<string_replace_tag>::type, StringReplace_Helper, boost::msm::sm_domain>
3841 {
3842 StringReplace_Helper(){}
3843 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
3844 #ifdef BOOST_MSVC
3845 ,class Arg6
3846 #endif
3847 >
3848 struct In
3849 {
3850 typedef StringReplace_<Arg1,Arg2,Arg3,Arg4,Arg5> type;
3851 };
3852 };
3853 StringReplace_Helper const string_replace_;
3854
3855 template <class Container>
3856 struct CStr_ : euml_action<CStr_<Container> >
3857 {
3858 template <class Event,class FSM,class STATE >
3859 struct state_action_result
3860 {
3861 typedef typename ::boost::add_const<
3862 typename get_value_type<
3863 typename ::boost::remove_reference<
3864 typename get_result_type2<Container,Event,FSM,STATE>::type>::type>::type>::type* type;
3865 };
3866 template <class EVT,class FSM,class SourceState,class TargetState>
3867 struct transition_action_result
3868 {
3869 typedef typename ::boost::add_const<
3870 typename get_value_type<
3871 typename ::boost::remove_reference<
3872 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type>::type>::type* type;
3873 };
3874 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3875
3876 template <class EVT,class FSM,class SourceState,class TargetState>
3877 typename ::boost::enable_if<
3878 typename ::boost::mpl::has_key<
3879 typename Container::tag_type,action_tag>::type,
3880 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3881 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3882 {
3883 return (Container()(evt,fsm,src,tgt)).c_str();
3884 }
3885 template <class Event,class FSM,class STATE>
3886 typename ::boost::enable_if<
3887 typename ::boost::mpl::has_key<
3888 typename Container::tag_type,state_action_tag>::type,
3889 typename state_action_result<Event,FSM,STATE>::type >::type
3890 operator()(Event const& evt,FSM& fsm,STATE& state )const
3891 {
3892 return (Container()(evt,fsm,state)).c_str();
3893 }
3894 };
3895 struct c_str_tag {};
3896 struct CStr_Helper: proto::extends< proto::terminal<c_str_tag>::type, CStr_Helper, boost::msm::sm_domain>
3897 {
3898 CStr_Helper(){}
3899 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
3900 #ifdef BOOST_MSVC
3901 ,class Arg6
3902 #endif
3903 >
3904 struct In
3905 {
3906 typedef CStr_<Arg1> type;
3907 };
3908 };
3909 CStr_Helper const c_str_;
3910
3911 template <class Container>
3912 struct StringData_ : euml_action<StringData_<Container> >
3913 {
3914 template <class Event,class FSM,class STATE >
3915 struct state_action_result
3916 {
3917 typedef typename ::boost::add_const<
3918 typename get_value_type<
3919 typename ::boost::remove_reference<
3920 typename get_result_type2<Container,Event,FSM,STATE>::type>::type>::type>::type* type;
3921 };
3922 template <class EVT,class FSM,class SourceState,class TargetState>
3923 struct transition_action_result
3924 {
3925 typedef typename ::boost::add_const<
3926 typename get_value_type<
3927 typename ::boost::remove_reference<
3928 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type>::type>::type* type;
3929 };
3930 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3931
3932 template <class EVT,class FSM,class SourceState,class TargetState>
3933 typename ::boost::enable_if<
3934 typename ::boost::mpl::has_key<
3935 typename Container::tag_type,action_tag>::type,
3936 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
3937 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
3938 {
3939 return (Container()(evt,fsm,src,tgt)).data();
3940 }
3941 template <class Event,class FSM,class STATE>
3942 typename ::boost::enable_if<
3943 typename ::boost::mpl::has_key<
3944 typename Container::tag_type,state_action_tag>::type,
3945 typename state_action_result<Event,FSM,STATE>::type >::type
3946 operator()(Event const& evt,FSM& fsm,STATE& state )const
3947 {
3948 return (Container()(evt,fsm,state)).data();
3949 }
3950 };
3951 struct string_data_tag {};
3952 struct StringData_Helper: proto::extends< proto::terminal<string_data_tag>::type, StringData_Helper, boost::msm::sm_domain>
3953 {
3954 StringData_Helper(){}
3955 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
3956 #ifdef BOOST_MSVC
3957 ,class Arg6
3958 #endif
3959 >
3960 struct In
3961 {
3962 typedef StringData_<Arg1> type;
3963 };
3964 };
3965 StringData_Helper const string_data_;
3966
3967 template <class Container, class Param1, class Param2, class Param3, class Enable=void >
3968 struct StringCopy_ : euml_action<StringCopy_<Container,Param1,Param2,Param3,Enable> >
3969 {
3970 };
3971
3972 template <class Container,class Param1, class Param2, class Param3>
3973 struct StringCopy_<
3974 Container,Param1,Param2,Param3,
3975 typename ::boost::enable_if<
3976 typename ::boost::is_same<Param3,void>::type
3977 >::type
3978 >
3979 : euml_action<StringCopy_<Container,Param1,Param2,Param3> >
3980 {
3981 template <class Event,class FSM,class STATE >
3982 struct state_action_result
3983 {
3984 typedef typename get_size_type<
3985 typename ::boost::remove_reference<
3986 typename get_result_type2<Container,Event,FSM,STATE>::type>::type>::type type;
3987 };
3988 template <class EVT,class FSM,class SourceState,class TargetState>
3989 struct transition_action_result
3990 {
3991 typedef typename get_size_type<
3992 typename ::boost::remove_reference<
3993 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
3994 };
3995 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
3996
3997 template <class EVT,class FSM,class SourceState,class TargetState>
3998 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
3999 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
4000 {
4001 return (Container()(evt,fsm,src,tgt)).copy(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));
4002 }
4003 template <class Event,class FSM,class STATE>
4004 typename state_action_result<Event,FSM,STATE>::type
4005 operator()(Event const& evt,FSM& fsm,STATE& state )const
4006 {
4007 return (Container()(evt,fsm,state)).copy(Param1()(evt,fsm,state),Param2()(evt,fsm,state));
4008 }
4009 };
4010
4011 template <class Container,class Param1, class Param2, class Param3>
4012 struct StringCopy_<
4013 Container,Param1,Param2,Param3,
4014 typename ::boost::disable_if<
4015 typename ::boost::is_same<Param3,void>::type
4016 >::type
4017 >
4018 : euml_action<StringCopy_<Container,Param1,Param2,Param3> >
4019 {
4020 template <class Event,class FSM,class STATE >
4021 struct state_action_result
4022 {
4023 typedef typename get_size_type<
4024 typename ::boost::remove_reference<
4025 typename get_result_type2<Container,Event,FSM,STATE>::type>::type>::type type;
4026 };
4027 template <class EVT,class FSM,class SourceState,class TargetState>
4028 struct transition_action_result
4029 {
4030 typedef typename get_size_type<
4031 typename ::boost::remove_reference<
4032 typename get_result_type<Container,EVT,FSM,SourceState,TargetState>::type>::type>::type type;
4033 };
4034 typedef ::boost::fusion::set<state_action_tag,action_tag> tag_type;
4035
4036 template <class EVT,class FSM,class SourceState,class TargetState>
4037 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
4038 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
4039 {
4040 return (Container()(evt,fsm,src,tgt)).
4041 copy(Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));
4042 }
4043 template <class Event,class FSM,class STATE>
4044 typename state_action_result<Event,FSM,STATE>::type
4045 operator()(Event const& evt,FSM& fsm,STATE& state )const
4046 {
4047 return (Container()(evt,fsm,state)).
4048 copy(Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));
4049 }
4050 };
4051
4052 struct string_copy_tag {};
4053 struct StringCopy_Helper: proto::extends< proto::terminal<string_copy_tag>::type, StringCopy_Helper, boost::msm::sm_domain>
4054 {
4055 StringCopy_Helper(){}
4056 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
4057 #ifdef BOOST_MSVC
4058 ,class Arg6
4059 #endif
4060 >
4061 struct In
4062 {
4063 typedef StringCopy_<Arg1,Arg2,Arg3,Arg4> type;
4064 };
4065 };
4066 StringCopy_Helper const string_copy_;
4067
4068 }}}}
4069
4070 #endif