30#include <unordered_map>
42template<
typename state_t>
45template<
typename state_t>
48template<
typename state_t,
typename event_t>
49using transition_t = std::pair<std::pair<state_t, event_t>, std::tuple<guard_t, action_t, state_t>>;
51template<
typename state_t,
typename event_t>
54template<
typename state_t,
typename event_t>
63 return transition.first.first == m_state && transition.first.second == event;
65 if (it != m_transition_table.end()) {
66 const guard_t &guard = std::get<0>(it->second);
67 const action_t &action = std::get<1>(it->second);
68 const state_t &state = std::get<2>(it->second);
70 const auto it1 = m_leave_actions.find(m_state);
71 if (it1 != m_leave_actions.end()) {
76 const auto it2 = m_enter_actions.find(m_state);
77 if (it2 != m_enter_actions.end()) {
92 m_transition_table = transition_table;
96 m_enter_actions[state] = enter_action;
100 m_leave_actions[state] = leave_action;
108 return m_transition_table;
112 return m_enter_actions;
116 return m_leave_actions;
std::vector< transition_t< state_t, event_t > > transition_table_t
Definition: StateMachine1.hpp:39
std::function< void()> action_t
Definition: StateMachine1.hpp:33
std::pair< std::pair< state_t, event_t >, std::tuple< action_t, state_t > > transition_t
Definition: StateMachine1.hpp:36
std::function< void()> enter_action_t
Definition: StateMachine2.hpp:36
std::unordered_map< state_t, leave_action_t > leave_actions_t
Definition: StateMachine2.hpp:44
std::unordered_map< state_t, enter_action_t > enter_actions_t
Definition: StateMachine2.hpp:41
std::function< void()> leave_action_t
Definition: StateMachine2.hpp:38
std::function< bool()> guard_t
Definition: StateMachine3.hpp:34
std::function< void(const data_t &)> enter_action_t
Definition: StateMachine4.hpp:42
std::unordered_map< state_t, enter_action_t< state_t, data_t > > enter_actions_t
Definition: StateMachine4.hpp:48
std::vector< transition_t< state_t, event_t, data_t > > transition_table_t
Definition: StateMachine4.hpp:57
std::function< void(const data_t &)> leave_action_t
Definition: StateMachine4.hpp:45
std::unordered_map< state_t, leave_action_t< state_t, data_t > > leave_actions_t
Definition: StateMachine4.hpp:51
std::pair< std::pair< state_t, event_t >, std::tuple< guard_t< state_t, event_t, data_t >, action_t< state_t, event_t, data_t >, state_t > > transition_t
Definition: StateMachine4.hpp:54
std::function< bool(const data_t &)> guard_t
Definition: StateMachine4.hpp:36
std::function< void(const data_t &)> action_t
Definition: StateMachine4.hpp:39
Definition: StateMachine1.hpp:42
void set_enter_action(const state_t &state, const enter_action_t &enter_action)
Definition: StateMachine3.hpp:95
void set_transition_table(const transition_table_t< state_t, event_t > &transition_table)
Definition: StateMachine3.hpp:91
void set_state(const state_t &state)
Definition: StateMachine3.hpp:87
transition_table_t< state_t, event_t > get_transition_table() const
Definition: StateMachine3.hpp:107
state_machine_t()=default
state_machine_t(const state_t &state, transition_table_t< state_t, event_t > transition_table)
Definition: StateMachine3.hpp:59
leave_actions_t< state_t > get_leave_actions() const
Definition: StateMachine3.hpp:115
void set_leave_action(const state_t &state, const leave_action_t &leave_action)
Definition: StateMachine3.hpp:99
enter_actions_t< state_t > get_enter_actions() const
Definition: StateMachine3.hpp:111
state_t get_state() const
Definition: StateMachine3.hpp:103
bool handle_event(const event_t &event)
Definition: StateMachine3.hpp:61