Chris@16
|
1 // Copyright 2008 Christophe Henry
|
Chris@16
|
2 // henry UNDERSCORE christophe AT hotmail DOT com
|
Chris@16
|
3 // This is an extended version of the state machine available in the boost::mpl library
|
Chris@16
|
4 // Distributed under the same license as the original.
|
Chris@16
|
5 // Copyright for the original version:
|
Chris@16
|
6 // Copyright 2005 David Abrahams and Aleksey Gurtovoy. Distributed
|
Chris@16
|
7 // under the Boost Software License, Version 1.0. (See accompanying
|
Chris@16
|
8 // file LICENSE_1_0.txt or copy at
|
Chris@16
|
9 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
10
|
Chris@16
|
11 #ifndef BOOST_MSM_FRONT_EUML_COMMON_H
|
Chris@16
|
12 #define BOOST_MSM_FRONT_EUML_COMMON_H
|
Chris@16
|
13
|
Chris@16
|
14 #include <boost/config.hpp>
|
Chris@16
|
15 #include <boost/msm/proto_config.hpp>
|
Chris@16
|
16
|
Chris@16
|
17 #include <iterator>
|
Chris@16
|
18 #include <utility>
|
Chris@16
|
19
|
Chris@16
|
20 #include <boost/proto/core.hpp>
|
Chris@16
|
21 #include <boost/proto/transform.hpp>
|
Chris@16
|
22
|
Chris@16
|
23 #include <boost/utility/enable_if.hpp>
|
Chris@16
|
24 #include <boost/type_traits/is_same.hpp>
|
Chris@16
|
25 #include <boost/type_traits/remove_reference.hpp>
|
Chris@16
|
26 #include <boost/type_traits/add_const.hpp>
|
Chris@16
|
27
|
Chris@16
|
28 #include <boost/mpl/vector.hpp>
|
Chris@16
|
29 #include <boost/mpl/set.hpp>
|
Chris@16
|
30 #include <boost/mpl/has_key.hpp>
|
Chris@16
|
31 #include <boost/mpl/int.hpp>
|
Chris@16
|
32 #include <boost/mpl/less_equal.hpp>
|
Chris@16
|
33
|
Chris@16
|
34 #if BOOST_VERSION >= 104000
|
Chris@16
|
35 #include <boost/mpl/string.hpp>
|
Chris@16
|
36 #endif
|
Chris@16
|
37
|
Chris@16
|
38 #include <boost/fusion/container/vector.hpp>
|
Chris@16
|
39 #include <boost/fusion/include/at_c.hpp>
|
Chris@16
|
40 #include <boost/fusion/include/make_map.hpp>
|
Chris@16
|
41 #include <boost/fusion/include/pair.hpp>
|
Chris@16
|
42 #include <boost/fusion/include/as_vector.hpp>
|
Chris@16
|
43 #include <boost/fusion/include/pair.hpp>
|
Chris@16
|
44 #include <boost/fusion/include/is_sequence.hpp>
|
Chris@16
|
45
|
Chris@16
|
46 #include <boost/type_traits/remove_reference.hpp>
|
Chris@16
|
47
|
Chris@16
|
48 #include <boost/preprocessor/repetition/enum_params.hpp>
|
Chris@16
|
49 #include <boost/preprocessor/arithmetic/sub.hpp>
|
Chris@16
|
50 #include <boost/preprocessor/punctuation/comma_if.hpp>
|
Chris@16
|
51 #include <boost/preprocessor/control/expr_if.hpp>
|
Chris@16
|
52 #include <boost/preprocessor/punctuation/comma.hpp>
|
Chris@16
|
53 #include <boost/preprocessor/arithmetic/add.hpp>
|
Chris@16
|
54 #include <boost/preprocessor/cat.hpp>
|
Chris@16
|
55 #include <boost/preprocessor/comparison/less.hpp>
|
Chris@16
|
56 #include <boost/preprocessor/arithmetic/dec.hpp>
|
Chris@16
|
57 #include <boost/preprocessor/repetition/repeat_from_to.hpp>
|
Chris@16
|
58 #include <boost/preprocessor/cat.hpp>
|
Chris@16
|
59
|
Chris@16
|
60 #include <boost/msm/msm_grammar.hpp>
|
Chris@16
|
61 #include <boost/msm/active_state_switching_policies.hpp>
|
Chris@16
|
62 #include <boost/msm/event_traits.hpp>
|
Chris@16
|
63 #include <boost/msm/front/functor_row.hpp>
|
Chris@16
|
64
|
Chris@16
|
65 namespace proto = boost::proto;
|
Chris@16
|
66
|
Chris@16
|
67 BOOST_MPL_HAS_XXX_TRAIT_DEF(tag_type)
|
Chris@16
|
68 BOOST_MPL_HAS_XXX_TRAIT_DEF(action_name)
|
Chris@16
|
69 BOOST_MPL_HAS_XXX_TRAIT_DEF(not_intern_euml_state)
|
Chris@16
|
70
|
Chris@16
|
71 namespace boost { namespace msm { namespace front { namespace euml
|
Chris@16
|
72 {
|
Chris@16
|
73 template <class T>
|
Chris@16
|
74 struct get_iterator
|
Chris@16
|
75 {
|
Chris@16
|
76 typedef typename T::iterator type;
|
Chris@16
|
77 };
|
Chris@16
|
78 template <class T>
|
Chris@16
|
79 struct get_reverse_iterator
|
Chris@16
|
80 {
|
Chris@16
|
81 typedef typename T::reverse_iterator type;
|
Chris@16
|
82 };
|
Chris@16
|
83 template <class T>
|
Chris@16
|
84 struct get_reference
|
Chris@16
|
85 {
|
Chris@16
|
86 typedef typename T::reference type;
|
Chris@16
|
87 };
|
Chris@16
|
88 template <class T>
|
Chris@16
|
89 struct get_size_type
|
Chris@16
|
90 {
|
Chris@16
|
91 typedef typename T::size_type type;
|
Chris@16
|
92 };
|
Chris@16
|
93 template <class T>
|
Chris@16
|
94 struct get_value_type
|
Chris@16
|
95 {
|
Chris@16
|
96 typedef typename T::value_type type;
|
Chris@16
|
97 };
|
Chris@16
|
98 template <class T>
|
Chris@16
|
99 struct get_first_type
|
Chris@16
|
100 {
|
Chris@16
|
101 typedef typename T::first_type type;
|
Chris@16
|
102 };
|
Chris@16
|
103 template <class T>
|
Chris@16
|
104 struct get_second_type
|
Chris@16
|
105 {
|
Chris@16
|
106 typedef typename T::second_type type;
|
Chris@16
|
107 };
|
Chris@16
|
108 template <class T>
|
Chris@16
|
109 struct get_action_tag_type
|
Chris@16
|
110 {
|
Chris@16
|
111 typedef typename ::boost::mpl::has_key<
|
Chris@16
|
112 typename T::tag_type,action_tag>::type type;
|
Chris@16
|
113 };
|
Chris@16
|
114 template <class T>
|
Chris@16
|
115 struct get_state_action_tag_type
|
Chris@16
|
116 {
|
Chris@16
|
117 typedef typename ::boost::mpl::has_key<
|
Chris@16
|
118 typename T::tag_type,state_action_tag>::type type;
|
Chris@16
|
119 };
|
Chris@16
|
120
|
Chris@16
|
121 template <class T,class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
122 struct get_result_type
|
Chris@16
|
123 {
|
Chris@16
|
124 typedef typename T::template transition_action_result<EVT,FSM,SourceState,TargetState>::type type;
|
Chris@16
|
125 };
|
Chris@16
|
126 template <class T,class Event,class FSM,class STATE>
|
Chris@16
|
127 struct get_result_type2
|
Chris@16
|
128 {
|
Chris@16
|
129 typedef typename T::template state_action_result<Event,FSM,STATE>::type type;
|
Chris@16
|
130 };
|
Chris@16
|
131 template<class SEQ>
|
Chris@16
|
132 struct get_sequence
|
Chris@16
|
133 {
|
Chris@16
|
134 typedef typename SEQ::sequence type;
|
Chris@16
|
135 };
|
Chris@16
|
136
|
Chris@16
|
137 template <class T>
|
Chris@16
|
138 struct get_attributes_type
|
Chris@16
|
139 {
|
Chris@16
|
140 typedef typename T::attributes_type type;
|
Chris@16
|
141 };
|
Chris@16
|
142
|
Chris@16
|
143 template <class T>
|
Chris@16
|
144 struct get_euml_tag_type
|
Chris@16
|
145 {
|
Chris@16
|
146 typedef typename T::euml_tag_type type;
|
Chris@16
|
147 };
|
Chris@16
|
148
|
Chris@16
|
149 template <class T,class Arg1=void,class Arg2=void,class Arg3=void,class Arg4=void,class Arg5=void
|
Chris@16
|
150 #ifdef BOOST_MSVC
|
Chris@16
|
151 ,class Arg6=void
|
Chris@16
|
152 #endif
|
Chris@16
|
153 >
|
Chris@16
|
154 struct get_fct
|
Chris@16
|
155 {
|
Chris@16
|
156 typedef typename T::template In<Arg1,Arg2,Arg3,Arg4,Arg5
|
Chris@16
|
157 #ifdef BOOST_MSVC
|
Chris@16
|
158 ,Arg6
|
Chris@16
|
159 #endif
|
Chris@16
|
160 >::type type;
|
Chris@16
|
161 };
|
Chris@16
|
162
|
Chris@16
|
163 // used to differentiate between different types of euml_state's
|
Chris@16
|
164 template <class T,class Enable=void>
|
Chris@16
|
165 struct get_state_name
|
Chris@16
|
166 {
|
Chris@16
|
167 typedef T type;
|
Chris@16
|
168 };
|
Chris@16
|
169
|
Chris@16
|
170 template <class T>
|
Chris@16
|
171 struct get_state_name<T,typename ::boost::enable_if<has_not_intern_euml_state<T> >::type>
|
Chris@16
|
172 {
|
Chris@16
|
173 typedef typename T::In::type type;
|
Chris@16
|
174 };
|
Chris@16
|
175
|
Chris@16
|
176 template <class T>
|
Chris@16
|
177 struct get_action_name
|
Chris@16
|
178 {
|
Chris@16
|
179 typedef typename T::action_name type;
|
Chris@16
|
180 };
|
Chris@16
|
181 template <class T>
|
Chris@16
|
182 struct get_event_name
|
Chris@16
|
183 {
|
Chris@16
|
184 typedef typename T::event_name type;
|
Chris@16
|
185 };
|
Chris@16
|
186
|
Chris@16
|
187 template <class EVT>
|
Chris@16
|
188 struct euml_event: proto::extends<typename proto::terminal<event_tag>::type, EVT, boost::msm::sm_domain>
|
Chris@16
|
189 {
|
Chris@16
|
190 typedef event_tag euml_tag_type;
|
Chris@16
|
191 typedef EVT event_name;
|
Chris@16
|
192 using proto::extends<typename proto::terminal<event_tag>::type, EVT, boost::msm::sm_domain>::operator=;
|
Chris@16
|
193 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
194 #ifdef BOOST_MSVC
|
Chris@16
|
195 ,class Arg6
|
Chris@16
|
196 #endif
|
Chris@16
|
197 >
|
Chris@16
|
198 struct In
|
Chris@16
|
199 {
|
Chris@16
|
200 typedef EVT type;
|
Chris@16
|
201 };
|
Chris@16
|
202 };
|
Chris@16
|
203
|
Chris@16
|
204 template <class STATE>
|
Chris@16
|
205 struct euml_state_intern: proto::extends<typename proto::terminal< boost::msm::state_tag>::type, STATE, boost::msm::state_domain>
|
Chris@16
|
206 {
|
Chris@16
|
207 typedef state_tag euml_tag_type;
|
Chris@16
|
208 using proto::extends<typename proto::terminal<state_tag>::type, STATE, boost::msm::state_domain>::operator=;
|
Chris@16
|
209 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
210 #ifdef BOOST_MSVC
|
Chris@16
|
211 ,class Arg6
|
Chris@16
|
212 #endif
|
Chris@16
|
213 >
|
Chris@16
|
214 struct In
|
Chris@16
|
215 {
|
Chris@16
|
216 typedef STATE type;
|
Chris@16
|
217 };
|
Chris@16
|
218 };
|
Chris@16
|
219 template <class STATE>
|
Chris@16
|
220 struct euml_state: proto::extends<typename proto::terminal< boost::msm::state_tag>::type, STATE, boost::msm::state_domain>
|
Chris@16
|
221 {
|
Chris@16
|
222 typedef state_tag euml_tag_type;
|
Chris@16
|
223 typedef int not_intern_euml_state;
|
Chris@16
|
224 using proto::extends<typename proto::terminal<state_tag>::type, STATE, boost::msm::state_domain>::operator=;
|
Chris@16
|
225 struct In
|
Chris@16
|
226 {
|
Chris@16
|
227 typedef STATE type;
|
Chris@16
|
228 };
|
Chris@16
|
229 };
|
Chris@16
|
230 template <class ACTION>
|
Chris@16
|
231 struct euml_action: proto::extends<typename proto::terminal<action_tag>::type, ACTION, boost::msm::sm_domain>
|
Chris@16
|
232 {
|
Chris@16
|
233 typedef action_tag euml_tag_type;
|
Chris@16
|
234 typedef ACTION action_name;
|
Chris@16
|
235 using proto::extends<typename proto::terminal<action_tag>::type, ACTION, boost::msm::sm_domain>::operator=;
|
Chris@16
|
236 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
237 #ifdef BOOST_MSVC
|
Chris@16
|
238 ,class Arg6
|
Chris@16
|
239 #endif
|
Chris@16
|
240 >
|
Chris@16
|
241 struct In
|
Chris@16
|
242 {
|
Chris@16
|
243 typedef ACTION type;
|
Chris@16
|
244 };
|
Chris@16
|
245 };
|
Chris@16
|
246 template <class FLAG>
|
Chris@16
|
247 struct euml_flag: proto::extends<typename proto::terminal<flag_tag>::type, FLAG, boost::msm::sm_domain>
|
Chris@16
|
248 {
|
Chris@16
|
249 typedef flag_tag euml_tag_type;
|
Chris@16
|
250 using proto::extends<typename proto::terminal<flag_tag>::type, FLAG, boost::msm::sm_domain>::operator=;
|
Chris@16
|
251 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
252 #ifdef BOOST_MSVC
|
Chris@16
|
253 ,class Arg6
|
Chris@16
|
254 #endif
|
Chris@16
|
255 >
|
Chris@16
|
256 struct In
|
Chris@16
|
257 {
|
Chris@16
|
258 typedef FLAG type;
|
Chris@16
|
259 };
|
Chris@16
|
260 };
|
Chris@16
|
261
|
Chris@16
|
262 template <class CONFIG>
|
Chris@16
|
263 struct euml_config: proto::extends<typename proto::terminal<config_tag>::type, CONFIG, boost::msm::sm_domain>
|
Chris@16
|
264 {
|
Chris@16
|
265 typedef config_tag euml_tag_type;
|
Chris@16
|
266 using proto::extends<typename proto::terminal<config_tag>::type, CONFIG, boost::msm::sm_domain>::operator=;
|
Chris@16
|
267 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
268 #ifdef BOOST_MSVC
|
Chris@16
|
269 ,class Arg6
|
Chris@16
|
270 #endif
|
Chris@16
|
271 >
|
Chris@16
|
272 struct In
|
Chris@16
|
273 {
|
Chris@16
|
274 typedef CONFIG type;
|
Chris@16
|
275 };
|
Chris@16
|
276 };
|
Chris@16
|
277
|
Chris@16
|
278 struct No_Exception : euml_config<No_Exception>
|
Chris@16
|
279 {
|
Chris@16
|
280 typedef int no_exception_thrown;
|
Chris@16
|
281 No_Exception(){}
|
Chris@16
|
282 };
|
Chris@16
|
283 struct No_Msg_Queue : euml_config<No_Msg_Queue>
|
Chris@16
|
284 {
|
Chris@16
|
285 typedef int no_message_queue;
|
Chris@16
|
286 No_Msg_Queue(){}
|
Chris@16
|
287 };
|
Chris@16
|
288 struct Deferred_Events : euml_config<Deferred_Events>
|
Chris@16
|
289 {
|
Chris@16
|
290 typedef int activate_deferred_events;
|
Chris@16
|
291 Deferred_Events(){}
|
Chris@16
|
292 };
|
Chris@16
|
293 No_Exception const no_exception=No_Exception();
|
Chris@16
|
294 No_Msg_Queue const no_msg_queue=No_Msg_Queue();
|
Chris@16
|
295 Deferred_Events const deferred_events=Deferred_Events();
|
Chris@16
|
296
|
Chris@16
|
297 struct ActiveStateSwitchBeforeTransition : euml_config<ActiveStateSwitchBeforeTransition>
|
Chris@16
|
298 {
|
Chris@16
|
299 typedef boost::msm::active_state_switch_before_transition active_state_switch_policy;
|
Chris@16
|
300 ActiveStateSwitchBeforeTransition(){}
|
Chris@16
|
301 };
|
Chris@16
|
302 ActiveStateSwitchBeforeTransition const switch_active_before_transition = ActiveStateSwitchBeforeTransition();
|
Chris@16
|
303
|
Chris@16
|
304 struct ActiveStateSwitchAfterExit : euml_config<ActiveStateSwitchAfterExit>
|
Chris@16
|
305 {
|
Chris@16
|
306 typedef boost::msm::active_state_switch_after_exit active_state_switch_policy;
|
Chris@16
|
307 ActiveStateSwitchAfterExit(){}
|
Chris@16
|
308 };
|
Chris@16
|
309 ActiveStateSwitchAfterExit const switch_active_after_exit = ActiveStateSwitchAfterExit();
|
Chris@16
|
310
|
Chris@16
|
311 struct ActiveStateSwitchAfterAction : euml_config<ActiveStateSwitchAfterAction>
|
Chris@16
|
312 {
|
Chris@16
|
313 typedef boost::msm::active_state_switch_after_transition_action active_state_switch_policy;
|
Chris@16
|
314 ActiveStateSwitchAfterAction(){}
|
Chris@16
|
315 };
|
Chris@16
|
316 ActiveStateSwitchAfterAction const switch_active_after_action = ActiveStateSwitchAfterAction();
|
Chris@16
|
317
|
Chris@16
|
318
|
Chris@16
|
319 struct invalid_type{};
|
Chris@16
|
320 struct make_invalid_type
|
Chris@16
|
321 {
|
Chris@16
|
322 typedef invalid_type type;
|
Chris@16
|
323 };
|
Chris@16
|
324
|
Chris@16
|
325 template <class ROW>
|
Chris@16
|
326 struct make_vector_one_row
|
Chris@16
|
327 {
|
Chris@16
|
328 typedef boost::mpl::vector<ROW> type;
|
Chris@16
|
329 };
|
Chris@16
|
330 template <class T>
|
Chris@16
|
331 T make_T(T t) {return t;}
|
Chris@16
|
332
|
Chris@16
|
333 struct make_vector_no_row
|
Chris@16
|
334 {
|
Chris@16
|
335 typedef boost::mpl::vector0<> type;
|
Chris@16
|
336 };
|
Chris@16
|
337
|
Chris@16
|
338 struct NoAction : euml_action<NoAction>
|
Chris@16
|
339 {
|
Chris@16
|
340 NoAction(){}
|
Chris@16
|
341 // return value if used inside a state action (entry/exit)
|
Chris@16
|
342 template <class Event,class FSM,class STATE >
|
Chris@16
|
343 struct state_action_result
|
Chris@16
|
344 {
|
Chris@16
|
345 typedef bool type;
|
Chris@16
|
346 };
|
Chris@16
|
347 // return value if used inside a transition (action/guard)
|
Chris@16
|
348 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
349 struct transition_action_result
|
Chris@16
|
350 {
|
Chris@16
|
351 typedef bool type;
|
Chris@16
|
352 };
|
Chris@16
|
353 // this functor can be used in both modes, state action and transition action
|
Chris@16
|
354 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
355
|
Chris@16
|
356 template <class Event,class FSM,class STATE>
|
Chris@16
|
357 bool operator()(Event const&,FSM&,STATE& )
|
Chris@16
|
358 {
|
Chris@16
|
359 // does nothing
|
Chris@16
|
360 return true;
|
Chris@16
|
361 }
|
Chris@16
|
362 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
363 bool operator()(EVT const& ,FSM& ,SourceState& ,TargetState&)const
|
Chris@16
|
364 {
|
Chris@16
|
365 // does nothing
|
Chris@16
|
366 return true;
|
Chris@16
|
367 }
|
Chris@16
|
368 };
|
Chris@16
|
369 NoAction const no_action = NoAction();
|
Chris@16
|
370
|
Chris@16
|
371 struct fsm_artefact_tag {};
|
Chris@16
|
372 template <class Index=void>
|
Chris@16
|
373 struct GetSource_ : euml_action<GetSource_<Index> >
|
Chris@16
|
374 {
|
Chris@16
|
375 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
376 struct transition_action_result
|
Chris@16
|
377 {
|
Chris@16
|
378 typedef typename ::boost::fusion::result_of::at_key<typename SourceState::attributes_type,
|
Chris@16
|
379 Index >::type type;
|
Chris@16
|
380 };
|
Chris@16
|
381 typedef ::boost::mpl::set<action_tag> tag_type;
|
Chris@16
|
382
|
Chris@16
|
383 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
384 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
385 operator()(EVT const& ,FSM& ,SourceState& src,TargetState&)const
|
Chris@16
|
386 {
|
Chris@16
|
387 return src.get_attribute(Index());
|
Chris@16
|
388 }
|
Chris@16
|
389 };
|
Chris@16
|
390 template<>
|
Chris@16
|
391 struct GetSource_<void> : euml_action<GetSource_<void> >
|
Chris@16
|
392 {
|
Chris@16
|
393 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
394 struct transition_action_result
|
Chris@16
|
395 {
|
Chris@16
|
396 typedef SourceState& type;
|
Chris@16
|
397 };
|
Chris@16
|
398 typedef ::boost::mpl::set<action_tag> tag_type;
|
Chris@16
|
399
|
Chris@16
|
400 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
401 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
402 operator()(EVT const& , FSM&,SourceState& src,TargetState& )const
|
Chris@16
|
403 {
|
Chris@16
|
404 return src;
|
Chris@16
|
405 }
|
Chris@16
|
406 };
|
Chris@16
|
407 struct GetSource_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetSource_Helper, boost::msm::sm_domain>
|
Chris@16
|
408 {
|
Chris@16
|
409 GetSource_Helper(){}
|
Chris@16
|
410 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
411 #ifdef BOOST_MSVC
|
Chris@16
|
412 ,class Arg6
|
Chris@16
|
413 #endif
|
Chris@16
|
414 >
|
Chris@16
|
415 struct In
|
Chris@16
|
416 {
|
Chris@16
|
417 typedef GetSource_<Arg1> type;
|
Chris@16
|
418 };
|
Chris@16
|
419 };
|
Chris@16
|
420 GetSource_Helper const source_ = GetSource_Helper();
|
Chris@16
|
421
|
Chris@16
|
422 template <class Index=void>
|
Chris@16
|
423 struct GetTarget_ : euml_action<GetTarget_<Index> >
|
Chris@16
|
424 {
|
Chris@16
|
425 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
426 struct transition_action_result
|
Chris@16
|
427 {
|
Chris@16
|
428 typedef typename ::boost::fusion::result_of::at_key<typename TargetState::attributes_type,
|
Chris@16
|
429 Index >::type type;
|
Chris@16
|
430 };
|
Chris@16
|
431 typedef ::boost::mpl::set<action_tag> tag_type;
|
Chris@16
|
432
|
Chris@16
|
433 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
434 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
435 operator()(EVT const& ,FSM& ,SourceState& ,TargetState& tgt)const
|
Chris@16
|
436 {
|
Chris@16
|
437 return tgt.get_attribute(Index());
|
Chris@16
|
438 }
|
Chris@16
|
439 };
|
Chris@16
|
440 template<>
|
Chris@16
|
441 struct GetTarget_<void> : euml_action<GetTarget_<void> >
|
Chris@16
|
442 {
|
Chris@16
|
443 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
444 struct transition_action_result
|
Chris@16
|
445 {
|
Chris@16
|
446 typedef TargetState& type;
|
Chris@16
|
447 };
|
Chris@16
|
448 typedef ::boost::mpl::set<action_tag> tag_type;
|
Chris@16
|
449
|
Chris@16
|
450 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
451 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
452 operator()(EVT const& , FSM&,SourceState& ,TargetState& tgt)const
|
Chris@16
|
453 {
|
Chris@16
|
454 return tgt;
|
Chris@16
|
455 }
|
Chris@16
|
456 };
|
Chris@16
|
457 struct GetTarget_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetTarget_Helper, boost::msm::sm_domain>
|
Chris@16
|
458 {
|
Chris@16
|
459 GetTarget_Helper(){}
|
Chris@16
|
460 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
461 #ifdef BOOST_MSVC
|
Chris@16
|
462 ,class Arg6
|
Chris@16
|
463 #endif
|
Chris@16
|
464 >
|
Chris@16
|
465 struct In
|
Chris@16
|
466 {
|
Chris@16
|
467 typedef GetTarget_<Arg1> type;
|
Chris@16
|
468 };
|
Chris@16
|
469 };
|
Chris@16
|
470 GetTarget_Helper const target_ = GetTarget_Helper();
|
Chris@16
|
471
|
Chris@16
|
472 template <class Index=void>
|
Chris@16
|
473 struct GetState_ : euml_action<GetState_<Index> >
|
Chris@16
|
474 {
|
Chris@16
|
475 template <class Event,class FSM,class STATE >
|
Chris@16
|
476 struct state_action_result
|
Chris@16
|
477 {
|
Chris@16
|
478 typedef typename ::boost::fusion::result_of::at_key<typename STATE::attributes_type,
|
Chris@16
|
479 Index >::type type;
|
Chris@16
|
480 };
|
Chris@16
|
481 typedef ::boost::mpl::set<state_action_tag> tag_type;
|
Chris@16
|
482
|
Chris@16
|
483 template <class Event,class FSM,class STATE>
|
Chris@16
|
484 typename state_action_result<Event,FSM,STATE>::type
|
Chris@16
|
485 operator()(Event const&,FSM& ,STATE& state )
|
Chris@16
|
486 {
|
Chris@16
|
487 return state.get_attribute(Index());
|
Chris@16
|
488 }
|
Chris@16
|
489 };
|
Chris@16
|
490 template<>
|
Chris@16
|
491 struct GetState_<void> : euml_action<GetState_<void> >
|
Chris@16
|
492 {
|
Chris@16
|
493 using euml_action<GetState_ >::operator=;
|
Chris@16
|
494
|
Chris@16
|
495 template <class Event,class FSM,class STATE >
|
Chris@16
|
496 struct state_action_result
|
Chris@16
|
497 {
|
Chris@16
|
498 typedef STATE& type;
|
Chris@16
|
499 };
|
Chris@16
|
500 typedef ::boost::mpl::set<state_action_tag> tag_type;
|
Chris@16
|
501
|
Chris@16
|
502 template <class Event,class FSM,class STATE>
|
Chris@16
|
503 typename state_action_result<Event,FSM,STATE>::type
|
Chris@16
|
504 operator()(Event const&,FSM& ,STATE& state )
|
Chris@16
|
505 {
|
Chris@16
|
506 return state;
|
Chris@16
|
507 }
|
Chris@16
|
508 };
|
Chris@16
|
509 struct GetState_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetState_Helper, boost::msm::sm_domain>
|
Chris@16
|
510 {
|
Chris@16
|
511 GetState_Helper(){}
|
Chris@16
|
512 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
513 #ifdef BOOST_MSVC
|
Chris@16
|
514 ,class Arg6
|
Chris@16
|
515 #endif
|
Chris@16
|
516 >
|
Chris@16
|
517 struct In
|
Chris@16
|
518 {
|
Chris@16
|
519 typedef GetState_<Arg1> type;
|
Chris@16
|
520 };
|
Chris@16
|
521 };
|
Chris@16
|
522 GetState_Helper const state_ = GetState_Helper();
|
Chris@16
|
523
|
Chris@16
|
524 template <class Index=void>
|
Chris@16
|
525 struct GetEvent_ : euml_action<GetEvent_<Index> >
|
Chris@16
|
526 {
|
Chris@16
|
527 template <class Event,class FSM,class STATE >
|
Chris@16
|
528 struct state_action_result
|
Chris@16
|
529 {
|
Chris@16
|
530 typedef typename ::boost::add_const<
|
Chris@16
|
531 typename ::boost::fusion::result_of::at_key<typename Event::attributes_type,
|
Chris@16
|
532 Index >::type>::type type;
|
Chris@16
|
533 };
|
Chris@16
|
534 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
535 struct transition_action_result
|
Chris@16
|
536 {
|
Chris@16
|
537 typedef typename ::boost::add_const<
|
Chris@16
|
538 typename ::boost::fusion::result_of::at_key<typename EVT::attributes_type,
|
Chris@16
|
539 Index >::type>::type type;
|
Chris@16
|
540 };
|
Chris@16
|
541 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
542
|
Chris@16
|
543 template <class Event,class FSM,class STATE>
|
Chris@16
|
544 typename state_action_result<Event,FSM,STATE>::type
|
Chris@16
|
545 operator()(Event const& evt,FSM& ,STATE& )
|
Chris@16
|
546 {
|
Chris@16
|
547 return evt.get_attribute(Index());
|
Chris@16
|
548 }
|
Chris@16
|
549 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
550 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
551 operator()(EVT const& evt ,FSM& ,SourceState& ,TargetState&)const
|
Chris@16
|
552 {
|
Chris@16
|
553 return evt.get_attribute(Index());
|
Chris@16
|
554 }
|
Chris@16
|
555 };
|
Chris@16
|
556 template <>
|
Chris@16
|
557 struct GetEvent_<void> : euml_action<GetEvent_<void> >
|
Chris@16
|
558 {
|
Chris@16
|
559 template <class Event,class FSM,class STATE >
|
Chris@16
|
560 struct state_action_result
|
Chris@16
|
561 {
|
Chris@16
|
562 typedef Event const& type;
|
Chris@16
|
563 };
|
Chris@16
|
564 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
565 struct transition_action_result
|
Chris@16
|
566 {
|
Chris@16
|
567 typedef EVT const& type;
|
Chris@16
|
568 };
|
Chris@16
|
569 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
570
|
Chris@16
|
571 template <class Event,class FSM,class STATE>
|
Chris@16
|
572 typename state_action_result<Event,FSM,STATE>::type
|
Chris@16
|
573 operator()(Event const& evt,FSM& ,STATE& )
|
Chris@16
|
574 {
|
Chris@16
|
575 return evt;
|
Chris@16
|
576 }
|
Chris@16
|
577 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
578 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
579 operator()(EVT const& evt ,FSM& ,SourceState& ,TargetState&)const
|
Chris@16
|
580 {
|
Chris@16
|
581 return evt;
|
Chris@16
|
582 }
|
Chris@16
|
583 };
|
Chris@16
|
584 struct GetEvent_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetEvent_Helper, boost::msm::sm_domain>
|
Chris@16
|
585 {
|
Chris@16
|
586 GetEvent_Helper(){}
|
Chris@16
|
587 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
588 #ifdef BOOST_MSVC
|
Chris@16
|
589 ,class Arg6
|
Chris@16
|
590 #endif
|
Chris@16
|
591 >
|
Chris@16
|
592 struct In
|
Chris@16
|
593 {
|
Chris@16
|
594 typedef GetEvent_<Arg1> type;
|
Chris@16
|
595 };
|
Chris@16
|
596 };
|
Chris@16
|
597 GetEvent_Helper const event_ = GetEvent_Helper();
|
Chris@16
|
598
|
Chris@16
|
599 template <class Index=void>
|
Chris@16
|
600 struct GetFsm_ : euml_action<GetFsm_<Index> >
|
Chris@16
|
601 {
|
Chris@16
|
602 template <class Event,class FSM,class STATE >
|
Chris@16
|
603 struct state_action_result
|
Chris@16
|
604 {
|
Chris@16
|
605 typedef typename ::boost::fusion::result_of::at_key<typename FSM::attributes_type,
|
Chris@16
|
606 Index >::type type;
|
Chris@16
|
607 };
|
Chris@16
|
608 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
609 struct transition_action_result
|
Chris@16
|
610 {
|
Chris@16
|
611 typedef typename ::boost::fusion::result_of::at_key<typename FSM::attributes_type,
|
Chris@16
|
612 Index >::type type;
|
Chris@16
|
613 };
|
Chris@16
|
614 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
615
|
Chris@16
|
616 template <class Event,class FSM,class STATE>
|
Chris@16
|
617 typename state_action_result<Event,FSM,STATE>::type
|
Chris@16
|
618 operator()(Event const&,FSM& fsm,STATE& )
|
Chris@16
|
619 {
|
Chris@16
|
620 return fsm.get_attribute(Index());
|
Chris@16
|
621 }
|
Chris@16
|
622 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
623 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
624 operator()(EVT const& ,FSM& fsm,SourceState& ,TargetState&)const
|
Chris@16
|
625 {
|
Chris@16
|
626 return fsm.get_attribute(Index());
|
Chris@16
|
627 }
|
Chris@16
|
628 };
|
Chris@16
|
629 template<>
|
Chris@16
|
630 struct GetFsm_<void> : euml_action<GetFsm_<void> >
|
Chris@16
|
631 {
|
Chris@16
|
632 using euml_action<GetFsm_>::operator=;
|
Chris@16
|
633
|
Chris@16
|
634 template <class Event,class FSM,class STATE >
|
Chris@16
|
635 struct state_action_result
|
Chris@16
|
636 {
|
Chris@16
|
637 typedef FSM& type;
|
Chris@16
|
638 };
|
Chris@16
|
639 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
640 struct transition_action_result
|
Chris@16
|
641 {
|
Chris@16
|
642 typedef FSM& type;
|
Chris@16
|
643 };
|
Chris@16
|
644 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
645
|
Chris@16
|
646 template <class Event,class FSM,class STATE>
|
Chris@16
|
647 typename state_action_result<Event,FSM,STATE>::type
|
Chris@16
|
648 operator()(Event const&,FSM& fsm,STATE& )
|
Chris@16
|
649 {
|
Chris@16
|
650 return fsm;
|
Chris@16
|
651 }
|
Chris@16
|
652 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
653 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
654 operator()(EVT const& ,FSM& fsm,SourceState& ,TargetState&)const
|
Chris@16
|
655 {
|
Chris@16
|
656 return fsm;
|
Chris@16
|
657 }
|
Chris@16
|
658 };
|
Chris@16
|
659 struct GetFsm_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetFsm_Helper, boost::msm::sm_domain>
|
Chris@16
|
660 {
|
Chris@16
|
661 GetFsm_Helper(){}
|
Chris@16
|
662 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
663 #ifdef BOOST_MSVC
|
Chris@16
|
664 ,class Arg6
|
Chris@16
|
665 #endif
|
Chris@16
|
666 >
|
Chris@16
|
667 struct In
|
Chris@16
|
668 {
|
Chris@16
|
669 typedef GetFsm_<Arg1> type;
|
Chris@16
|
670 };
|
Chris@16
|
671 };
|
Chris@16
|
672 GetFsm_Helper const fsm_ = GetFsm_Helper();
|
Chris@16
|
673
|
Chris@16
|
674 template <class StateName,class Param1>
|
Chris@16
|
675 struct SubState_ : euml_action<SubState_<StateName, Param1> >
|
Chris@16
|
676 {
|
Chris@16
|
677 template <class Event,class FSM,class STATE >
|
Chris@16
|
678 struct state_action_result
|
Chris@16
|
679 {
|
Chris@16
|
680 typedef StateName& type;
|
Chris@16
|
681 };
|
Chris@16
|
682 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
683 struct transition_action_result
|
Chris@16
|
684 {
|
Chris@16
|
685 typedef StateName& type;
|
Chris@16
|
686 };
|
Chris@16
|
687
|
Chris@16
|
688 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
689
|
Chris@16
|
690 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
691 StateName& operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
692 {
|
Chris@16
|
693 return (Param1()(evt,fsm,src,tgt)).template get_state<StateName&>();
|
Chris@16
|
694 }
|
Chris@16
|
695 template <class Event,class FSM,class STATE>
|
Chris@16
|
696 StateName& operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
697 {
|
Chris@16
|
698 return (Param1()(evt,fsm,state)).template get_state<StateName&>();
|
Chris@16
|
699 }
|
Chris@16
|
700 };
|
Chris@16
|
701 template <class StateName>
|
Chris@16
|
702 struct SubState_ <StateName,void>
|
Chris@16
|
703 : euml_action<SubState_<StateName, void > >
|
Chris@16
|
704 {
|
Chris@16
|
705 template <class Event,class FSM,class STATE >
|
Chris@16
|
706 struct state_action_result
|
Chris@16
|
707 {
|
Chris@16
|
708 typedef StateName& type;
|
Chris@16
|
709 };
|
Chris@16
|
710 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
711 struct transition_action_result
|
Chris@16
|
712 {
|
Chris@16
|
713 typedef StateName& type;
|
Chris@16
|
714 };
|
Chris@16
|
715
|
Chris@16
|
716 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
717
|
Chris@16
|
718 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
719 StateName& operator()(EVT const&,FSM& fsm,SourceState& ,TargetState& )const
|
Chris@16
|
720 {
|
Chris@16
|
721 return fsm.template get_state<StateName&>();
|
Chris@16
|
722 }
|
Chris@16
|
723 template <class Event,class FSM,class STATE>
|
Chris@16
|
724 StateName& operator()(Event const& ,FSM& fsm,STATE& )const
|
Chris@16
|
725 {
|
Chris@16
|
726 return fsm.template get_state<StateName&>();
|
Chris@16
|
727 }
|
Chris@16
|
728 };
|
Chris@16
|
729
|
Chris@16
|
730 struct SubState_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, SubState_Helper, boost::msm::sm_domain>
|
Chris@16
|
731 {
|
Chris@16
|
732 SubState_Helper(){}
|
Chris@16
|
733 using proto::extends< proto::terminal<fsm_artefact_tag>::type, SubState_Helper, boost::msm::sm_domain>::operator=;
|
Chris@16
|
734 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
735 #ifdef BOOST_MSVC
|
Chris@16
|
736 ,class Arg6
|
Chris@16
|
737 #endif
|
Chris@16
|
738 >
|
Chris@16
|
739 struct In
|
Chris@16
|
740 {
|
Chris@16
|
741 typedef SubState_<Arg1,Arg2> type;
|
Chris@16
|
742 };
|
Chris@16
|
743 };
|
Chris@16
|
744 SubState_Helper const substate_ = SubState_Helper();
|
Chris@16
|
745
|
Chris@16
|
746 template <class Target,class Index>
|
Chris@16
|
747 struct GetAttribute_ : euml_action<GetAttribute_<Target, Index> >
|
Chris@16
|
748 {
|
Chris@16
|
749 using euml_action<GetAttribute_<Target,Index> >::operator=;
|
Chris@16
|
750 template <class Event,class FSM,class STATE >
|
Chris@16
|
751 struct state_action_result
|
Chris@16
|
752 {
|
Chris@16
|
753 typedef typename
|
Chris@16
|
754 ::boost::fusion::result_of::at_key<
|
Chris@16
|
755 typename get_attributes_type<
|
Chris@16
|
756 typename ::boost::remove_reference<
|
Chris@16
|
757 typename get_result_type2<Target,Event,FSM,STATE>::type>::type>::type,
|
Chris@16
|
758 Index >::type type;
|
Chris@16
|
759 };
|
Chris@16
|
760 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
761 struct transition_action_result
|
Chris@16
|
762 {
|
Chris@16
|
763 typedef typename
|
Chris@16
|
764 ::boost::fusion::result_of::at_key<
|
Chris@16
|
765 typename get_attributes_type<
|
Chris@16
|
766 typename ::boost::remove_reference<
|
Chris@16
|
767 typename get_result_type<Target,EVT,FSM,SourceState,TargetState>::type>::type>::type,
|
Chris@16
|
768 Index >::type type;
|
Chris@16
|
769 };
|
Chris@16
|
770
|
Chris@16
|
771 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
772
|
Chris@16
|
773 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
774 typename ::boost::enable_if<
|
Chris@16
|
775 typename ::boost::mpl::has_key<
|
Chris@16
|
776 typename Target::tag_type,action_tag>::type,
|
Chris@16
|
777 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type
|
Chris@16
|
778 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
779 {
|
Chris@16
|
780 return (Target()(evt,fsm,src,tgt)).get_attribute(Index());
|
Chris@16
|
781 }
|
Chris@16
|
782 template <class Event,class FSM,class STATE>
|
Chris@16
|
783 typename ::boost::enable_if<
|
Chris@16
|
784 typename ::boost::mpl::has_key<
|
Chris@16
|
785 typename Target::tag_type,state_action_tag>::type,
|
Chris@16
|
786 typename state_action_result<Event,FSM,STATE>::type >::type
|
Chris@16
|
787 operator()(Event const& evt,FSM& fsm,STATE& state )const
|
Chris@16
|
788 {
|
Chris@16
|
789 return (Target()(evt,fsm,state)).get_attribute(Index());
|
Chris@16
|
790 }
|
Chris@16
|
791 };
|
Chris@16
|
792
|
Chris@16
|
793 struct GetAttribute_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, GetAttribute_Helper, boost::msm::sm_domain>
|
Chris@16
|
794 {
|
Chris@16
|
795 GetAttribute_Helper(){}
|
Chris@16
|
796 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
797 #ifdef BOOST_MSVC
|
Chris@16
|
798 ,class Arg6
|
Chris@16
|
799 #endif
|
Chris@16
|
800 >
|
Chris@16
|
801 struct In
|
Chris@16
|
802 {
|
Chris@16
|
803 typedef GetAttribute_<Arg1,Arg2> type;
|
Chris@16
|
804 };
|
Chris@16
|
805 };
|
Chris@16
|
806 GetAttribute_Helper const attribute_ = GetAttribute_Helper();
|
Chris@16
|
807
|
Chris@16
|
808 template <class Index>
|
Chris@16
|
809 struct Source_ : euml_action<Source_<Index> >
|
Chris@16
|
810 {
|
Chris@16
|
811 using euml_action<Source_<Index> >::operator=;
|
Chris@16
|
812 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
813 struct transition_action_result
|
Chris@16
|
814 {
|
Chris@16
|
815 typedef typename
|
Chris@16
|
816 ::boost::fusion::result_of::at_key<typename SourceState::attributes_type,
|
Chris@16
|
817 Index >::type type;
|
Chris@16
|
818 };
|
Chris@16
|
819 typedef ::boost::mpl::set<action_tag> tag_type;
|
Chris@16
|
820
|
Chris@16
|
821 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
822 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
823 operator()(EVT const& , FSM&,SourceState& src,TargetState& )const
|
Chris@16
|
824 {
|
Chris@16
|
825 return src.get_attribute(Index());
|
Chris@16
|
826 }
|
Chris@16
|
827 };
|
Chris@16
|
828 template <class Index>
|
Chris@16
|
829 struct Target_ : euml_action<Target_<Index> >
|
Chris@16
|
830 {
|
Chris@16
|
831 using euml_action<Target_<Index> >::operator=;
|
Chris@16
|
832 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
833 struct transition_action_result
|
Chris@16
|
834 {
|
Chris@16
|
835 typedef typename
|
Chris@16
|
836 ::boost::fusion::result_of::at_key<typename TargetState::attributes_type,
|
Chris@16
|
837 Index >::type type;
|
Chris@16
|
838 };
|
Chris@16
|
839 typedef ::boost::mpl::set<action_tag> tag_type;
|
Chris@16
|
840
|
Chris@16
|
841 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
842 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
843 operator()(EVT const& ,FSM& ,SourceState& ,TargetState& tgt)const
|
Chris@16
|
844 {
|
Chris@16
|
845 return tgt.get_attribute(Index());
|
Chris@16
|
846 }
|
Chris@16
|
847 };
|
Chris@16
|
848 template <class Index>
|
Chris@16
|
849 struct State_ : euml_action<State_<Index> >
|
Chris@16
|
850 {
|
Chris@16
|
851 using euml_action<State_<Index> >::operator=;
|
Chris@16
|
852
|
Chris@16
|
853 template <class Event,class FSM,class STATE >
|
Chris@16
|
854 struct state_action_result
|
Chris@16
|
855 {
|
Chris@16
|
856 typedef typename
|
Chris@16
|
857 ::boost::fusion::result_of::at_key<typename STATE::attributes_type,
|
Chris@16
|
858 Index >::type type;
|
Chris@16
|
859 };
|
Chris@16
|
860 typedef ::boost::mpl::set<state_action_tag> tag_type;
|
Chris@16
|
861
|
Chris@16
|
862 template <class Event,class FSM,class STATE>
|
Chris@16
|
863 typename state_action_result<Event,FSM,STATE>::type
|
Chris@16
|
864 operator()(Event const&,FSM& ,STATE& state )
|
Chris@16
|
865 {
|
Chris@16
|
866 return state.get_attribute(Index());
|
Chris@16
|
867 }
|
Chris@16
|
868 };
|
Chris@16
|
869 template <class Index>
|
Chris@16
|
870 struct Event_ : euml_action<Event_<Index> >
|
Chris@16
|
871 {
|
Chris@16
|
872 using euml_action<Event_<Index> >::operator=;
|
Chris@16
|
873
|
Chris@16
|
874 template <class Event,class FSM,class STATE >
|
Chris@16
|
875 struct state_action_result
|
Chris@16
|
876 {
|
Chris@16
|
877 typedef typename ::boost::add_const<
|
Chris@16
|
878 typename ::boost::fusion::result_of::at_key<typename Event::attributes_type,
|
Chris@16
|
879 Index >::type>::type type;
|
Chris@16
|
880 };
|
Chris@16
|
881 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
882 struct transition_action_result
|
Chris@16
|
883 {
|
Chris@16
|
884 typedef typename ::boost::add_const<
|
Chris@16
|
885 typename ::boost::fusion::result_of::at_key<typename EVT::attributes_type,
|
Chris@16
|
886 Index >::type>::type type;
|
Chris@16
|
887 };
|
Chris@16
|
888 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
889
|
Chris@16
|
890 template <class Event,class FSM,class STATE>
|
Chris@16
|
891 typename state_action_result<Event,FSM,STATE>::type
|
Chris@16
|
892 operator()(Event const& evt,FSM& ,STATE& )
|
Chris@16
|
893 {
|
Chris@16
|
894 return evt.get_attribute(Index());
|
Chris@16
|
895 }
|
Chris@16
|
896 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
897 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
898 operator()(EVT const& evt ,FSM& ,SourceState& ,TargetState&)const
|
Chris@16
|
899 {
|
Chris@16
|
900 return evt.get_attribute(Index());
|
Chris@16
|
901 }
|
Chris@16
|
902 };
|
Chris@16
|
903 template <class StateType,class Index>
|
Chris@16
|
904 struct State_Attribute_ : euml_action<State_Attribute_<StateType,Index> >
|
Chris@16
|
905 {
|
Chris@16
|
906 using euml_action<State_Attribute_<StateType,Index> >::operator=;
|
Chris@16
|
907
|
Chris@16
|
908 template <class Event,class FSM,class STATE >
|
Chris@16
|
909 struct state_action_result
|
Chris@16
|
910 {
|
Chris@16
|
911 typedef typename
|
Chris@16
|
912 ::boost::fusion::result_of::at_key<typename StateType::attributes_type,
|
Chris@16
|
913 Index >::type type;
|
Chris@16
|
914 };
|
Chris@16
|
915 typedef ::boost::mpl::set<state_action_tag> tag_type;
|
Chris@16
|
916
|
Chris@16
|
917 template <class Event,class FSM,class STATE>
|
Chris@16
|
918 typename state_action_result<Event,FSM,STATE>::type
|
Chris@16
|
919 operator()(Event const&,FSM& fsm,STATE& )
|
Chris@16
|
920 {
|
Chris@16
|
921 return fsm.template get_state<StateType&>().get_attribute(Index());
|
Chris@16
|
922 }
|
Chris@16
|
923 };
|
Chris@16
|
924
|
Chris@16
|
925 template <class Index>
|
Chris@16
|
926 struct Fsm_ : euml_action<Fsm_<Index> >
|
Chris@16
|
927 {
|
Chris@16
|
928 using euml_action<Fsm_<Index> >::operator=;
|
Chris@16
|
929
|
Chris@16
|
930 template <class Event,class FSM,class STATE >
|
Chris@16
|
931 struct state_action_result
|
Chris@16
|
932 {
|
Chris@16
|
933 typedef typename
|
Chris@16
|
934 ::boost::fusion::result_of::at_key<typename FSM::attributes_type,
|
Chris@16
|
935 Index >::type type;
|
Chris@16
|
936 };
|
Chris@16
|
937 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
938 struct transition_action_result
|
Chris@16
|
939 {
|
Chris@16
|
940 typedef typename
|
Chris@16
|
941 ::boost::fusion::result_of::at_key<typename FSM::attributes_type,
|
Chris@16
|
942 Index >::type type;
|
Chris@16
|
943 };
|
Chris@16
|
944 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
945
|
Chris@16
|
946 template <class Event,class FSM,class STATE>
|
Chris@16
|
947 typename state_action_result<Event,FSM,STATE>::type
|
Chris@16
|
948 operator()(Event const&,FSM& fsm,STATE& )
|
Chris@16
|
949 {
|
Chris@16
|
950 return fsm.get_attribute(Index());
|
Chris@16
|
951 }
|
Chris@16
|
952 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
953 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type
|
Chris@101
|
954 operator()(EVT const& ,FSM& fsm,SourceState& ,TargetState&)const
|
Chris@16
|
955 {
|
Chris@16
|
956 return fsm.get_attribute(Index());
|
Chris@16
|
957 }
|
Chris@16
|
958 };
|
Chris@16
|
959
|
Chris@16
|
960 struct True_ : euml::euml_action<True_>
|
Chris@16
|
961 {
|
Chris@16
|
962 using euml_action<True_>::operator=;
|
Chris@16
|
963 True_(){}
|
Chris@16
|
964
|
Chris@16
|
965 template <class Event,class FSM,class STATE >
|
Chris@16
|
966 struct state_action_result
|
Chris@16
|
967 {
|
Chris@16
|
968 typedef bool type;
|
Chris@16
|
969 };
|
Chris@16
|
970 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
971 struct transition_action_result
|
Chris@16
|
972 {
|
Chris@16
|
973 typedef bool type;
|
Chris@16
|
974 };
|
Chris@16
|
975 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
976
|
Chris@16
|
977 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
978 bool operator()(EVT const&,FSM&,SourceState& ,TargetState& )
|
Chris@16
|
979 {
|
Chris@16
|
980 return true;
|
Chris@16
|
981 }
|
Chris@16
|
982 template <class Event,class FSM,class STATE>
|
Chris@16
|
983 bool operator()(Event const&,FSM&,STATE& )
|
Chris@16
|
984 {
|
Chris@16
|
985 return true;
|
Chris@16
|
986 }
|
Chris@16
|
987 };
|
Chris@16
|
988 True_ const true_ = True_();
|
Chris@16
|
989
|
Chris@16
|
990 struct False_ : euml::euml_action<False_>
|
Chris@16
|
991 {
|
Chris@16
|
992 using euml_action<False_>::operator=;
|
Chris@16
|
993 False_(){}
|
Chris@16
|
994
|
Chris@16
|
995 template <class Event,class FSM,class STATE >
|
Chris@16
|
996 struct state_action_result
|
Chris@16
|
997 {
|
Chris@16
|
998 typedef bool type;
|
Chris@16
|
999 };
|
Chris@16
|
1000 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1001 struct transition_action_result
|
Chris@16
|
1002 {
|
Chris@16
|
1003 typedef bool type;
|
Chris@16
|
1004 };
|
Chris@16
|
1005 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1006
|
Chris@16
|
1007 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1008 bool operator()(EVT const&,FSM&,SourceState& ,TargetState& )
|
Chris@16
|
1009 {
|
Chris@16
|
1010 return false;
|
Chris@16
|
1011 }
|
Chris@16
|
1012 template <class Event,class FSM,class STATE>
|
Chris@16
|
1013 bool operator()(Event const&,FSM&,STATE& )
|
Chris@16
|
1014 {
|
Chris@16
|
1015 return false;
|
Chris@16
|
1016 }
|
Chris@16
|
1017 };
|
Chris@16
|
1018 False_ const false_ = False_();
|
Chris@16
|
1019
|
Chris@16
|
1020 template <int Val>
|
Chris@16
|
1021 struct Int_ : euml_action<Int_<Val> >
|
Chris@16
|
1022 {
|
Chris@16
|
1023 using euml_action<Int_<Val> >::operator=;
|
Chris@16
|
1024 typedef ::boost::mpl::int_<Val> value_type;
|
Chris@16
|
1025 enum {value = Val};
|
Chris@16
|
1026
|
Chris@16
|
1027 template <class Event,class FSM,class STATE >
|
Chris@16
|
1028 struct state_action_result
|
Chris@16
|
1029 {
|
Chris@16
|
1030 typedef int type;
|
Chris@16
|
1031 };
|
Chris@16
|
1032 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1033 struct transition_action_result
|
Chris@16
|
1034 {
|
Chris@16
|
1035 typedef int type;
|
Chris@16
|
1036 };
|
Chris@16
|
1037 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1038
|
Chris@16
|
1039 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1040 int operator()(EVT const& , FSM& ,SourceState& ,TargetState& )
|
Chris@16
|
1041 {
|
Chris@16
|
1042 return Val;
|
Chris@16
|
1043 }
|
Chris@16
|
1044 template <class Event,class FSM,class STATE>
|
Chris@16
|
1045 int operator()(Event const& ,FSM& ,STATE& )
|
Chris@16
|
1046 {
|
Chris@16
|
1047 return Val;
|
Chris@16
|
1048 }
|
Chris@16
|
1049 };
|
Chris@16
|
1050
|
Chris@16
|
1051 template <char Val>
|
Chris@16
|
1052 struct Char_ : euml_action<Char_<Val> >
|
Chris@16
|
1053 {
|
Chris@16
|
1054 using euml_action<Char_<Val> >::operator=;
|
Chris@16
|
1055
|
Chris@16
|
1056 template <class Event,class FSM,class STATE >
|
Chris@16
|
1057 struct state_action_result
|
Chris@16
|
1058 {
|
Chris@16
|
1059 typedef char type;
|
Chris@16
|
1060 };
|
Chris@16
|
1061 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1062 struct transition_action_result
|
Chris@16
|
1063 {
|
Chris@16
|
1064 typedef char type;
|
Chris@16
|
1065 };
|
Chris@16
|
1066 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1067
|
Chris@16
|
1068 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1069 char operator()(EVT const& , FSM& ,SourceState& ,TargetState& )
|
Chris@16
|
1070 {
|
Chris@16
|
1071 return Val;
|
Chris@16
|
1072 }
|
Chris@16
|
1073 template <class Event,class FSM,class STATE>
|
Chris@16
|
1074 char operator()(Event const& ,FSM& ,STATE& )
|
Chris@16
|
1075 {
|
Chris@16
|
1076 return Val;
|
Chris@16
|
1077 }
|
Chris@16
|
1078 };
|
Chris@16
|
1079
|
Chris@16
|
1080 template <size_t Val>
|
Chris@16
|
1081 struct Size_t_ : euml_action<Size_t_<Val> >
|
Chris@16
|
1082 {
|
Chris@16
|
1083 using euml_action<Size_t_<Val> >::operator=;
|
Chris@16
|
1084
|
Chris@16
|
1085 template <class Event,class FSM,class STATE >
|
Chris@16
|
1086 struct state_action_result
|
Chris@16
|
1087 {
|
Chris@16
|
1088 typedef size_t type;
|
Chris@16
|
1089 };
|
Chris@16
|
1090 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1091 struct transition_action_result
|
Chris@16
|
1092 {
|
Chris@16
|
1093 typedef size_t type;
|
Chris@16
|
1094 };
|
Chris@16
|
1095 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1096
|
Chris@16
|
1097 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1098 size_t operator()(EVT const& , FSM& ,SourceState& ,TargetState& )
|
Chris@16
|
1099 {
|
Chris@16
|
1100 return Val;
|
Chris@16
|
1101 }
|
Chris@16
|
1102 template <class Event,class FSM,class STATE>
|
Chris@16
|
1103 size_t operator()(Event const& ,FSM& ,STATE& )
|
Chris@16
|
1104 {
|
Chris@16
|
1105 return Val;
|
Chris@16
|
1106 }
|
Chris@16
|
1107 };
|
Chris@16
|
1108
|
Chris@16
|
1109 #if BOOST_VERSION >= 104000
|
Chris@16
|
1110
|
Chris@16
|
1111 template <class T>
|
Chris@16
|
1112 struct String_ : euml_action<String_<T> >
|
Chris@16
|
1113 {
|
Chris@16
|
1114 using euml_action<String_<T> >::operator=;
|
Chris@16
|
1115
|
Chris@16
|
1116 template <class Event,class FSM,class STATE >
|
Chris@16
|
1117 struct state_action_result
|
Chris@16
|
1118 {
|
Chris@16
|
1119 typedef char const* type;
|
Chris@16
|
1120 };
|
Chris@16
|
1121 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1122 struct transition_action_result
|
Chris@16
|
1123 {
|
Chris@16
|
1124 typedef char const* type;
|
Chris@16
|
1125 };
|
Chris@16
|
1126 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1127
|
Chris@16
|
1128 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1129 char const* operator()(EVT const& , FSM& ,SourceState& ,TargetState& )
|
Chris@16
|
1130 {
|
Chris@16
|
1131 return ::boost::mpl::c_str<T>::value;
|
Chris@16
|
1132 }
|
Chris@16
|
1133 template <class Event,class FSM,class STATE>
|
Chris@16
|
1134 char const* operator()(Event const& ,FSM& ,STATE& )
|
Chris@16
|
1135 {
|
Chris@16
|
1136 return ::boost::mpl::c_str<T>::value;
|
Chris@16
|
1137 }
|
Chris@16
|
1138 };
|
Chris@16
|
1139 #endif
|
Chris@16
|
1140
|
Chris@16
|
1141
|
Chris@16
|
1142 template <class T>
|
Chris@16
|
1143 struct Predicate_ : euml_action<Predicate_<T> >
|
Chris@16
|
1144 {
|
Chris@16
|
1145 using euml_action<Predicate_<T> >::operator=;
|
Chris@16
|
1146
|
Chris@16
|
1147 template <class Event,class FSM,class STATE >
|
Chris@16
|
1148 struct state_action_result
|
Chris@16
|
1149 {
|
Chris@16
|
1150 typedef T type;
|
Chris@16
|
1151 };
|
Chris@16
|
1152 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1153 struct transition_action_result
|
Chris@16
|
1154 {
|
Chris@16
|
1155 typedef T type;
|
Chris@16
|
1156 };
|
Chris@16
|
1157 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1158
|
Chris@16
|
1159 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1160 T operator()(EVT const& , FSM& ,SourceState& ,TargetState& )
|
Chris@16
|
1161 {
|
Chris@16
|
1162 return T();
|
Chris@16
|
1163 }
|
Chris@16
|
1164 template <class Event,class FSM,class STATE>
|
Chris@16
|
1165 T operator()(Event const& ,FSM& ,STATE& )
|
Chris@16
|
1166 {
|
Chris@16
|
1167 return T();
|
Chris@16
|
1168 }
|
Chris@16
|
1169 };
|
Chris@16
|
1170
|
Chris@16
|
1171 template <class ToProcessEvt,class Param1, class Param2, class Param3, class Param4>
|
Chris@16
|
1172 struct Process_ : euml_action<Process_<ToProcessEvt, Param1, Param2, Param3, Param4> >
|
Chris@16
|
1173 {
|
Chris@16
|
1174 template <class Event,class FSM,class STATE >
|
Chris@16
|
1175 struct state_action_result
|
Chris@16
|
1176 {
|
Chris@16
|
1177 typedef void type;
|
Chris@16
|
1178 };
|
Chris@16
|
1179 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1180 struct transition_action_result
|
Chris@16
|
1181 {
|
Chris@16
|
1182 typedef void type;
|
Chris@16
|
1183 };
|
Chris@16
|
1184
|
Chris@16
|
1185 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1186
|
Chris@16
|
1187 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1188 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1189 {
|
Chris@16
|
1190 (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
|
Chris@16
|
1191 (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
|
Chris@16
|
1192 (Param3()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
|
Chris@16
|
1193 (Param4()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
|
Chris@16
|
1194 }
|
Chris@16
|
1195 template <class Event,class FSM,class STATE>
|
Chris@16
|
1196 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1197 {
|
Chris@16
|
1198 (Param1()(evt,fsm,state)).process_event(ToProcessEvt());
|
Chris@16
|
1199 (Param2()(evt,fsm,state)).process_event(ToProcessEvt());
|
Chris@16
|
1200 (Param3()(evt,fsm,state)).process_event(ToProcessEvt());
|
Chris@16
|
1201 (Param4()(evt,fsm,state)).process_event(ToProcessEvt());
|
Chris@16
|
1202 }
|
Chris@16
|
1203 };
|
Chris@16
|
1204 template <class ToProcessEvt>
|
Chris@16
|
1205 struct Process_ <ToProcessEvt,void,void,void,void>
|
Chris@16
|
1206 : euml_action<Process_<ToProcessEvt, void, void, void, void > >
|
Chris@16
|
1207 {
|
Chris@16
|
1208 template <class Event,class FSM,class STATE >
|
Chris@16
|
1209 struct state_action_result
|
Chris@16
|
1210 {
|
Chris@16
|
1211 typedef void type;
|
Chris@16
|
1212 };
|
Chris@16
|
1213 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1214 struct transition_action_result
|
Chris@16
|
1215 {
|
Chris@16
|
1216 typedef void type;
|
Chris@16
|
1217 };
|
Chris@16
|
1218
|
Chris@16
|
1219 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1220
|
Chris@16
|
1221 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1222 void operator()(EVT const&,FSM& fsm,SourceState& ,TargetState& )const
|
Chris@16
|
1223 {
|
Chris@16
|
1224 fsm.process_event(ToProcessEvt());
|
Chris@16
|
1225 }
|
Chris@16
|
1226 template <class Event,class FSM,class STATE>
|
Chris@16
|
1227 void operator()(Event const& ,FSM& fsm,STATE& )const
|
Chris@16
|
1228 {
|
Chris@16
|
1229 fsm.process_event(ToProcessEvt());
|
Chris@16
|
1230 }
|
Chris@16
|
1231 };
|
Chris@16
|
1232
|
Chris@16
|
1233 template <class ToProcessEvt,class Param1>
|
Chris@16
|
1234 struct Process_ <ToProcessEvt,Param1,void,void,void>
|
Chris@16
|
1235 : euml_action<Process_<ToProcessEvt, Param1, void, void, void> >
|
Chris@16
|
1236 {
|
Chris@16
|
1237 template <class Event,class FSM,class STATE >
|
Chris@16
|
1238 struct state_action_result
|
Chris@16
|
1239 {
|
Chris@16
|
1240 typedef void type;
|
Chris@16
|
1241 };
|
Chris@16
|
1242 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1243 struct transition_action_result
|
Chris@16
|
1244 {
|
Chris@16
|
1245 typedef void type;
|
Chris@16
|
1246 };
|
Chris@16
|
1247
|
Chris@16
|
1248 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1249
|
Chris@16
|
1250 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1251 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1252 {
|
Chris@16
|
1253 (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
|
Chris@16
|
1254 }
|
Chris@16
|
1255 template <class Event,class FSM,class STATE>
|
Chris@16
|
1256 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1257 {
|
Chris@16
|
1258 (Param1()(evt,fsm,state)).process_event(ToProcessEvt());
|
Chris@16
|
1259 }
|
Chris@16
|
1260 };
|
Chris@16
|
1261
|
Chris@16
|
1262 template <class ToProcessEvt,class Param1, class Param2>
|
Chris@16
|
1263 struct Process_ <ToProcessEvt,Param1,Param2,void,void>
|
Chris@16
|
1264 : euml_action<Process_<ToProcessEvt, Param1, Param2, void, void> >
|
Chris@16
|
1265 {
|
Chris@16
|
1266 template <class Event,class FSM,class STATE >
|
Chris@16
|
1267 struct state_action_result
|
Chris@16
|
1268 {
|
Chris@16
|
1269 typedef void type;
|
Chris@16
|
1270 };
|
Chris@16
|
1271 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1272 struct transition_action_result
|
Chris@16
|
1273 {
|
Chris@16
|
1274 typedef void type;
|
Chris@16
|
1275 };
|
Chris@16
|
1276
|
Chris@16
|
1277 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1278
|
Chris@16
|
1279 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1280 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1281 {
|
Chris@16
|
1282 (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
|
Chris@16
|
1283 (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
|
Chris@16
|
1284 }
|
Chris@16
|
1285 template <class Event,class FSM,class STATE>
|
Chris@16
|
1286 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1287 {
|
Chris@16
|
1288 (Param1()(evt,fsm,state)).process_event(ToProcessEvt());
|
Chris@16
|
1289 (Param2()(evt,fsm,state)).process_event(ToProcessEvt());
|
Chris@16
|
1290 }
|
Chris@16
|
1291 };
|
Chris@16
|
1292
|
Chris@16
|
1293 template <class ToProcessEvt,class Param1, class Param2, class Param3>
|
Chris@16
|
1294 struct Process_ <ToProcessEvt,Param1,Param2,Param3,void>
|
Chris@16
|
1295 : euml_action<Process_<ToProcessEvt, Param1, Param2, Param3, void> >
|
Chris@16
|
1296 {
|
Chris@16
|
1297 template <class Event,class FSM,class STATE >
|
Chris@16
|
1298 struct state_action_result
|
Chris@16
|
1299 {
|
Chris@16
|
1300 typedef void type;
|
Chris@16
|
1301 };
|
Chris@16
|
1302 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1303 struct transition_action_result
|
Chris@16
|
1304 {
|
Chris@16
|
1305 typedef void type;
|
Chris@16
|
1306 };
|
Chris@16
|
1307
|
Chris@16
|
1308 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1309
|
Chris@16
|
1310 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1311 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1312 {
|
Chris@16
|
1313 (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
|
Chris@16
|
1314 (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
|
Chris@16
|
1315 (Param3()(evt,fsm,src,tgt)).process_event(ToProcessEvt());
|
Chris@16
|
1316 }
|
Chris@16
|
1317 template <class Event,class FSM,class STATE>
|
Chris@16
|
1318 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1319 {
|
Chris@16
|
1320 (Param1()(evt,fsm,state)).process_event(ToProcessEvt());
|
Chris@16
|
1321 (Param2()(evt,fsm,state)).process_event(ToProcessEvt());
|
Chris@16
|
1322 (Param3()(evt,fsm,state)).process_event(ToProcessEvt());
|
Chris@16
|
1323 }
|
Chris@16
|
1324 };
|
Chris@16
|
1325
|
Chris@16
|
1326 //version for process_(event_)
|
Chris@16
|
1327 template <>
|
Chris@16
|
1328 struct Process_ <GetEvent_<void>,void,void,void,void>
|
Chris@16
|
1329 : euml_action<Process_<GetEvent_<void>, void, void, void, void > >
|
Chris@16
|
1330 {
|
Chris@16
|
1331 template <class Event,class FSM,class STATE >
|
Chris@16
|
1332 struct state_action_result
|
Chris@16
|
1333 {
|
Chris@16
|
1334 typedef void type;
|
Chris@16
|
1335 };
|
Chris@16
|
1336 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1337 struct transition_action_result
|
Chris@16
|
1338 {
|
Chris@16
|
1339 typedef void type;
|
Chris@16
|
1340 };
|
Chris@16
|
1341
|
Chris@16
|
1342 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1343
|
Chris@16
|
1344 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1345 void operator()(EVT const& evt,FSM& fsm,SourceState& ,TargetState& )const
|
Chris@16
|
1346 {
|
Chris@16
|
1347 fsm.process_event(evt);
|
Chris@16
|
1348 }
|
Chris@16
|
1349 template <class Event,class FSM,class STATE>
|
Chris@16
|
1350 void operator()(Event const& evt,FSM& fsm,STATE& )const
|
Chris@16
|
1351 {
|
Chris@16
|
1352 fsm.process_event(evt);
|
Chris@16
|
1353 }
|
Chris@16
|
1354 };
|
Chris@16
|
1355
|
Chris@16
|
1356 struct process_tag {};
|
Chris@16
|
1357 struct Process_Helper: proto::extends< proto::terminal<process_tag>::type, Process_Helper, boost::msm::sm_domain>
|
Chris@16
|
1358 {
|
Chris@16
|
1359 Process_Helper(){}
|
Chris@16
|
1360 using proto::extends< proto::terminal<process_tag>::type, Process_Helper, boost::msm::sm_domain>::operator=;
|
Chris@16
|
1361 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
1362 #ifdef BOOST_MSVC
|
Chris@16
|
1363 ,class Arg6
|
Chris@16
|
1364 #endif
|
Chris@16
|
1365 >
|
Chris@16
|
1366 struct In
|
Chris@16
|
1367 {
|
Chris@16
|
1368 typedef Process_<Arg1,Arg2,Arg3,Arg4,Arg5> type;
|
Chris@16
|
1369 };
|
Chris@16
|
1370 };
|
Chris@16
|
1371 Process_Helper const process_ = Process_Helper();
|
Chris@16
|
1372
|
Chris@16
|
1373 template <class Param1, class Param2, class Param3, class Param4>
|
Chris@16
|
1374 struct Reprocess_ : euml_action<Reprocess_<Param1, Param2, Param3, Param4> >
|
Chris@16
|
1375 {
|
Chris@16
|
1376 template <class Event,class FSM,class STATE >
|
Chris@16
|
1377 struct state_action_result
|
Chris@16
|
1378 {
|
Chris@16
|
1379 typedef void type;
|
Chris@16
|
1380 };
|
Chris@16
|
1381 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1382 struct transition_action_result
|
Chris@16
|
1383 {
|
Chris@16
|
1384 typedef void type;
|
Chris@16
|
1385 };
|
Chris@16
|
1386
|
Chris@16
|
1387 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1388
|
Chris@16
|
1389 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1390 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1391 {
|
Chris@16
|
1392 (Param1()(evt,fsm,src,tgt)).process_event(evt);
|
Chris@16
|
1393 (Param2()(evt,fsm,src,tgt)).process_event(evt);
|
Chris@16
|
1394 (Param3()(evt,fsm,src,tgt)).process_event(evt);
|
Chris@16
|
1395 (Param4()(evt,fsm,src,tgt)).process_event(evt);
|
Chris@16
|
1396 }
|
Chris@16
|
1397 template <class Event,class FSM,class STATE>
|
Chris@16
|
1398 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1399 {
|
Chris@16
|
1400 (Param1()(evt,fsm,state)).process_event(evt);
|
Chris@16
|
1401 (Param2()(evt,fsm,state)).process_event(evt);
|
Chris@16
|
1402 (Param3()(evt,fsm,state)).process_event(evt);
|
Chris@16
|
1403 (Param4()(evt,fsm,state)).process_event(evt);
|
Chris@16
|
1404 }
|
Chris@16
|
1405 };
|
Chris@16
|
1406 template <>
|
Chris@16
|
1407 struct Reprocess_ <void,void,void,void>
|
Chris@16
|
1408 : euml_action<Reprocess_<void, void, void, void > >
|
Chris@16
|
1409 {
|
Chris@16
|
1410 template <class Event,class FSM,class STATE >
|
Chris@16
|
1411 struct state_action_result
|
Chris@16
|
1412 {
|
Chris@16
|
1413 typedef void type;
|
Chris@16
|
1414 };
|
Chris@16
|
1415 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1416 struct transition_action_result
|
Chris@16
|
1417 {
|
Chris@16
|
1418 typedef void type;
|
Chris@16
|
1419 };
|
Chris@16
|
1420
|
Chris@16
|
1421 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1422
|
Chris@16
|
1423 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1424 void operator()(EVT const& evt,FSM& fsm,SourceState& ,TargetState& )const
|
Chris@16
|
1425 {
|
Chris@16
|
1426 fsm.process_event(evt);
|
Chris@16
|
1427 }
|
Chris@16
|
1428 template <class Event,class FSM,class STATE>
|
Chris@16
|
1429 void operator()(Event const& evt,FSM& fsm,STATE& )const
|
Chris@16
|
1430 {
|
Chris@16
|
1431 fsm.process_event(evt);
|
Chris@16
|
1432 }
|
Chris@16
|
1433 };
|
Chris@16
|
1434
|
Chris@16
|
1435 template <class Param1>
|
Chris@16
|
1436 struct Reprocess_ <Param1,void,void,void>
|
Chris@16
|
1437 : euml_action<Reprocess_<Param1, void, void, void> >
|
Chris@16
|
1438 {
|
Chris@16
|
1439 template <class Event,class FSM,class STATE >
|
Chris@16
|
1440 struct state_action_result
|
Chris@16
|
1441 {
|
Chris@16
|
1442 typedef void type;
|
Chris@16
|
1443 };
|
Chris@16
|
1444 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1445 struct transition_action_result
|
Chris@16
|
1446 {
|
Chris@16
|
1447 typedef void type;
|
Chris@16
|
1448 };
|
Chris@16
|
1449
|
Chris@16
|
1450 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1451
|
Chris@16
|
1452 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1453 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1454 {
|
Chris@16
|
1455 (Param1()(evt,fsm,src,tgt)).process_event(evt);
|
Chris@16
|
1456 }
|
Chris@16
|
1457 template <class Event,class FSM,class STATE>
|
Chris@16
|
1458 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1459 {
|
Chris@16
|
1460 (Param1()(evt,fsm,state)).process_event(evt);
|
Chris@16
|
1461 }
|
Chris@16
|
1462 };
|
Chris@16
|
1463
|
Chris@16
|
1464 template <class Param1, class Param2>
|
Chris@16
|
1465 struct Reprocess_ <Param1,Param2,void,void>
|
Chris@16
|
1466 : euml_action<Reprocess_<Param1, Param2, void, void> >
|
Chris@16
|
1467 {
|
Chris@16
|
1468 template <class Event,class FSM,class STATE >
|
Chris@16
|
1469 struct state_action_result
|
Chris@16
|
1470 {
|
Chris@16
|
1471 typedef void type;
|
Chris@16
|
1472 };
|
Chris@16
|
1473 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1474 struct transition_action_result
|
Chris@16
|
1475 {
|
Chris@16
|
1476 typedef void type;
|
Chris@16
|
1477 };
|
Chris@16
|
1478
|
Chris@16
|
1479 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1480
|
Chris@16
|
1481 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1482 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1483 {
|
Chris@16
|
1484 (Param1()(evt,fsm,src,tgt)).process_event(evt);
|
Chris@16
|
1485 (Param2()(evt,fsm,src,tgt)).process_event(evt);
|
Chris@16
|
1486 }
|
Chris@16
|
1487 template <class Event,class FSM,class STATE>
|
Chris@16
|
1488 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1489 {
|
Chris@16
|
1490 (Param1()(evt,fsm,state)).process_event(evt);
|
Chris@16
|
1491 (Param2()(evt,fsm,state)).process_event(evt);
|
Chris@16
|
1492 }
|
Chris@16
|
1493 };
|
Chris@16
|
1494
|
Chris@16
|
1495 template <class Param1, class Param2, class Param3>
|
Chris@16
|
1496 struct Reprocess_ <Param1,Param2,Param3,void>
|
Chris@16
|
1497 : euml_action<Reprocess_<Param1, Param2, Param3, void> >
|
Chris@16
|
1498 {
|
Chris@16
|
1499 template <class Event,class FSM,class STATE >
|
Chris@16
|
1500 struct state_action_result
|
Chris@16
|
1501 {
|
Chris@16
|
1502 typedef void type;
|
Chris@16
|
1503 };
|
Chris@16
|
1504 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1505 struct transition_action_result
|
Chris@16
|
1506 {
|
Chris@16
|
1507 typedef void type;
|
Chris@16
|
1508 };
|
Chris@16
|
1509
|
Chris@16
|
1510 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1511
|
Chris@16
|
1512 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1513 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1514 {
|
Chris@16
|
1515 (Param1()(evt,fsm,src,tgt)).process_event(evt);
|
Chris@16
|
1516 (Param2()(evt,fsm,src,tgt)).process_event(evt);
|
Chris@16
|
1517 (Param3()(evt,fsm,src,tgt)).process_event(evt);
|
Chris@16
|
1518 }
|
Chris@16
|
1519 template <class Event,class FSM,class STATE>
|
Chris@16
|
1520 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1521 {
|
Chris@16
|
1522 (Param1()(evt,fsm,state)).process_event(evt);
|
Chris@16
|
1523 (Param2()(evt,fsm,state)).process_event(evt);
|
Chris@16
|
1524 (Param3()(evt,fsm,state)).process_event(evt);
|
Chris@16
|
1525 }
|
Chris@16
|
1526 };
|
Chris@16
|
1527 struct reprocess_tag {};
|
Chris@16
|
1528 struct Reprocess_Helper: proto::extends< proto::terminal<reprocess_tag>::type, Reprocess_Helper, boost::msm::sm_domain>
|
Chris@16
|
1529 {
|
Chris@16
|
1530 Reprocess_Helper(){}
|
Chris@16
|
1531 using proto::extends< proto::terminal<reprocess_tag>::type, Reprocess_Helper, boost::msm::sm_domain>::operator=;
|
Chris@16
|
1532 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
1533 #ifdef BOOST_MSVC
|
Chris@16
|
1534 ,class Arg6
|
Chris@16
|
1535 #endif
|
Chris@16
|
1536 >
|
Chris@16
|
1537 struct In
|
Chris@16
|
1538 {
|
Chris@16
|
1539 typedef Reprocess_<Arg1,Arg2,Arg3,Arg4> type;
|
Chris@16
|
1540 };
|
Chris@16
|
1541 };
|
Chris@16
|
1542 Reprocess_Helper const reprocess_ = Reprocess_Helper();
|
Chris@16
|
1543
|
Chris@16
|
1544 template <class ToProcessEvt,class Value,class Param1, class Param2, class Param3>
|
Chris@16
|
1545 struct Process2_ : euml_action<Process2_<ToProcessEvt,Value, Param1, Param2, Param3> >
|
Chris@16
|
1546 {
|
Chris@16
|
1547 template <class Event,class FSM,class STATE >
|
Chris@16
|
1548 struct state_action_result
|
Chris@16
|
1549 {
|
Chris@16
|
1550 typedef void type;
|
Chris@16
|
1551 };
|
Chris@16
|
1552 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1553 struct transition_action_result
|
Chris@16
|
1554 {
|
Chris@16
|
1555 typedef void type;
|
Chris@16
|
1556 };
|
Chris@16
|
1557
|
Chris@16
|
1558 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1559
|
Chris@16
|
1560 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1561 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1562 {
|
Chris@16
|
1563 (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
|
Chris@16
|
1564 (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
|
Chris@16
|
1565 (Param3()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
|
Chris@16
|
1566 }
|
Chris@16
|
1567 template <class Event,class FSM,class STATE>
|
Chris@16
|
1568 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1569 {
|
Chris@16
|
1570 (Param1()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
|
Chris@16
|
1571 (Param2()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
|
Chris@16
|
1572 (Param3()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
|
Chris@16
|
1573 }
|
Chris@16
|
1574 };
|
Chris@16
|
1575
|
Chris@16
|
1576 template <class ToProcessEvt,class Value>
|
Chris@16
|
1577 struct Process2_ <ToProcessEvt,Value,void,void,void>
|
Chris@16
|
1578 : euml_action<Process2_<ToProcessEvt,Value, void, void, void > >
|
Chris@16
|
1579 {
|
Chris@16
|
1580 template <class Event,class FSM,class STATE >
|
Chris@16
|
1581 struct state_action_result
|
Chris@16
|
1582 {
|
Chris@16
|
1583 typedef void type;
|
Chris@16
|
1584 };
|
Chris@16
|
1585 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1586 struct transition_action_result
|
Chris@16
|
1587 {
|
Chris@16
|
1588 typedef void type;
|
Chris@16
|
1589 };
|
Chris@16
|
1590
|
Chris@16
|
1591 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1592
|
Chris@16
|
1593 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1594 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1595 {
|
Chris@16
|
1596 fsm.process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
|
Chris@16
|
1597 }
|
Chris@16
|
1598 template <class Event,class FSM,class STATE>
|
Chris@16
|
1599 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1600 {
|
Chris@16
|
1601 fsm.process_event(ToProcessEvt(Value()(evt,fsm,state)));
|
Chris@16
|
1602 }
|
Chris@16
|
1603 };
|
Chris@16
|
1604
|
Chris@16
|
1605 template <class ToProcessEvt,class Value,class Param1>
|
Chris@16
|
1606 struct Process2_ <ToProcessEvt,Value,Param1,void,void>
|
Chris@16
|
1607 : euml_action<Process2_<ToProcessEvt,Value, Param1, void, void> >
|
Chris@16
|
1608 {
|
Chris@16
|
1609 template <class Event,class FSM,class STATE >
|
Chris@16
|
1610 struct state_action_result
|
Chris@16
|
1611 {
|
Chris@16
|
1612 typedef void type;
|
Chris@16
|
1613 };
|
Chris@16
|
1614 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1615 struct transition_action_result
|
Chris@16
|
1616 {
|
Chris@16
|
1617 typedef void type;
|
Chris@16
|
1618 };
|
Chris@16
|
1619
|
Chris@16
|
1620 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1621
|
Chris@16
|
1622 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1623 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1624 {
|
Chris@16
|
1625 (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
|
Chris@16
|
1626 }
|
Chris@16
|
1627 template <class Event,class FSM,class STATE>
|
Chris@16
|
1628 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1629 {
|
Chris@16
|
1630 (Param1()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
|
Chris@16
|
1631 }
|
Chris@16
|
1632 };
|
Chris@16
|
1633
|
Chris@16
|
1634 template <class ToProcessEvt,class Value,class Param1, class Param2>
|
Chris@16
|
1635 struct Process2_ <ToProcessEvt,Value,Param1,Param2,void>
|
Chris@16
|
1636 : euml_action<Process2_<ToProcessEvt,Value, Param1, Param2, void> >
|
Chris@16
|
1637 {
|
Chris@16
|
1638 template <class Event,class FSM,class STATE >
|
Chris@16
|
1639 struct state_action_result
|
Chris@16
|
1640 {
|
Chris@16
|
1641 typedef void type;
|
Chris@16
|
1642 };
|
Chris@16
|
1643 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1644 struct transition_action_result
|
Chris@16
|
1645 {
|
Chris@16
|
1646 typedef void type;
|
Chris@16
|
1647 };
|
Chris@16
|
1648
|
Chris@16
|
1649 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1650
|
Chris@16
|
1651 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1652 void operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1653 {
|
Chris@16
|
1654 (Param1()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
|
Chris@16
|
1655 (Param2()(evt,fsm,src,tgt)).process_event(ToProcessEvt(Value()(evt,fsm,src,tgt)));
|
Chris@16
|
1656 }
|
Chris@16
|
1657 template <class Event,class FSM,class STATE>
|
Chris@16
|
1658 void operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1659 {
|
Chris@16
|
1660 (Param1()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
|
Chris@16
|
1661 (Param2()(evt,fsm,state)).process_event(ToProcessEvt(Value()(evt,fsm,state)));
|
Chris@16
|
1662 }
|
Chris@16
|
1663 };
|
Chris@16
|
1664
|
Chris@16
|
1665 struct process2_tag {};
|
Chris@16
|
1666 struct Process2_Helper : proto::extends< proto::terminal<process2_tag>::type, Process2_Helper, boost::msm::sm_domain>
|
Chris@16
|
1667 {
|
Chris@16
|
1668 Process2_Helper(){}
|
Chris@16
|
1669 using proto::extends< proto::terminal<process2_tag>::type, Process2_Helper, boost::msm::sm_domain>::operator=;
|
Chris@16
|
1670 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
1671 #ifdef BOOST_MSVC
|
Chris@16
|
1672 ,class Arg6
|
Chris@16
|
1673 #endif
|
Chris@16
|
1674 >
|
Chris@16
|
1675 struct In
|
Chris@16
|
1676 {
|
Chris@16
|
1677 typedef Process2_<Arg1,Arg2,Arg3,Arg4,Arg5> type;
|
Chris@16
|
1678 };
|
Chris@16
|
1679 };
|
Chris@16
|
1680 Process2_Helper const process2_ = Process2_Helper();
|
Chris@16
|
1681
|
Chris@16
|
1682 template <class Flag,class Param1=void, class Enable=void >
|
Chris@16
|
1683 struct Get_Flag_ : euml_action<Get_Flag_<Flag,Param1,Enable> > {};
|
Chris@16
|
1684
|
Chris@16
|
1685 template <class Flag,class Param1>
|
Chris@16
|
1686 struct Get_Flag_ <Flag,Param1
|
Chris@16
|
1687 , typename ::boost::enable_if<typename ::boost::is_same<Param1,void>::type >::type>
|
Chris@16
|
1688 : euml_action<Get_Flag_<Flag, Param1> >
|
Chris@16
|
1689 {
|
Chris@16
|
1690 template <class Event,class FSM,class STATE >
|
Chris@16
|
1691 struct state_action_result
|
Chris@16
|
1692 {
|
Chris@16
|
1693 typedef bool type;
|
Chris@16
|
1694 };
|
Chris@16
|
1695 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1696 struct transition_action_result
|
Chris@16
|
1697 {
|
Chris@16
|
1698 typedef bool type;
|
Chris@16
|
1699 };
|
Chris@16
|
1700
|
Chris@16
|
1701 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1702
|
Chris@16
|
1703 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1704 bool operator()(EVT const&,FSM& fsm,SourceState& ,TargetState& )const
|
Chris@16
|
1705 {
|
Chris@16
|
1706 return fsm.template is_flag_active<Flag>();
|
Chris@16
|
1707 }
|
Chris@16
|
1708 template <class Event,class FSM,class STATE>
|
Chris@16
|
1709 bool operator()(Event const& ,FSM& fsm,STATE& )const
|
Chris@16
|
1710 {
|
Chris@16
|
1711 return fsm.template is_flag_active<Flag>();
|
Chris@16
|
1712 }
|
Chris@16
|
1713 };
|
Chris@16
|
1714
|
Chris@16
|
1715 template <class Flag,class Param1>
|
Chris@16
|
1716 struct Get_Flag_ <Flag,Param1
|
Chris@16
|
1717 , typename ::boost::disable_if<
|
Chris@16
|
1718 typename ::boost::is_same<Param1,void>::type
|
Chris@16
|
1719 >::type>
|
Chris@16
|
1720 : euml_action<Get_Flag_<Flag, Param1> >
|
Chris@16
|
1721 {
|
Chris@16
|
1722 template <class Event,class FSM,class STATE >
|
Chris@16
|
1723 struct state_action_result
|
Chris@16
|
1724 {
|
Chris@16
|
1725 typedef bool type;
|
Chris@16
|
1726 };
|
Chris@16
|
1727 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1728 struct transition_action_result
|
Chris@16
|
1729 {
|
Chris@16
|
1730 typedef bool type;
|
Chris@16
|
1731 };
|
Chris@16
|
1732
|
Chris@16
|
1733 typedef ::boost::mpl::set<state_action_tag,action_tag> tag_type;
|
Chris@16
|
1734
|
Chris@16
|
1735 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1736 bool operator()(EVT const& evt,FSM& fsm,SourceState& src,TargetState& tgt)const
|
Chris@16
|
1737 {
|
Chris@16
|
1738 return (Param1()(evt,fsm,src,tgt)).template is_flag_active<Flag>();
|
Chris@16
|
1739 }
|
Chris@16
|
1740 template <class Event,class FSM,class STATE>
|
Chris@16
|
1741 bool operator()(Event const& evt,FSM& fsm,STATE& state)const
|
Chris@16
|
1742 {
|
Chris@16
|
1743 return (Param1()(evt,fsm,state)).template is_flag_active<Flag>();
|
Chris@16
|
1744 }
|
Chris@16
|
1745 };
|
Chris@16
|
1746
|
Chris@16
|
1747 struct Get_Flag_Helper: proto::extends< proto::terminal<fsm_artefact_tag>::type, Get_Flag_Helper, boost::msm::sm_domain>
|
Chris@16
|
1748 {
|
Chris@16
|
1749 Get_Flag_Helper(){}
|
Chris@16
|
1750 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
1751 #ifdef BOOST_MSVC
|
Chris@16
|
1752 ,class Arg6
|
Chris@16
|
1753 #endif
|
Chris@16
|
1754 >
|
Chris@16
|
1755 struct In
|
Chris@16
|
1756 {
|
Chris@16
|
1757 typedef Get_Flag_<Arg1,Arg2> type;
|
Chris@16
|
1758 };
|
Chris@16
|
1759 };
|
Chris@16
|
1760 Get_Flag_Helper const is_flag_ = Get_Flag_Helper();
|
Chris@16
|
1761
|
Chris@16
|
1762 // deferring an event
|
Chris@16
|
1763 struct DeferEvent_ : euml_action< DeferEvent_ >
|
Chris@16
|
1764 {
|
Chris@16
|
1765 typedef ::boost::mpl::set<action_tag> tag_type;
|
Chris@16
|
1766 // mark as deferring to avoid stack overflows in certain conditions
|
Chris@16
|
1767 typedef int deferring_action;
|
Chris@16
|
1768 template <class EVT,class FSM,class SourceState,class TargetState>
|
Chris@16
|
1769 void operator()(EVT const& evt,FSM& fsm,SourceState& ,TargetState& ) const
|
Chris@16
|
1770 {
|
Chris@16
|
1771 fsm.defer_event(evt);
|
Chris@16
|
1772 }
|
Chris@16
|
1773 };
|
Chris@16
|
1774 struct Defer_Helper : proto::extends< proto::terminal<fsm_artefact_tag>::type, Defer_Helper, boost::msm::sm_domain>
|
Chris@16
|
1775 {
|
Chris@16
|
1776 Defer_Helper(){}
|
Chris@16
|
1777 using proto::extends< proto::terminal<fsm_artefact_tag>::type, Defer_Helper, boost::msm::sm_domain>::operator=;
|
Chris@16
|
1778 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
1779 #ifdef BOOST_MSVC
|
Chris@16
|
1780 ,class Arg6
|
Chris@16
|
1781 #endif
|
Chris@16
|
1782 >
|
Chris@16
|
1783 struct In
|
Chris@16
|
1784 {
|
Chris@16
|
1785 typedef DeferEvent_ type;
|
Chris@16
|
1786 };
|
Chris@16
|
1787 };
|
Chris@16
|
1788 Defer_Helper const defer_ = Defer_Helper();
|
Chris@16
|
1789
|
Chris@16
|
1790 struct explicit_tag {};
|
Chris@16
|
1791 struct Explicit_Helper : proto::extends< proto::terminal<explicit_tag>::type, Explicit_Helper, boost::msm::sm_domain>
|
Chris@16
|
1792 {
|
Chris@16
|
1793 Explicit_Helper(){}
|
Chris@16
|
1794 using proto::extends< proto::terminal<explicit_tag>::type, Explicit_Helper, boost::msm::sm_domain>::operator=;
|
Chris@16
|
1795 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
1796 #ifdef BOOST_MSVC
|
Chris@16
|
1797 ,class Arg6
|
Chris@16
|
1798 #endif
|
Chris@16
|
1799 >
|
Chris@16
|
1800 struct In
|
Chris@16
|
1801 {
|
Chris@16
|
1802 typedef typename Arg1::template direct<Arg2> type;
|
Chris@16
|
1803 };
|
Chris@16
|
1804 };
|
Chris@16
|
1805 Explicit_Helper const explicit_ = Explicit_Helper();
|
Chris@16
|
1806
|
Chris@16
|
1807 struct entry_pt_tag {};
|
Chris@16
|
1808 struct Entry_Pt_Helper : proto::extends< proto::terminal<entry_pt_tag>::type, Entry_Pt_Helper, boost::msm::sm_domain>
|
Chris@16
|
1809 {
|
Chris@16
|
1810 Entry_Pt_Helper(){}
|
Chris@16
|
1811 using proto::extends< proto::terminal<entry_pt_tag>::type, Entry_Pt_Helper, boost::msm::sm_domain>::operator=;
|
Chris@16
|
1812 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
1813 #ifdef BOOST_MSVC
|
Chris@16
|
1814 ,class Arg6
|
Chris@16
|
1815 #endif
|
Chris@16
|
1816 >
|
Chris@16
|
1817 struct In
|
Chris@16
|
1818 {
|
Chris@16
|
1819 typedef typename Arg1::template entry_pt<Arg2> type;
|
Chris@16
|
1820 };
|
Chris@16
|
1821 };
|
Chris@16
|
1822 Entry_Pt_Helper const entry_pt_ = Entry_Pt_Helper();
|
Chris@16
|
1823
|
Chris@16
|
1824 struct exit_pt_tag {};
|
Chris@16
|
1825 struct Exit_Pt_Helper : proto::extends< proto::terminal<exit_pt_tag>::type, Exit_Pt_Helper, boost::msm::sm_domain>
|
Chris@16
|
1826 {
|
Chris@16
|
1827 Exit_Pt_Helper(){}
|
Chris@16
|
1828 using proto::extends< proto::terminal<exit_pt_tag>::type, Exit_Pt_Helper, boost::msm::sm_domain>::operator=;
|
Chris@16
|
1829 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5
|
Chris@16
|
1830 #ifdef BOOST_MSVC
|
Chris@16
|
1831 ,class Arg6
|
Chris@16
|
1832 #endif
|
Chris@16
|
1833 >
|
Chris@16
|
1834 struct In
|
Chris@16
|
1835 {
|
Chris@16
|
1836 typedef typename Arg1::template exit_pt<Arg2> type;
|
Chris@16
|
1837 };
|
Chris@16
|
1838 };
|
Chris@16
|
1839 Exit_Pt_Helper const exit_pt_ = Exit_Pt_Helper();
|
Chris@16
|
1840
|
Chris@16
|
1841 #ifdef BOOST_MSVC
|
Chris@16
|
1842 #define BOOST_MSM_EUML_FUNCTION(functor,function,function_name,result_trans,result_state) \
|
Chris@16
|
1843 template <class Param1=void , class Param2=void , class Param3=void , class Param4=void, \
|
Chris@16
|
1844 class Param5=void,class Param6=void,class Enable=void > \
|
Chris@16
|
1845 struct functor : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6,Enable> > {}; \
|
Chris@16
|
1846 template <class Param1, class Param2, class Param3, class Param4, class Param5, class Param6> \
|
Chris@16
|
1847 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
1848 typename ::boost::enable_if<typename ::boost::is_same<Param1,void>::type>::type> \
|
Chris@16
|
1849 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
1850 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
1851 typedef result_state type;} ; \
|
Chris@16
|
1852 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1853 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
1854 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
1855 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1856 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type \
|
Chris@16
|
1857 operator()(EVT const& , FSM& ,SourceState& ,TargetState& )const { \
|
Chris@16
|
1858 return function ();} \
|
Chris@16
|
1859 template <class Event,class FSM,class STATE> \
|
Chris@16
|
1860 typename state_action_result<Event,FSM,STATE>::type \
|
Chris@16
|
1861 operator()(Event const& ,FSM& ,STATE& )const { \
|
Chris@16
|
1862 return function ();} }; \
|
Chris@16
|
1863 template <class Param1, class Param2, class Param3, class Param4, class Param5,class Param6> \
|
Chris@16
|
1864 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
1865 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
1866 typename ::boost::is_same<Param1,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
1867 typename ::boost::is_same<Param2,void>::type>::type>::type >::type> \
|
Chris@16
|
1868 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
1869 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
1870 typedef result_state type;} ; \
|
Chris@16
|
1871 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1872 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
1873 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
1874 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1875 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
1876 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
1877 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
1878 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
1879 return function (Param1()(evt,fsm,src,tgt));} \
|
Chris@16
|
1880 template <class Event,class FSM,class STATE> \
|
Chris@16
|
1881 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
1882 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
1883 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
1884 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
1885 return function (Param1()(evt,fsm,state));} }; \
|
Chris@16
|
1886 template <class Param1, class Param2, class Param3, class Param4, class Param5,class Param6> \
|
Chris@16
|
1887 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
1888 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
1889 typename ::boost::is_same<Param2,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
1890 typename ::boost::is_same<Param3,void>::type>::type>::type >::type> \
|
Chris@16
|
1891 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
1892 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
1893 typedef result_state type;} ; \
|
Chris@16
|
1894 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1895 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
1896 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
1897 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1898 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
1899 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
1900 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
1901 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
1902 return function (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));} \
|
Chris@16
|
1903 template <class Event,class FSM,class STATE> \
|
Chris@16
|
1904 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
1905 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
1906 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
1907 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
1908 return function (Param1()(evt,fsm,state),Param2()(evt,fsm,state));} }; \
|
Chris@16
|
1909 template <class Param1, class Param2, class Param3, class Param4, class Param5,class Param6> \
|
Chris@16
|
1910 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
1911 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
1912 typename ::boost::is_same<Param3,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
1913 typename ::boost::is_same<Param4,void>::type>::type>::type >::type> \
|
Chris@16
|
1914 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
1915 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
1916 typedef result_state type;} ; \
|
Chris@16
|
1917 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1918 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
1919 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
1920 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1921 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
1922 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
1923 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
1924 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
1925 return function (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));} \
|
Chris@16
|
1926 template <class Event,class FSM,class STATE> \
|
Chris@16
|
1927 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
1928 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
1929 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
1930 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
1931 return function (Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));} }; \
|
Chris@16
|
1932 template <class Param1, class Param2, class Param3, class Param4, class Param5,class Param6> \
|
Chris@16
|
1933 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
1934 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
1935 typename ::boost::is_same<Param4,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
1936 typename ::boost::is_same<Param5,void>::type>::type>::type >::type> \
|
Chris@16
|
1937 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
1938 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
1939 typedef result_state type;} ; \
|
Chris@16
|
1940 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1941 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
1942 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
1943 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1944 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
1945 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
1946 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
1947 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
1948 return function (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt) \
|
Chris@16
|
1949 ,Param4()(evt,fsm,src,tgt));} \
|
Chris@16
|
1950 template <class Event,class FSM,class STATE> \
|
Chris@16
|
1951 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
1952 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
1953 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
1954 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
1955 return function (Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state) \
|
Chris@16
|
1956 ,Param4()(evt,fsm,state));} }; \
|
Chris@16
|
1957 template <class Param1, class Param2, class Param3, class Param4, class Param5,class Param6> \
|
Chris@16
|
1958 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
1959 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
1960 typename ::boost::is_same<Param5,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
1961 typename ::boost::is_same<Param6,void>::type>::type>::type >::type> \
|
Chris@16
|
1962 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
1963 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
1964 typedef result_state type;} ; \
|
Chris@16
|
1965 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1966 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
1967 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
1968 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1969 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
1970 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
1971 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
1972 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
1973 return function (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt) \
|
Chris@16
|
1974 ,Param4()(evt,fsm,src,tgt),Param5()(evt,fsm,src,tgt));} \
|
Chris@16
|
1975 template <class Event,class FSM,class STATE> \
|
Chris@16
|
1976 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
1977 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
1978 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
1979 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
1980 return function (Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state) \
|
Chris@16
|
1981 ,Param4()(evt,fsm,state),Param5()(evt,fsm,state));} }; \
|
Chris@16
|
1982 template <class Param1, class Param2, class Param3, class Param4, class Param5,class Param6> \
|
Chris@16
|
1983 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
1984 typename ::boost::disable_if<typename ::boost::is_same<Param6,void>::type>::type> \
|
Chris@16
|
1985 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
1986 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
1987 typedef result_state type;} ; \
|
Chris@16
|
1988 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1989 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
1990 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
1991 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
1992 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
1993 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
1994 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
1995 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
1996 return function (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt) \
|
Chris@16
|
1997 ,Param4()(evt,fsm,src,tgt),Param5()(evt,fsm,src,tgt),Param6()(evt,fsm,src,tgt));} \
|
Chris@16
|
1998 template <class Event,class FSM,class STATE> \
|
Chris@16
|
1999 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2000 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2001 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2002 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2003 return function (Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state) \
|
Chris@16
|
2004 ,Param4()(evt,fsm,state),Param5()(evt,fsm,state),Param6()(evt,fsm,state));} }; \
|
Chris@16
|
2005 struct function_name ## tag{}; \
|
Chris@16
|
2006 struct functor ## Helper : proto::extends< proto::terminal< function_name ## tag >::type, \
|
Chris@16
|
2007 functor ## Helper , boost::msm::sm_domain> { functor ## Helper(){} \
|
Chris@16
|
2008 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5,class Arg6> \
|
Chris@16
|
2009 struct In {typedef functor <Arg1,Arg2,Arg3,Arg4,Arg5,Arg6> type;}; }; \
|
Chris@16
|
2010 functor ## Helper const function_name = functor ## Helper ();
|
Chris@16
|
2011
|
Chris@16
|
2012 #define BOOST_MSM_EUML_METHOD(functor,function,function_name,result_trans,result_state) \
|
Chris@16
|
2013 template <class Param1=void , class Param2=void , class Param3=void , class Param4=void, \
|
Chris@16
|
2014 class Param5=void,class Param6=void,class Enable=void > \
|
Chris@16
|
2015 struct functor : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6,Enable> > {}; \
|
Chris@16
|
2016 template <class Param1, class Param2, class Param3, class Param4, class Param5, class Param6> \
|
Chris@16
|
2017 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
2018 typename ::boost::enable_if<typename ::boost::is_same<Param2,void>::type>::type> \
|
Chris@16
|
2019 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
2020 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2021 typedef result_state type;} ; \
|
Chris@16
|
2022 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2023 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2024 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2025 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2026 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2027 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2028 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2029 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2030 return (Param1()(evt,fsm,src,tgt)).function();} \
|
Chris@16
|
2031 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2032 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2033 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2034 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2035 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2036 return (Param1()(evt,fsm,state)).function();} }; \
|
Chris@16
|
2037 template <class Param1, class Param2, class Param3, class Param4, class Param5,class Param6> \
|
Chris@16
|
2038 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
2039 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
2040 typename ::boost::is_same<Param2,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
2041 typename ::boost::is_same<Param3,void>::type>::type>::type >::type> \
|
Chris@16
|
2042 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
2043 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2044 typedef result_state type;} ; \
|
Chris@16
|
2045 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2046 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2047 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2048 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2049 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2050 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2051 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2052 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2053 return (Param1()(evt,fsm,src,tgt)).function(Param2()(evt,fsm,src,tgt));} \
|
Chris@16
|
2054 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2055 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2056 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2057 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2058 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2059 return (Param1()(evt,fsm,state)).function(Param2()(evt,fsm,state));} }; \
|
Chris@16
|
2060 template <class Param1, class Param2, class Param3, class Param4, class Param5,class Param6> \
|
Chris@16
|
2061 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
2062 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
2063 typename ::boost::is_same<Param3,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
2064 typename ::boost::is_same<Param4,void>::type>::type>::type >::type> \
|
Chris@16
|
2065 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
2066 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2067 typedef result_state type;} ; \
|
Chris@16
|
2068 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2069 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2070 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2071 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2072 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2073 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2074 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2075 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2076 return (Param1()(evt,fsm,src,tgt)).function(Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));} \
|
Chris@16
|
2077 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2078 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2079 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2080 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2081 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2082 return (Param1()(evt,fsm,state)).function(Param2()(evt,fsm,state),Param3()(evt,fsm,state));} }; \
|
Chris@16
|
2083 template <class Param1, class Param2, class Param3, class Param4, class Param5,class Param6> \
|
Chris@16
|
2084 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
2085 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
2086 typename ::boost::is_same<Param4,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
2087 typename ::boost::is_same<Param5,void>::type>::type>::type >::type> \
|
Chris@16
|
2088 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
2089 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2090 typedef result_state type;} ; \
|
Chris@16
|
2091 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2092 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2093 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2094 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2095 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2096 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2097 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2098 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2099 return (Param1()(evt,fsm,src,tgt)).function(Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt) \
|
Chris@16
|
2100 ,Param4()(evt,fsm,src,tgt));} \
|
Chris@16
|
2101 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2102 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2103 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2104 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2105 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2106 return (Param1()(evt,fsm,state)).function(Param2()(evt,fsm,state),Param3()(evt,fsm,state) \
|
Chris@16
|
2107 ,Param4()(evt,fsm,state));} }; \
|
Chris@16
|
2108 template <class Param1, class Param2, class Param3, class Param4, class Param5,class Param6> \
|
Chris@16
|
2109 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
2110 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
2111 typename ::boost::is_same<Param5,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
2112 typename ::boost::is_same<Param6,void>::type>::type>::type >::type> \
|
Chris@16
|
2113 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
2114 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2115 typedef result_state type;} ; \
|
Chris@16
|
2116 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2117 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2118 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2119 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2120 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2121 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2122 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2123 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2124 return (Param1()(evt,fsm,src,tgt)).function(Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt) \
|
Chris@16
|
2125 ,Param4()(evt,fsm,src,tgt),Param5()(evt,fsm,src,tgt));} \
|
Chris@16
|
2126 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2127 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2128 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2129 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2130 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2131 return (Param1()(evt,fsm,state)).function(Param2()(evt,fsm,state),Param3()(evt,fsm,state) \
|
Chris@16
|
2132 ,Param4()(evt,fsm,state),Param5()(evt,fsm,state));} }; \
|
Chris@16
|
2133 template <class Param1, class Param2, class Param3, class Param4, class Param5,class Param6> \
|
Chris@16
|
2134 struct functor<Param1,Param2,Param3,Param4,Param5,Param6, \
|
Chris@16
|
2135 typename ::boost::disable_if<typename ::boost::is_same<Param6,void>::type>::type> \
|
Chris@16
|
2136 : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Param6> > { \
|
Chris@16
|
2137 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2138 typedef result_state type;} ; \
|
Chris@16
|
2139 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2140 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2141 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2142 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2143 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2144 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2145 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2146 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2147 return (Param1()(evt,fsm,src,tgt)).function(Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt) \
|
Chris@16
|
2148 ,Param4()(evt,fsm,src,tgt),Param5()(evt,fsm,src,tgt),Param6()(evt,fsm,src,tgt));} \
|
Chris@16
|
2149 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2150 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2151 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2152 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2153 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2154 return (Param1()(evt,fsm,state)).function(Param2()(evt,fsm,state),Param3()(evt,fsm,state) \
|
Chris@16
|
2155 ,Param4()(evt,fsm,state),Param5()(evt,fsm,state),Param6()(evt,fsm,state));} }; \
|
Chris@16
|
2156 struct function_name ## tag{}; \
|
Chris@16
|
2157 struct functor ## Helper : proto::extends< proto::terminal< function_name ## tag >::type, \
|
Chris@16
|
2158 functor ## Helper , boost::msm::sm_domain> { functor ## Helper(){} \
|
Chris@16
|
2159 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5,class Arg6> \
|
Chris@16
|
2160 struct In {typedef functor <Arg1,Arg2,Arg3,Arg4,Arg5,Arg6> type;}; }; \
|
Chris@16
|
2161 functor ## Helper const function_name = functor ## Helper ();
|
Chris@16
|
2162
|
Chris@16
|
2163 #else
|
Chris@16
|
2164
|
Chris@16
|
2165 #define BOOST_MSM_EUML_FUNCTION(functor,function,function_name,result_trans,result_state) \
|
Chris@16
|
2166 template <class Param1=void , class Param2=void , class Param3=void , class Param4=void, \
|
Chris@16
|
2167 class Param5=void,class Enable=void > \
|
Chris@16
|
2168 struct functor : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Enable> > {}; \
|
Chris@16
|
2169 template <class Param1, class Param2, class Param3, class Param4, class Param5> \
|
Chris@16
|
2170 struct functor<Param1,Param2,Param3,Param4,Param5, \
|
Chris@16
|
2171 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
2172 typename ::boost::is_same<Param1,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
2173 typename ::boost::is_same<Param2,void>::type>::type>::type >::type> \
|
Chris@16
|
2174 : euml_action<functor<Param1,Param2,Param3,Param4,Param5> > { \
|
Chris@16
|
2175 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2176 typedef result_state type;} ; \
|
Chris@16
|
2177 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2178 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2179 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2180 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2181 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2182 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2183 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2184 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2185 return function (Param1()(evt,fsm,src,tgt));} \
|
Chris@16
|
2186 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2187 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2188 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2189 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2190 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2191 return function (Param1()(evt,fsm,state));} }; \
|
Chris@16
|
2192 template <class Param1, class Param2, class Param3, class Param4, class Param5> \
|
Chris@16
|
2193 struct functor<Param1,Param2,Param3,Param4,Param5, \
|
Chris@16
|
2194 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
2195 typename ::boost::is_same<Param2,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
2196 typename ::boost::is_same<Param3,void>::type>::type>::type >::type> \
|
Chris@16
|
2197 : euml_action<functor<Param1,Param2,Param3,Param4,Param5> > { \
|
Chris@16
|
2198 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2199 typedef result_state type;} ; \
|
Chris@16
|
2200 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2201 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2202 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2203 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2204 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2205 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2206 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2207 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2208 return function (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt));} \
|
Chris@16
|
2209 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2210 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2211 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2212 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2213 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2214 return function (Param1()(evt,fsm,state),Param2()(evt,fsm,state));} }; \
|
Chris@16
|
2215 template <class Param1, class Param2, class Param3, class Param4, class Param5> \
|
Chris@16
|
2216 struct functor<Param1,Param2,Param3,Param4,Param5, \
|
Chris@16
|
2217 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
2218 typename ::boost::is_same<Param3,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
2219 typename ::boost::is_same<Param4,void>::type>::type>::type >::type> \
|
Chris@16
|
2220 : euml_action<functor<Param1,Param2,Param3,Param4,Param5> > { \
|
Chris@16
|
2221 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2222 typedef result_state type;} ; \
|
Chris@16
|
2223 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2224 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2225 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2226 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2227 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2228 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2229 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2230 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2231 return function (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));} \
|
Chris@16
|
2232 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2233 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2234 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2235 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2236 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2237 return function (Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state));} }; \
|
Chris@16
|
2238 template <class Param1, class Param2, class Param3, class Param4, class Param5> \
|
Chris@16
|
2239 struct functor<Param1,Param2,Param3,Param4,Param5, \
|
Chris@16
|
2240 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
2241 typename ::boost::is_same<Param4,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
2242 typename ::boost::is_same<Param5,void>::type>::type>::type >::type> \
|
Chris@16
|
2243 : euml_action<functor<Param1,Param2,Param3,Param4,Param5> > { \
|
Chris@16
|
2244 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2245 typedef result_state type;} ; \
|
Chris@16
|
2246 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2247 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2248 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2249 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2250 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2251 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2252 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2253 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2254 return function (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt) \
|
Chris@16
|
2255 ,Param4()(evt,fsm,src,tgt));} \
|
Chris@16
|
2256 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2257 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2258 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2259 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2260 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2261 return function (Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state) \
|
Chris@16
|
2262 ,Param4()(evt,fsm,state));} }; \
|
Chris@16
|
2263 template <class Param1, class Param2, class Param3, class Param4, class Param5> \
|
Chris@16
|
2264 struct functor<Param1,Param2,Param3,Param4,Param5, \
|
Chris@16
|
2265 typename ::boost::disable_if<typename ::boost::is_same<Param5,void>::type>::type> \
|
Chris@16
|
2266 : euml_action<functor<Param1,Param2,Param3,Param4,Param5> > { \
|
Chris@16
|
2267 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2268 typedef result_state type;} ; \
|
Chris@16
|
2269 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2270 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2271 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2272 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2273 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2274 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2275 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2276 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2277 return function (Param1()(evt,fsm,src,tgt),Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt) \
|
Chris@16
|
2278 ,Param4()(evt,fsm,src,tgt),Param5()(evt,fsm,src,tgt));} \
|
Chris@16
|
2279 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2280 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2281 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2282 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2283 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2284 return function (Param1()(evt,fsm,state),Param2()(evt,fsm,state),Param3()(evt,fsm,state) \
|
Chris@16
|
2285 ,Param4()(evt,fsm,state),Param5()(evt,fsm,state));} }; \
|
Chris@16
|
2286 struct function_name ## tag{}; \
|
Chris@16
|
2287 struct functor ## Helper : proto::extends< proto::terminal< function_name ## tag >::type, \
|
Chris@16
|
2288 functor ## Helper , boost::msm::sm_domain> { functor ## Helper(){} \
|
Chris@16
|
2289 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5> \
|
Chris@16
|
2290 struct In {typedef functor <Arg1,Arg2,Arg3,Arg4,Arg5> type;}; }; \
|
Chris@16
|
2291 functor ## Helper const function_name = functor ## Helper ();
|
Chris@16
|
2292
|
Chris@16
|
2293 #define BOOST_MSM_EUML_METHOD(functor,function,function_name,result_trans,result_state) \
|
Chris@16
|
2294 template <class Param1=void , class Param2=void , class Param3=void , class Param4=void, \
|
Chris@16
|
2295 class Param5=void,class Enable=void > \
|
Chris@16
|
2296 struct functor : euml_action<functor<Param1,Param2,Param3,Param4,Param5,Enable> > {}; \
|
Chris@16
|
2297 template <class Param1, class Param2, class Param3, class Param4, class Param5> \
|
Chris@16
|
2298 struct functor<Param1,Param2,Param3,Param4,Param5, \
|
Chris@16
|
2299 typename ::boost::enable_if<typename ::boost::is_same<Param2,void>::type>::type> \
|
Chris@16
|
2300 : euml_action<functor<Param1,Param2,Param3,Param4,Param5> > { \
|
Chris@16
|
2301 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2302 typedef result_state type;} ; \
|
Chris@16
|
2303 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2304 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2305 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2306 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2307 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2308 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2309 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2310 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2311 return (Param1()(evt,fsm,src,tgt)).function();} \
|
Chris@16
|
2312 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2313 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2314 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2315 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2316 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2317 return (Param1()(evt,fsm,state)).function();} }; \
|
Chris@16
|
2318 template <class Param1, class Param2, class Param3, class Param4, class Param5> \
|
Chris@16
|
2319 struct functor<Param1,Param2,Param3,Param4,Param5, \
|
Chris@16
|
2320 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
2321 typename ::boost::is_same<Param2,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
2322 typename ::boost::is_same<Param3,void>::type>::type>::type >::type> \
|
Chris@16
|
2323 : euml_action<functor<Param1,Param2,Param3,Param4,Param5> > { \
|
Chris@16
|
2324 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2325 typedef result_state type;} ; \
|
Chris@16
|
2326 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2327 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2328 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2329 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2330 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2331 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2332 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2333 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2334 return (Param1()(evt,fsm,src,tgt)).function(Param2()(evt,fsm,src,tgt));} \
|
Chris@16
|
2335 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2336 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2337 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2338 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2339 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2340 return (Param1()(evt,fsm,state)).function(Param2()(evt,fsm,state));} }; \
|
Chris@16
|
2341 template <class Param1, class Param2, class Param3, class Param4, class Param5> \
|
Chris@16
|
2342 struct functor<Param1,Param2,Param3,Param4,Param5, \
|
Chris@16
|
2343 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
2344 typename ::boost::is_same<Param3,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
2345 typename ::boost::is_same<Param4,void>::type>::type>::type >::type> \
|
Chris@16
|
2346 : euml_action<functor<Param1,Param2,Param3,Param4,Param5> > { \
|
Chris@16
|
2347 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2348 typedef result_state type;} ; \
|
Chris@16
|
2349 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2350 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2351 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2352 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2353 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2354 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2355 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2356 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2357 return (Param1()(evt,fsm,src,tgt)).function(Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt));} \
|
Chris@16
|
2358 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2359 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2360 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2361 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2362 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2363 return (Param1()(evt,fsm,state)).function(Param2()(evt,fsm,state),Param3()(evt,fsm,state));} }; \
|
Chris@16
|
2364 template <class Param1, class Param2, class Param3, class Param4, class Param5> \
|
Chris@16
|
2365 struct functor<Param1,Param2,Param3,Param4,Param5, \
|
Chris@16
|
2366 typename ::boost::disable_if<typename ::boost::mpl::or_< \
|
Chris@16
|
2367 typename ::boost::is_same<Param4,void>::type,typename ::boost::mpl::not_< \
|
Chris@16
|
2368 typename ::boost::is_same<Param5,void>::type>::type>::type >::type> \
|
Chris@16
|
2369 : euml_action<functor<Param1,Param2,Param3,Param4,Param5> > { \
|
Chris@16
|
2370 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2371 typedef result_state type;} ; \
|
Chris@16
|
2372 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2373 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2374 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2375 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2376 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2377 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2378 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2379 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2380 return (Param1()(evt,fsm,src,tgt)).function(Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt) \
|
Chris@16
|
2381 ,Param4()(evt,fsm,src,tgt));} \
|
Chris@16
|
2382 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2383 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2384 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2385 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2386 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2387 return (Param1()(evt,fsm,state)).function(Param2()(evt,fsm,state),Param3()(evt,fsm,state) \
|
Chris@16
|
2388 ,Param4()(evt,fsm,state));} }; \
|
Chris@16
|
2389 template <class Param1, class Param2, class Param3, class Param4, class Param5> \
|
Chris@16
|
2390 struct functor<Param1,Param2,Param3,Param4,Param5, \
|
Chris@16
|
2391 typename ::boost::disable_if<typename ::boost::is_same<Param5,void>::type>::type> \
|
Chris@16
|
2392 : euml_action<functor<Param1,Param2,Param3,Param4,Param5> > { \
|
Chris@16
|
2393 template <class Event,class FSM,class STATE > struct state_action_result { \
|
Chris@16
|
2394 typedef result_state type;} ; \
|
Chris@16
|
2395 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2396 struct transition_action_result { typedef result_trans type;}; \
|
Chris@16
|
2397 typedef ::boost::mpl::set<boost::msm::front::state_action_tag,boost::msm::front::action_tag> tag_type; \
|
Chris@16
|
2398 template <class EVT,class FSM,class SourceState,class TargetState> \
|
Chris@16
|
2399 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2400 typename Param1::tag_type,boost::msm::front::action_tag>::type, \
|
Chris@16
|
2401 typename transition_action_result<EVT,FSM,SourceState,TargetState>::type >::type \
|
Chris@16
|
2402 operator()(EVT const& evt, FSM& fsm,SourceState& src,TargetState& tgt)const { \
|
Chris@16
|
2403 return (Param1()(evt,fsm,src,tgt)).function(Param2()(evt,fsm,src,tgt),Param3()(evt,fsm,src,tgt) \
|
Chris@16
|
2404 ,Param4()(evt,fsm,src,tgt),Param5()(evt,fsm,src,tgt));} \
|
Chris@16
|
2405 template <class Event,class FSM,class STATE> \
|
Chris@16
|
2406 typename ::boost::enable_if<typename ::boost::mpl::has_key< \
|
Chris@16
|
2407 typename Param1::tag_type,boost::msm::front::state_action_tag>::type, \
|
Chris@16
|
2408 typename state_action_result<Event,FSM,STATE>::type >::type \
|
Chris@16
|
2409 operator()(Event const& evt,FSM& fsm,STATE& state )const { \
|
Chris@16
|
2410 return (Param1()(evt,fsm,state)).function(Param2()(evt,fsm,state),Param3()(evt,fsm,state) \
|
Chris@16
|
2411 ,Param4()(evt,fsm,state),Param5()(evt,fsm,state));} }; \
|
Chris@16
|
2412 struct function_name ## tag{}; \
|
Chris@16
|
2413 struct functor ## Helper : proto::extends< proto::terminal< function_name ## tag >::type, \
|
Chris@16
|
2414 functor ## Helper , boost::msm::sm_domain> { functor ## Helper(){} \
|
Chris@16
|
2415 template <class Arg1,class Arg2,class Arg3,class Arg4,class Arg5> \
|
Chris@16
|
2416 struct In {typedef functor <Arg1,Arg2,Arg3,Arg4,Arg5> type;}; }; \
|
Chris@16
|
2417 functor ## Helper const function_name = functor ## Helper ();
|
Chris@16
|
2418
|
Chris@16
|
2419 #endif
|
Chris@16
|
2420
|
Chris@16
|
2421 #define RESULT_TYPE2_PARAM1 typename get_result_type2<Param1,Event,FSM,STATE>::type
|
Chris@16
|
2422 #define RESULT_TYPE_PARAM1 typename get_result_type<Param1,EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
2423 #define RESULT_TYPE2_PARAM2 typename get_result_type2<Param2,Event,FSM,STATE>::type
|
Chris@16
|
2424 #define RESULT_TYPE_PARAM2 typename get_result_type<Param2,EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
2425 #define RESULT_TYPE2_PARAM3 typename get_result_type2<Param3,Event,FSM,STATE>::type
|
Chris@16
|
2426 #define RESULT_TYPE_PARAM3 typename get_result_type<Param3,EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
2427 #define RESULT_TYPE2_PARAM4 typename get_result_type2<Param4,Event,FSM,STATE>::type
|
Chris@16
|
2428 #define RESULT_TYPE_PARAM4 typename get_result_type<Param4,EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
2429 #define RESULT_TYPE2_PARAM5 typename get_result_type2<Param5,Event,FSM,STATE>::type
|
Chris@16
|
2430 #define RESULT_TYPE_PARAM5 typename get_result_type<Param5,EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
2431 #define RESULT_TYPE2_PARAM6 typename get_result_type2<Param6,Event,FSM,STATE>::type
|
Chris@16
|
2432 #define RESULT_TYPE_PARAM6 typename get_result_type<Param6,EVT,FSM,SourceState,TargetState>::type
|
Chris@16
|
2433
|
Chris@16
|
2434
|
Chris@16
|
2435 #define RESULT_TYPE2_DIFF_TYPE_ITER_TRAITS_PARAM1 typename std::iterator_traits<typename get_result_type2<Param1,Event,FSM,STATE>::type>::difference_type
|
Chris@16
|
2436 #define RESULT_TYPE_DIFF_TYPE_ITER_TRAITS_PARAM1 typename std::iterator_traits<typename get_result_type<Param1,EVT,FSM,SourceState,TargetState>::type>::difference_type
|
Chris@16
|
2437
|
Chris@16
|
2438 #define RESULT_TYPE2_REMOVE_REF_PARAM1 typename ::boost::remove_reference<typename get_result_type2<Param1,Event,FSM,STATE>::type>::type
|
Chris@16
|
2439 #define RESULT_TYPE_REMOVE_REF_PARAM1 typename ::boost::remove_reference<typename get_result_type<Param1,EVT,FSM,SourceState,TargetState>::type>::type
|
Chris@16
|
2440
|
Chris@16
|
2441 #define RESULT_TYPE2_PAIR_REMOVE_REF_PARAM1 std::pair<RESULT_TYPE2_REMOVE_REF_PARAM1,RESULT_TYPE2_REMOVE_REF_PARAM1>
|
Chris@16
|
2442 #define RESULT_TYPE_PAIR_REMOVE_REF_PARAM1 std::pair<RESULT_TYPE_REMOVE_REF_PARAM1,RESULT_TYPE_REMOVE_REF_PARAM1>
|
Chris@16
|
2443
|
Chris@16
|
2444 #define RESULT_TYPE2_GET_REF_REMOVE_REF_PARAM1 typename get_reference<typename ::boost::remove_reference<typename get_result_type2<Param1,Event,FSM,STATE>::type>::type>::type
|
Chris@16
|
2445 #define RESULT_TYPE_GET_REF_REMOVE_REF_PARAM1 typename get_reference<typename ::boost::remove_reference<typename get_result_type<Param1,EVT,FSM,SourceState,TargetState>::type>::type>::type
|
Chris@16
|
2446
|
Chris@16
|
2447 #define RESULT_TYPE2_GET_ITERATOR_REMOVE_REF_PARAM1 typename get_iterator<typename ::boost::remove_reference<typename get_result_type2<Param1,Event,FSM,STATE>::type>::type>::type
|
Chris@16
|
2448 #define RESULT_TYPE_GET_ITERATOR_REMOVE_REF_PARAM1 typename get_iterator<typename ::boost::remove_reference<typename get_result_type<Param1,EVT,FSM,SourceState,TargetState>::type>::type>::type
|
Chris@16
|
2449
|
Chris@16
|
2450 #define RESULT_TYPE2_GET_REV_ITERATOR_REMOVE_REF_PARAM1 typename get_reverse_iterator<typename ::boost::remove_reference<typename get_result_type2<Param1,Event,FSM,STATE>::type>::type>::type
|
Chris@16
|
2451 #define RESULT_TYPE_GET_REV_ITERATOR_REMOVE_REF_PARAM1 typename get_reverse_iterator<typename ::boost::remove_reference<typename get_result_type<Param1,EVT,FSM,SourceState,TargetState>::type>::type>::type
|
Chris@16
|
2452
|
Chris@16
|
2453 #define RESULT_TYPE2_GET_SIZE_TYPE_REMOVE_REF_PARAM1 typename get_size_type<typename ::boost::remove_reference<typename get_result_type2<Param1,Event,FSM,STATE>::type>::type>::type
|
Chris@16
|
2454 #define RESULT_TYPE_GET_SIZE_TYPE_REMOVE_REF_PARAM1 typename get_size_type<typename ::boost::remove_reference<typename get_result_type<Param1,EVT,FSM,SourceState,TargetState>::type>::type>::type
|
Chris@16
|
2455
|
Chris@16
|
2456 #define BOOST_MSM_EUML_ACTION(instance_name) \
|
Chris@16
|
2457 struct instance_name ## _impl; \
|
Chris@101
|
2458 struct instance_name ## _helper : boost::msm::front::euml::euml_action<instance_name ## _impl> \
|
Chris@16
|
2459 { \
|
Chris@16
|
2460 instance_name ## _helper(){} \
|
Chris@16
|
2461 typedef instance_name ## _impl action_name; \
|
Chris@16
|
2462 }; \
|
Chris@16
|
2463 static instance_name ## _helper instance_name; \
|
Chris@16
|
2464 struct instance_name ## _impl : instance_name ## _helper
|
Chris@16
|
2465
|
Chris@16
|
2466 #define BOOST_MSM_EUML_DECLARE_ACTION(instance_name) \
|
Chris@16
|
2467 struct instance_name ; \
|
Chris@101
|
2468 struct instance_name ## _helper : boost::msm::front::euml::euml_action<instance_name > \
|
Chris@16
|
2469 { \
|
Chris@16
|
2470 instance_name ## _helper(){} \
|
Chris@16
|
2471 typedef instance_name action_name; \
|
Chris@16
|
2472 }; \
|
Chris@16
|
2473 struct instance_name : instance_name ## _helper
|
Chris@16
|
2474
|
Chris@16
|
2475
|
Chris@16
|
2476 #define BOOST_MSM_EUML_EVENT(instance_name) \
|
Chris@101
|
2477 struct instance_name ## _helper : boost::msm::front::euml::euml_event<instance_name ## _helper>{ \
|
Chris@16
|
2478 instance_name ## _helper(){} \
|
Chris@16
|
2479 instance_name ## _helper const& operator()() const {return *this;} }; \
|
Chris@16
|
2480 static instance_name ## _helper instance_name;
|
Chris@16
|
2481
|
Chris@16
|
2482 // an event matching any event
|
Chris@101
|
2483 struct kleene_ : boost::msm::front::euml::euml_event<kleene_>, public boost::any
|
Chris@16
|
2484 {
|
Chris@16
|
2485 kleene_() : boost::any(){}
|
Chris@16
|
2486 template<typename ValueType>
|
Chris@16
|
2487 kleene_(const ValueType & v) : boost::any(v){}
|
Chris@16
|
2488 };
|
Chris@16
|
2489 static kleene_ kleene;
|
Chris@16
|
2490
|
Chris@16
|
2491 #define BOOST_MSM_EUML_DECLARE_EVENT(instance_name) \
|
Chris@101
|
2492 struct instance_name : boost::msm::front::euml::euml_event<instance_name >{ \
|
Chris@16
|
2493 instance_name(){} \
|
Chris@16
|
2494 instance_name const& operator()() const {return *this;} };
|
Chris@16
|
2495
|
Chris@16
|
2496 #define MSM_EUML_CONCAT(param1,param2) param1
|
Chris@16
|
2497 #define MSM_EUML_EVENT_INSTANCE_HELPER_EXECUTE1(z, n, unused) ARG ## n arg ## n
|
Chris@16
|
2498 #define MSM_EUML_EVENT_INSTANCE_HELPER_EXECUTE2(z, n, unused) arg ## n
|
Chris@16
|
2499 #define MSM_EUML_EVENT_INSTANCE_HELPER_ATTRIBUTE_MAP_ENTRY(z, n, unused) \
|
Chris@16
|
2500 typename boost::fusion::result_of::first< \
|
Chris@16
|
2501 typename ::boost::remove_reference< \
|
Chris@16
|
2502 typename boost::fusion::result_of::at_c<T, BOOST_PP_CAT( , n)>::type>::type>::type \
|
Chris@16
|
2503
|
Chris@16
|
2504 #define MSM_EUML_EVENT_HELPER_GET_ATTRIBUTE(z, n, unused) \
|
Chris@16
|
2505 get_attribute( \
|
Chris@16
|
2506 typename boost::fusion::result_of::first< \
|
Chris@16
|
2507 typename ::boost::remove_reference< \
|
Chris@16
|
2508 typename boost::fusion::result_of::at_c<T, n>::type>::type>::type())=arg ## n;
|
Chris@16
|
2509
|
Chris@16
|
2510 #define MSM_EUML_EVENT_HELPER_CONSTRUCTORS(z, n, mytuple) \
|
Chris@16
|
2511 template <BOOST_PP_ENUM_PARAMS(n, class ARG)> \
|
Chris@16
|
2512 BOOST_PP_CAT(BOOST_PP_TUPLE_ELEM(2, 0, mytuple) , _helper)(BOOST_PP_ENUM(n, MSM_EUML_EVENT_INSTANCE_HELPER_EXECUTE1, ~ )): \
|
Chris@16
|
2513 BOOST_PP_TUPLE_ELEM(2, 1, mytuple)(){ \
|
Chris@16
|
2514 init(BOOST_PP_ENUM(n, MSM_EUML_EVENT_INSTANCE_HELPER_EXECUTE2, ~ ),attribute_vec());}
|
Chris@16
|
2515
|
Chris@16
|
2516 #define MSM_EUML_EVENT_INSTANCE_HELPER_ATTRIBUTE_MAP(z, n, unused) \
|
Chris@16
|
2517 template <BOOST_PP_ENUM_PARAMS(n, class ARG),class T> \
|
Chris@16
|
2518 void init(BOOST_PP_ENUM(n, MSM_EUML_EVENT_INSTANCE_HELPER_EXECUTE1, ~ ), \
|
Chris@16
|
2519 T,typename ::boost::enable_if< typename boost::mpl::eval_if< typename ::boost::fusion::traits::is_sequence<T>::type,size_helper<T,n>,::boost::mpl::false_>::type,void >::type* =0) \
|
Chris@16
|
2520 { \
|
Chris@16
|
2521 BOOST_PP_REPEAT_FROM_TO(0,n , \
|
Chris@16
|
2522 MSM_EUML_EVENT_HELPER_GET_ATTRIBUTE, ~) \
|
Chris@16
|
2523 }
|
Chris@16
|
2524
|
Chris@16
|
2525 #define MSM_EUML_EVENT_INSTANCE_HELPER_OPERATOR_IMPL(z, n, instance) \
|
Chris@16
|
2526 template <BOOST_PP_ENUM_PARAMS(n, class ARG)> \
|
Chris@16
|
2527 BOOST_PP_CAT(instance,_helper) operator() \
|
Chris@16
|
2528 (BOOST_PP_ENUM(n, MSM_EUML_EVENT_INSTANCE_HELPER_EXECUTE1, ~ ))const{ \
|
Chris@16
|
2529 return BOOST_PP_CAT(instance,_helper) (BOOST_PP_ENUM(n, MSM_EUML_EVENT_INSTANCE_HELPER_EXECUTE2, ~ ));}
|
Chris@101
|
2530
|
Chris@101
|
2531 #if defined(FUSION_MAX_MAP_SIZE)
|
Chris@16
|
2532
|
Chris@101
|
2533 #define BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(instance_name, attributes_name) \
|
Chris@16
|
2534 struct instance_name ## _helper : \
|
Chris@101
|
2535 boost::msm::front::euml::euml_event<instance_name ## _helper> , public attributes_name \
|
Chris@16
|
2536 { \
|
Chris@16
|
2537 template <class T,int checked_size> struct size_helper \
|
Chris@16
|
2538 { \
|
Chris@16
|
2539 typedef typename ::boost::mpl::less_equal< \
|
Chris@16
|
2540 typename ::boost::fusion::result_of::size<T>::type, \
|
Chris@16
|
2541 ::boost::mpl::int_<checked_size> >::type type; \
|
Chris@16
|
2542 }; \
|
Chris@16
|
2543 BOOST_PP_CAT(instance_name,_helper()) : attributes_name(){} \
|
Chris@16
|
2544 typedef attributes_name::attributes_type attribute_map; \
|
Chris@16
|
2545 typedef ::boost::fusion::result_of::as_vector<attribute_map>::type attribute_vec; \
|
Chris@16
|
2546 BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(FUSION_MAX_MAP_SIZE ,1), \
|
Chris@16
|
2547 MSM_EUML_EVENT_HELPER_CONSTRUCTORS, (instance_name,attributes_name)) \
|
Chris@16
|
2548 BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(FUSION_MAX_MAP_SIZE ,1), \
|
Chris@16
|
2549 MSM_EUML_EVENT_INSTANCE_HELPER_ATTRIBUTE_MAP, ~) \
|
Chris@16
|
2550 BOOST_PP_CAT(instance_name,_helper) operator()(){ \
|
Chris@16
|
2551 return BOOST_PP_CAT(instance_name,_helper)();} \
|
Chris@16
|
2552 BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(FUSION_MAX_MAP_SIZE ,1), \
|
Chris@16
|
2553 MSM_EUML_EVENT_INSTANCE_HELPER_OPERATOR_IMPL, instance_name) \
|
Chris@16
|
2554 }; \
|
Chris@16
|
2555 static instance_name ## _helper instance_name;
|
Chris@16
|
2556
|
Chris@101
|
2557 #else
|
Chris@101
|
2558
|
Chris@101
|
2559 #define BOOST_MSM_EUML_EVENT_WITH_ATTRIBUTES(instance_name, attributes_name) \
|
Chris@101
|
2560 struct instance_name ## _helper : \
|
Chris@101
|
2561 boost::msm::front::euml::euml_event<instance_name ## _helper> , public attributes_name \
|
Chris@101
|
2562 { \
|
Chris@101
|
2563 template <class T,int checked_size> struct size_helper \
|
Chris@101
|
2564 { \
|
Chris@101
|
2565 typedef typename ::boost::mpl::less_equal< \
|
Chris@101
|
2566 typename ::boost::fusion::result_of::size<T>::type, \
|
Chris@101
|
2567 ::boost::mpl::int_<checked_size> >::type type; \
|
Chris@101
|
2568 }; \
|
Chris@101
|
2569 BOOST_PP_CAT(instance_name,_helper()) : attributes_name(){} \
|
Chris@101
|
2570 typedef attributes_name::attributes_type attribute_map; \
|
Chris@101
|
2571 typedef ::boost::fusion::result_of::as_vector<attribute_map>::type attribute_vec; \
|
Chris@101
|
2572 BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(10 ,1), \
|
Chris@101
|
2573 MSM_EUML_EVENT_HELPER_CONSTRUCTORS, (instance_name,attributes_name)) \
|
Chris@101
|
2574 BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(10 ,1), \
|
Chris@101
|
2575 MSM_EUML_EVENT_INSTANCE_HELPER_ATTRIBUTE_MAP, ~) \
|
Chris@101
|
2576 BOOST_PP_CAT(instance_name,_helper) operator()(){ \
|
Chris@101
|
2577 return BOOST_PP_CAT(instance_name,_helper)();} \
|
Chris@101
|
2578 BOOST_PP_REPEAT_FROM_TO(1,BOOST_PP_ADD(10 ,1), \
|
Chris@101
|
2579 MSM_EUML_EVENT_INSTANCE_HELPER_OPERATOR_IMPL, instance_name) \
|
Chris@101
|
2580 }; \
|
Chris@101
|
2581 static instance_name ## _helper instance_name;
|
Chris@101
|
2582
|
Chris@101
|
2583 #endif
|
Chris@101
|
2584
|
Chris@16
|
2585 #define BOOST_MSM_EUML_EVENT_NAME(instance_name) instance_name ## _helper
|
Chris@16
|
2586
|
Chris@16
|
2587 #define BOOST_MSM_EUML_FLAG_NAME(instance_name) instance_name ## _helper
|
Chris@16
|
2588
|
Chris@16
|
2589 #define BOOST_MSM_EUML_FLAG(instance_name) \
|
Chris@101
|
2590 struct instance_name ## _helper : boost::msm::front::euml::euml_flag<instance_name ## _helper>{}; \
|
Chris@16
|
2591 static instance_name ## _helper instance_name;
|
Chris@16
|
2592
|
Chris@16
|
2593 #define BOOST_MSM_EUML_DECLARE_FLAG(instance_name) \
|
Chris@101
|
2594 struct instance_name : boost::msm::front::euml::euml_flag<instance_name >{};
|
Chris@16
|
2595
|
Chris@16
|
2596 #define BOOST_MSM_EUML_STATE_NAME(instance_name) instance_name ## _helper
|
Chris@16
|
2597
|
Chris@16
|
2598 #define BOOST_MSM_EUML_BUILD_STT_HELPER build_stt(
|
Chris@16
|
2599 #define BOOST_MSM_EUML_BUILD_INTERNAL_STT_HELPER build_internal_stt(
|
Chris@16
|
2600 #define BOOST_MSM_EUML_BUILD_STT_HELPER2(expr) expr)
|
Chris@16
|
2601 #define BOOST_MSM_EUML_ENTRY_STATE_HELPER(expr) ,expr
|
Chris@16
|
2602
|
Chris@16
|
2603
|
Chris@16
|
2604 #define BOOST_MSM_EUML_ATTRIBUTES(expr,instance_name) \
|
Chris@16
|
2605 typedef BOOST_TYPEOF(build_attributes expr) instance_name;
|
Chris@16
|
2606
|
Chris@16
|
2607 // following macros declare a state type but do not create an instance
|
Chris@16
|
2608 #define BOOST_MSM_EUML_DECLARE_STATE(expr,instance_name) \
|
Chris@16
|
2609 struct instance_name ## tag{}; \
|
Chris@16
|
2610 typedef BOOST_TYPEOF(build_state<instance_name ## tag> expr) instance_name;
|
Chris@16
|
2611
|
Chris@16
|
2612 #define BOOST_MSM_EUML_DECLARE_INTERRUPT_STATE(expr,instance_name) \
|
Chris@16
|
2613 struct instance_name ## tag{}; \
|
Chris@16
|
2614 typedef BOOST_TYPEOF(build_interrupt_state<instance_name ## tag> expr) instance_name;
|
Chris@16
|
2615
|
Chris@16
|
2616 #define BOOST_MSM_EUML_DECLARE_TERMINATE_STATE(expr,instance_name) \
|
Chris@16
|
2617 struct instance_name ## tag{}; \
|
Chris@16
|
2618 typedef BOOST_TYPEOF(build_terminate_state<instance_name ## tag> expr) instance_name;
|
Chris@16
|
2619
|
Chris@16
|
2620 #define BOOST_MSM_EUML_DECLARE_EXPLICIT_ENTRY_STATE(region,expr,instance_name) \
|
Chris@16
|
2621 struct instance_name ## tag{}; \
|
Chris@16
|
2622 typedef BOOST_TYPEOF(build_explicit_entry_state<instance_name ## tag BOOST_MSM_EUML_ENTRY_STATE_HELPER(region) > expr) instance_name;
|
Chris@16
|
2623
|
Chris@16
|
2624 #define BOOST_MSM_EUML_DECLARE_ENTRY_STATE(region,expr,instance_name) \
|
Chris@16
|
2625 struct instance_name ## tag{}; \
|
Chris@16
|
2626 typedef BOOST_TYPEOF(build_entry_state<instance_name ## tag BOOST_MSM_EUML_ENTRY_STATE_HELPER(region) > expr) instance_name;
|
Chris@16
|
2627
|
Chris@16
|
2628 #define BOOST_MSM_EUML_DECLARE_EXIT_STATE(expr,instance_name) \
|
Chris@16
|
2629 struct instance_name ## tag{}; \
|
Chris@16
|
2630 typedef BOOST_TYPEOF(build_exit_state<instance_name ## tag> expr) instance_name;
|
Chris@16
|
2631
|
Chris@16
|
2632 #define BOOST_MSM_EUML_DECLARE_STATE_MACHINE(expr,instance_name) \
|
Chris@16
|
2633 struct instance_name ## tag{}; \
|
Chris@16
|
2634 typedef BOOST_TYPEOF(build_sm<instance_name ## tag> expr) instance_name;
|
Chris@16
|
2635
|
Chris@16
|
2636 #define BOOST_MSM_EUML_DECLARE_TRANSITION_TABLE(expr,instance_name) \
|
Chris@16
|
2637 typedef int using_declared_table; \
|
Chris@16
|
2638 typedef BOOST_TYPEOF(BOOST_MSM_EUML_BUILD_STT_HELPER BOOST_MSM_EUML_BUILD_STT_HELPER2(expr)) instance_name;
|
Chris@16
|
2639
|
Chris@16
|
2640 #define BOOST_MSM_EUML_DECLARE_INTERNAL_TRANSITION_TABLE(expr) \
|
Chris@16
|
2641 typedef BOOST_TYPEOF( \
|
Chris@16
|
2642 BOOST_MSM_EUML_BUILD_INTERNAL_STT_HELPER BOOST_MSM_EUML_BUILD_STT_HELPER2(expr)) internal_transition_table;
|
Chris@16
|
2643
|
Chris@16
|
2644 // following macros declare a state type and create an instance
|
Chris@16
|
2645 #define BOOST_MSM_EUML_STATE(expr,instance_name) \
|
Chris@16
|
2646 struct instance_name ## tag{}; \
|
Chris@16
|
2647 typedef BOOST_TYPEOF(build_state<instance_name ## tag> expr) instance_name ## _helper; \
|
Chris@16
|
2648 static instance_name ## _helper instance_name;
|
Chris@16
|
2649
|
Chris@16
|
2650 #define BOOST_MSM_EUML_INTERRUPT_STATE(expr,instance_name) \
|
Chris@16
|
2651 struct instance_name ## tag{}; \
|
Chris@16
|
2652 typedef BOOST_TYPEOF(build_interrupt_state<instance_name ## tag> expr) instance_name ## _helper; \
|
Chris@16
|
2653 static instance_name ## _helper instance_name;
|
Chris@16
|
2654
|
Chris@16
|
2655 #define BOOST_MSM_EUML_TERMINATE_STATE(expr,instance_name) \
|
Chris@16
|
2656 struct instance_name ## tag{}; \
|
Chris@16
|
2657 typedef BOOST_TYPEOF(build_terminate_state<instance_name ## tag> expr) instance_name ## _helper; \
|
Chris@16
|
2658 static instance_name ## _helper instance_name;
|
Chris@16
|
2659
|
Chris@16
|
2660 #define BOOST_MSM_EUML_EXPLICIT_ENTRY_STATE(region,expr,instance_name) \
|
Chris@16
|
2661 struct instance_name ## tag{}; \
|
Chris@16
|
2662 typedef BOOST_TYPEOF(build_explicit_entry_state<instance_name ## tag BOOST_MSM_EUML_ENTRY_STATE_HELPER(region) > expr) instance_name ## _helper; \
|
Chris@16
|
2663 static instance_name ## _helper instance_name;
|
Chris@16
|
2664
|
Chris@16
|
2665 #define BOOST_MSM_EUML_ENTRY_STATE(region,expr,instance_name) \
|
Chris@16
|
2666 struct instance_name ## tag{}; \
|
Chris@16
|
2667 typedef BOOST_TYPEOF(build_entry_state<instance_name ## tag BOOST_MSM_EUML_ENTRY_STATE_HELPER(region) > expr) instance_name ## _helper; \
|
Chris@16
|
2668 static instance_name ## _helper instance_name;
|
Chris@16
|
2669
|
Chris@16
|
2670 #define BOOST_MSM_EUML_EXIT_STATE(expr,instance_name) \
|
Chris@16
|
2671 struct instance_name ## tag{}; \
|
Chris@16
|
2672 typedef BOOST_TYPEOF(build_exit_state<instance_name ## tag> expr) instance_name ## _helper; \
|
Chris@16
|
2673 static instance_name ## _helper instance_name;
|
Chris@16
|
2674
|
Chris@16
|
2675
|
Chris@16
|
2676 #ifndef BOOST_MSVC
|
Chris@16
|
2677
|
Chris@16
|
2678 #define BOOST_MSM_EUML_TRANSITION_TABLE(expr,instance_name) \
|
Chris@16
|
2679 typedef BOOST_TYPEOF(BOOST_MSM_EUML_BUILD_STT_HELPER BOOST_MSM_EUML_BUILD_STT_HELPER2(expr)) instance_name ## _def; \
|
Chris@16
|
2680 struct instance_name ## _helper : public instance_name ## _def{instance_name ## _helper(){}}; \
|
Chris@16
|
2681 static instance_name ## _helper instance_name;
|
Chris@16
|
2682
|
Chris@16
|
2683 #define BOOST_MSM_EUML_INTERNAL_TRANSITION_TABLE(expr,instance_name) \
|
Chris@16
|
2684 typedef BOOST_TYPEOF(BOOST_MSM_EUML_BUILD_INTERNAL_STT_HELPER BOOST_MSM_EUML_BUILD_STT_HELPER2(expr)) instance_name ## _def; \
|
Chris@16
|
2685 struct instance_name ## _helper : public instance_name ## _def{instance_name ## _helper(){}}; \
|
Chris@16
|
2686 static instance_name ## _helper instance_name;
|
Chris@16
|
2687
|
Chris@16
|
2688 #else
|
Chris@16
|
2689
|
Chris@16
|
2690 #define BOOST_MSM_EUML_TRANSITION_TABLE(expr,instance_name) \
|
Chris@16
|
2691 struct instance_name ## _helper : \
|
Chris@16
|
2692 public BOOST_TYPEOF(BOOST_MSM_EUML_BUILD_STT_HELPER BOOST_MSM_EUML_BUILD_STT_HELPER2(expr)) \
|
Chris@16
|
2693 {instance_name ## _helper(){}} ; \
|
Chris@16
|
2694 static instance_name ## _helper instance_name;
|
Chris@16
|
2695
|
Chris@16
|
2696 #define BOOST_MSM_EUML_INTERNAL_TRANSITION_TABLE(expr,instance_name) \
|
Chris@16
|
2697 struct instance_name ## _helper : \
|
Chris@16
|
2698 public BOOST_TYPEOF(BOOST_MSM_EUML_BUILD_INTERNAL_STT_HELPER BOOST_MSM_EUML_BUILD_STT_HELPER2(expr)) \
|
Chris@16
|
2699 {instance_name ## _helper(){}} ; \
|
Chris@16
|
2700 static instance_name ## _helper instance_name;
|
Chris@16
|
2701
|
Chris@16
|
2702 #endif
|
Chris@16
|
2703
|
Chris@16
|
2704 }}}} // boost::msm::front::euml
|
Chris@16
|
2705
|
Chris@16
|
2706 namespace boost { namespace msm{
|
Chris@16
|
2707 template<>
|
Chris@16
|
2708 struct is_kleene_event< boost::msm::front::euml::kleene_ >
|
Chris@16
|
2709 {
|
Chris@16
|
2710 typedef ::boost::mpl::true_ type;
|
Chris@16
|
2711 };
|
Chris@16
|
2712 }}
|
Chris@16
|
2713
|
Chris@16
|
2714 #endif // BOOST_MSM_FRONT_EUML_COMMON_H
|