30#include <unordered_map>
40template<
typename state_t>
43template<
typename state_t>
46template<
typename state_t,
typename event_t>
47using transition_t = std::pair<std::pair<state_t, event_t>, std::tuple<action_t, state_t>>;
49template<
typename state_t,
typename event_t>
52template<
typename state_t,
typename event_t>
61 return transition.first.first == m_state && transition.first.second == event;
63 if (it != m_transition_table.end()) {
64 const action_t &action = std::get<0>(it->second);
65 const state_t &state = std::get<1>(it->second);
66 const auto it1 = m_leave_actions.find(m_state);
67 if (it1 != m_leave_actions.end()) {
72 const auto it2 = m_enter_actions.find(m_state);
73 if (it2 != m_enter_actions.end()) {
86 m_transition_table = transition_table;
90 m_enter_actions[state] = enter_action;
94 m_leave_actions[state] = leave_action;
102 return m_transition_table;
106 return m_enter_actions;
110 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< 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< 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: StateMachine2.hpp:89
void set_transition_table(const transition_table_t< state_t, event_t > &transition_table)
Definition: StateMachine2.hpp:85
void set_state(const state_t &state)
Definition: StateMachine2.hpp:81
transition_table_t< state_t, event_t > get_transition_table() const
Definition: StateMachine2.hpp:101
state_machine_t()=default
state_machine_t(const state_t &state, transition_table_t< state_t, event_t > transition_table)
Definition: StateMachine2.hpp:57
leave_actions_t< state_t > get_leave_actions() const
Definition: StateMachine2.hpp:109
void set_leave_action(const state_t &state, const leave_action_t &leave_action)
Definition: StateMachine2.hpp:93
enter_actions_t< state_t > get_enter_actions() const
Definition: StateMachine2.hpp:105
state_t get_state() const
Definition: StateMachine2.hpp:97
bool handle_event(const event_t &event)
Definition: StateMachine2.hpp:59