1 #ifndef LIBJMMCG_CORE_MSM_HPP
2 #define LIBJMMCG_CORE_MSM_HPP
34 template<
class States,
class EndStates>
37 using end_states=EndStates;
66 template<
class ...Args>
67 explicit no_op(Args &&...)
noexcept(
true) {}
69 template<
auto state,
auto next,
class ...Args>
71 static constexpr void noop()
noexcept(
true) {}
82 template<
class Row,
class... Rows>
86 state_transition_table()=
delete;
95 using element_type=STT;
96 using states=
typename element_type::transition_table::states;
97 using end_states=
typename element_type::transition_table::end_states;
98 using rows_t=
typename element_type::transition_table;
117 template<
class... Params>
128 template<
class... Params>
146 template<
class States,
class EndStates>
149 using end_states=EndStates;
178 template<
class ...Args>
179 explicit no_op(Args &&...)
noexcept(
true) {}
181 template<
auto state,
auto next,
class ...Args>
183 static constexpr void noop()
noexcept(
true) {}
194 template<
class Row,
class... Rows>
198 template<
class Row,
class... Rows>
202 state_transition_table()=
delete;
211 using element_type=STT;
212 using states=
typename element_type::transition_table::states;
213 using end_states=
typename element_type::transition_table::end_states;
214 using rows_t=
typename element_type::transition_table;
233 template<
class... Params>
234 constexpr end_states
process(states s, Params &&...p)
const noexcept(
false);
244 template<
class... Params>
245 constexpr end_states
process(states s, Params &&...p)
noexcept(
false);
259 template<
class States,
class EndStates>
262 using end_states=EndStates;
291 template<
class ...Args>
292 explicit no_op(Args &&...)
noexcept(
true) {}
294 template<
auto state,
auto next,
class ...Args>
296 static constexpr void noop()
noexcept(
true) {}
307 template<
class Row,
class... Rows>
311 template<
class Row,
class... Rows>
314 state_transition_table()=
delete;
323 using element_type=STT;
324 using states=
typename element_type::transition_table::states;
325 using end_states=
typename element_type::transition_table::end_states;
326 using rows_t=
typename element_type::transition_table;
345 template<
class... Params>
346 constexpr end_states
process(states s, Params &&...p)
const noexcept(
false);
356 template<
class... Params>
357 constexpr end_states
process(states s, Params &&...p)
noexcept(
false);
368 template<
class States,
class EndStates>
371 using end_states=EndStates;
373 struct compat_row_base;
401 template<
class ...Args>
402 explicit no_op(Args &&...)
noexcept(
true) {}
404 template<
auto state,
auto next,
class ...Args>
406 static constexpr void noop()
noexcept(
true) {}
415 template<
class Row,
class... Rows>
419 template<
class Row>
struct get_state_as_hash;
421 state_transition_table()=
delete;
430 using element_type=STT;
431 using states=
typename element_type::transition_table::states;
432 using end_states=
typename element_type::transition_table::end_states;
435 using states_to_actions_table_t=
typename element_type::transition_table::states_to_actions_table_t;
455 template<
class Params>
456 end_states
process(states s, Params &p)
const noexcept(
470 template<
class Params>
471 end_states
process(states s, Params &p)
noexcept(
478 const states_to_actions_table_t tbl;