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