annotate DEPENDENCIES/generic/include/boost/msm/front/euml/guard_grammar.hpp @ 125:34e428693f5d vext

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