]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/msm/include/boost/msm/front/euml/guard_grammar.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / msm / include / boost / msm / front / euml / guard_grammar.hpp
CommitLineData
7c673cae
FG
1// Copyright 2008 Christophe Henry
2// henry UNDERSCORE christophe AT hotmail DOT com
3// This is an extended version of the state machine available in the boost::mpl library
4// Distributed under the same license as the original.
5// Copyright for the original version:
6// Copyright 2005 David Abrahams and Aleksey Gurtovoy. Distributed
7// under the Boost Software License, Version 1.0. (See accompanying
8// file LICENSE_1_0.txt or copy at
9// http://www.boost.org/LICENSE_1_0.txt)
10
11#ifndef BOOST_MSM_FRONT_EUML_GUARD_GRAMMAR_H
12#define BOOST_MSM_FRONT_EUML_GUARD_GRAMMAR_H
13
14#include <boost/msm/front/euml/common.hpp>
15#include <boost/msm/front/euml/operator.hpp>
16#include <boost/msm/front/euml/state_grammar.hpp>
17
18namespace boost { namespace msm { namespace front { namespace euml
19{
20struct BuildGuards;
21struct BuildActions;
22
23struct BuildGuardsCases
24{
25 // The primary template matches nothing:
26 template<typename Tag>
27 struct case_
28 : proto::not_<proto::_>
29 {};
30};
31template<>
32struct BuildGuardsCases::case_<proto::tag::logical_or>
33 : proto::when<
34 proto::logical_or<BuildGuards,BuildGuards >,
35 Or_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
36 >
37{};
38template<>
39struct BuildGuardsCases::case_<proto::tag::logical_and>
40 : proto::when<
41 proto::logical_and<BuildGuards,BuildGuards >,
42 And_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
43 >
44{};
45template<>
46struct BuildGuardsCases::case_<proto::tag::logical_not>
47 : proto::when<
48 proto::logical_not<BuildGuards >,
49 Not_<BuildGuards(proto::_child)>()
50 >
51{};
52template<>
53struct BuildGuardsCases::case_<proto::tag::less>
54 : proto::when<
55 proto::less<BuildGuards, BuildGuards >,
56 Less_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
57 >
58{};
59template<>
60struct BuildGuardsCases::case_<proto::tag::less_equal>
61 : proto::when<
62 proto::less_equal<BuildGuards, BuildGuards >,
63 LessEqual_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
64 >
65{};
66template<>
67struct BuildGuardsCases::case_<proto::tag::greater>
68 : proto::when<
69 proto::greater<BuildGuards, BuildGuards >,
70 Greater_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
71 >
72{};
73template<>
74struct BuildGuardsCases::case_<proto::tag::greater_equal>
75 : proto::when<
76 proto::greater_equal<BuildGuards, BuildGuards >,
77 GreaterEqual_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
78 >
79{};
80template<>
81struct BuildGuardsCases::case_<proto::tag::equal_to>
82 : proto::when<
83 proto::equal_to<BuildGuards, BuildGuards >,
84 EqualTo_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
85 >
86{};
87template<>
88struct BuildGuardsCases::case_<proto::tag::not_equal_to>
89 : proto::when<
90 proto::not_equal_to<BuildGuards, BuildGuards >,
91 NotEqualTo_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
92 >
93{};
94template<>
95struct BuildGuardsCases::case_<proto::tag::pre_inc>
96 : proto::when<
97 proto::pre_inc<BuildGuards >,
98 Pre_inc_<BuildGuards(proto::_child)>()
99 >
100{};
101template<>
102struct BuildGuardsCases::case_<proto::tag::dereference>
103 : proto::when<
104 proto::dereference<BuildGuards >,
105 Deref_<BuildGuards(proto::_child)>()
106 >
107{};
108template<>
109struct BuildGuardsCases::case_<proto::tag::pre_dec>
110 : proto::when<
111 proto::pre_dec<BuildGuards >,
112 Pre_dec_<BuildGuards(proto::_child)>()
113 >
114{};
115template<>
116struct BuildGuardsCases::case_<proto::tag::post_inc>
117 : proto::when<
118 proto::post_inc<BuildGuards >,
119 Post_inc_<BuildGuards(proto::_child)>()
120 >
121{};
122template<>
123struct BuildGuardsCases::case_<proto::tag::post_dec>
124 : proto::when<
125 proto::post_dec<BuildGuards >,
126 Post_dec_<BuildGuards(proto::_child)>()
127 >
128{};
129template<>
130struct BuildGuardsCases::case_<proto::tag::plus>
131 : proto::when<
132 proto::plus<BuildGuards,BuildGuards >,
133 Plus_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
134 >
135{};
136template<>
137struct BuildGuardsCases::case_<proto::tag::minus>
138 : proto::when<
139 proto::minus<BuildGuards,BuildGuards >,
140 Minus_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
141 >
142{};
143template<>
144struct BuildGuardsCases::case_<proto::tag::multiplies>
145 : proto::when<
146 proto::multiplies<BuildGuards,BuildGuards >,
147 Multiplies_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
148 >
149{};
150template<>
151struct BuildGuardsCases::case_<proto::tag::divides>
152 : proto::when<
153 proto::divides<BuildGuards,BuildGuards >,
154 Divides_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
155 >
156{};
157template<>
158struct BuildGuardsCases::case_<proto::tag::modulus>
159 : proto::when<
160 proto::modulus<BuildGuards,BuildGuards >,
161 Modulus_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
162 >
163{};
164template<>
165struct BuildGuardsCases::case_<proto::tag::bitwise_and>
166 : proto::when<
167 proto::bitwise_and<BuildGuards,BuildGuards >,
168 Bitwise_And_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
169 >
170{};
171template<>
172struct BuildGuardsCases::case_<proto::tag::bitwise_or>
173 : proto::when<
174 proto::bitwise_or<BuildGuards,BuildGuards >,
175 Bitwise_Or_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
176 >
177{};
178template<>
179struct BuildGuardsCases::case_<proto::tag::subscript>
180 : proto::when<
181 proto::subscript<BuildGuards,BuildGuards >,
182 Subscript_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
183 >
184{};
185template<>
186struct BuildGuardsCases::case_<proto::tag::plus_assign>
187 : proto::when<
188 proto::plus_assign<BuildGuards,BuildGuards >,
189 Plus_Assign_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
190 >
191{};
192template<>
193struct BuildGuardsCases::case_<proto::tag::minus_assign>
194 : proto::when<
195 proto::minus_assign<BuildGuards,BuildGuards >,
196 Minus_Assign_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
197 >
198{};
199template<>
200struct BuildGuardsCases::case_<proto::tag::multiplies_assign>
201 : proto::when<
202 proto::multiplies_assign<BuildGuards,BuildGuards >,
203 Multiplies_Assign_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
204 >
205{};
206template<>
207struct BuildGuardsCases::case_<proto::tag::divides_assign>
208 : proto::when<
209 proto::divides_assign<BuildGuards,BuildGuards >,
210 Divides_Assign_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
211 >
212{};
213template<>
214struct BuildGuardsCases::case_<proto::tag::modulus_assign>
215 : proto::when<
216 proto::modulus_assign<BuildGuards,BuildGuards >,
217 Modulus_Assign_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
218 >
219{};
220template<>
221struct BuildGuardsCases::case_<proto::tag::shift_left_assign>
222 : proto::when<
223 proto::shift_left_assign<BuildGuards,BuildGuards >,
224 ShiftLeft_Assign_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
225 >
226{};
227template<>
228struct BuildGuardsCases::case_<proto::tag::shift_right_assign>
229 : proto::when<
230 proto::shift_right_assign<BuildGuards,BuildGuards >,
231 ShiftRight_Assign_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
232 >
233{};
234template<>
235struct BuildGuardsCases::case_<proto::tag::shift_left>
236 : proto::when<
237 proto::shift_left<BuildGuards,BuildGuards >,
238 ShiftLeft_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
239 >
240{};
241template<>
242struct BuildGuardsCases::case_<proto::tag::shift_right>
243 : proto::when<
244 proto::shift_right<BuildGuards,BuildGuards >,
245 ShiftRight_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
246 >
247{};
248template<>
249struct BuildGuardsCases::case_<proto::tag::assign>
250 : proto::when<
251 proto::assign<BuildGuards,BuildGuards >,
252 Assign_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
253 >
254{};
255template<>
256struct BuildGuardsCases::case_<proto::tag::bitwise_xor>
257 : proto::when<
258 proto::bitwise_xor<BuildGuards,BuildGuards >,
259 Bitwise_Xor_<BuildGuards(proto::_left),BuildGuards(proto::_right)>()
260 >
261{};
262template<>
263struct BuildGuardsCases::case_<proto::tag::negate>
264 : proto::when<
265 proto::negate<BuildGuards >,
266 Unary_Minus_<BuildGuards(proto::_child)>()
267 >
268{};
269
270template<>
271struct BuildGuardsCases::case_<proto::tag::function>
272 : proto::or_<
273 proto::when<
274 proto::function<proto::terminal<if_tag>,BuildGuards,BuildGuards,BuildGuards >,
275 If_Else_<BuildGuards(proto::_child_c<1>),
276 BuildGuards(proto::_child_c<2>),
277 BuildGuards(proto::_child_c<3>) >()
278 >,
279 proto::when<
280 proto::function<proto::terminal<proto::_> >,
281 get_fct<proto::_child_c<0> >()
282 >,
283 proto::when<
284 proto::function<proto::terminal<proto::_>,BuildActions >,
285 get_fct<proto::_child_c<0>,BuildActions(proto::_child_c<1>) >()
286 >,
287 proto::when<
288 proto::function<proto::terminal<proto::_>,BuildActions,BuildActions >,
289 get_fct<proto::_child_c<0>,BuildActions(proto::_child_c<1>),BuildActions(proto::_child_c<2>) >()
290 >,
291 proto::when<
292 proto::function<proto::terminal<proto::_>,BuildActions,BuildActions,BuildActions >,
293 get_fct<proto::_child_c<0>,BuildActions(proto::_child_c<1>)
294 ,BuildActions(proto::_child_c<2>),BuildActions(proto::_child_c<3>) >()
295 >,
296 proto::when<
297 proto::function<proto::terminal<proto::_>,BuildActions,BuildActions,BuildActions,BuildActions >,
298 get_fct<proto::_child_c<0>
299 ,BuildActions(proto::_child_c<1>),BuildActions(proto::_child_c<2>)
300 ,BuildActions(proto::_child_c<3>),BuildActions(proto::_child_c<4>) >()
301 >,
302 proto::when<
303 proto::function<proto::terminal<proto::_>,BuildActions,BuildActions,BuildActions,BuildActions,BuildActions >,
304 get_fct<proto::_child_c<0>
305 ,BuildActions(proto::_child_c<1>),BuildActions(proto::_child_c<2>)
306 ,BuildActions(proto::_child_c<3>),BuildActions(proto::_child_c<4>),BuildActions(proto::_child_c<5>) >()
307 >
308#ifdef BOOST_MSVC
309 ,proto::when<
310 proto::function<proto::terminal<proto::_>,BuildActions,BuildActions,BuildActions,BuildActions,BuildActions,BuildActions >,
311 get_fct<proto::_child_c<0>
312 ,BuildActions(proto::_child_c<1>),BuildActions(proto::_child_c<2>)
313 ,BuildActions(proto::_child_c<3>),BuildActions(proto::_child_c<4>)
314 ,BuildActions(proto::_child_c<5>),BuildActions(proto::_child_c<6>) >()
315 >
316#endif
317 >
318{};
319
320template<>
321struct BuildGuardsCases::case_<proto::tag::terminal>
322 : proto::or_<
323 proto::when <
324 proto::terminal<action_tag>,
325 get_action_name<proto::_ >()
326 >,
327 proto::when<
328 proto::terminal<state_tag>,
329 get_state_name<proto::_>()
330 >,
331 proto::when<
332 proto::terminal<flag_tag>,
333 proto::_
334 >,
335 proto::when<
336 proto::terminal<event_tag>,
337 proto::_
338 >,
339 proto::when<
340 proto::terminal<fsm_artefact_tag>,
341 get_fct<proto::_ >()
342 >,
343 proto::when<
344 proto::terminal<proto::_>,
345 proto::_value
346 >
347 >
348{};
349
350struct BuildGuards
351 : proto::switch_<BuildGuardsCases>
352{};
353
354}}}}
355
356#endif //BOOST_MSM_FRONT_EUML_GUARD_GRAMMAR_H