30#include <unordered_map>
39template<
typename state_t>
42template<
typename state_t>
45template<
typename state_t,
typename event_t>
46using transition_t = std::pair<std::pair<state_t, event_t>, std::tuple<guard_t, action_t, state_t>>;
48template<
typename state_t,
typename event_t>
51template<
typename state_t,
typename event_t>
60 return transition.first.first == m_state && transition.first.second == event;
62 if (it != m_transition_table.end()) {
63 const guard_t &guard = std::get<0>(it->second);
64 const action_t &action = std::get<1>(it->second);
65 const state_t &state = std::get<2>(it->second);
67 const auto it1 = m_leave_actions.find(m_state);
68 if (it1 != m_leave_actions.end()) {
73 const auto it2 = m_enter_actions.find(m_state);
74 if (it2 != m_enter_actions.end()) {
89 return m_transition_table;
93 return m_enter_actions;
97 return m_leave_actions;
105 m_transition_table = transition_table;
109 m_enter_actions[state] = enter_action;
113 m_leave_actions[state] = leave_action;
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:35
std::unordered_map< state_t, leave_action_t > leave_actions_t
Definition: StateMachine2.hpp:42
std::unordered_map< state_t, enter_action_t > enter_actions_t
Definition: StateMachine2.hpp:39
std::function< void()> leave_action_t
Definition: StateMachine2.hpp:36
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:108
void set_transition_table(const transition_table_t< state_t, event_t > &transition_table)
Definition: StateMachine3.hpp:104
void set_state(const state_t &state)
Definition: StateMachine3.hpp:100
transition_table_t< state_t, event_t > get_transition_table() const
Definition: StateMachine3.hpp:88
state_machine_t()=default
state_machine_t(const state_t &state, transition_table_t< state_t, event_t > transition_table)
Definition: StateMachine3.hpp:56
leave_actions_t< state_t > get_leave_actions() const
Definition: StateMachine3.hpp:96
void set_leave_action(const state_t &state, const leave_action_t &leave_action)
Definition: StateMachine3.hpp:112
enter_actions_t< state_t > get_enter_actions() const
Definition: StateMachine3.hpp:92
state_t get_state() const
Definition: StateMachine3.hpp:84
bool handle_event(const event_t &event)
Definition: StateMachine3.hpp:58