State machine class. More...
#include <StateMachine.h>
Public Member Functions | |
State | getState () |
Get current state. | |
States | getStates () |
Get states. | |
void | goTo (State state) |
Transit State. | |
bool | isIn (State state) |
Check current state. | |
bool | setDoAction (State state, Callback call_back) |
Set Do action function. | |
bool | setEntryAction (State state, Callback call_back) |
Set Entry action function. | |
bool | setExitAction (State state, Callback call_back) |
Set Exit action function. | |
void | setListener (Listener *listener) |
Set Listener Object. | |
void | setNOP (Callback call_back) |
Set NOP function. | |
bool | setPostDoAction (State state, Callback call_back) |
Set PostDo action function. | |
bool | setPreDoAction (State state, Callback call_back) |
Set PreDo action function. | |
void | setStartState (States states) |
Set the initial state. | |
bool | setTransitionAction (Callback call_back) |
Set state transition action function. | |
StateMachine (int num_of_state) | |
Constructor. | |
void | worker () |
Worker function. | |
virtual | ~StateMachine () |
Protected Member Functions | |
void | setNullFunc (Callback *s, Callback nullfunc) |
Set NOP function. | |
Protected Attributes | |
Callback * | m_do |
Callback function for Do action. | |
Callback * | m_entry |
Callback function for Entry action. | |
Callback * | m_exit |
Callback function for Exit action. | |
Listener * | m_listener |
Callback function for listener. | |
Mutex | m_mutex |
int | m_num |
Number of state. | |
Callback * | m_postdo |
Callback function for PostDo action. | |
Callback * | m_predo |
Callback function for PreDo action. | |
bool | m_selftrans |
States | m_states |
Current state information. | |
Callback | m_transit |
Callback function for State transition action. | |
Private Types | |
typedef coil::Guard< Mutex > | Guard |
typedef coil::Mutex | Mutex |
Private Member Functions | |
bool | need_trans () |
void | sync (States &st) |
void | update_curr (const State curr) |
State machine class.
StateMachine class is a class to realize a state machine.
Example: ActiveObject assumes to be an active object that has the state machine. There are three states such as INACTIVE, ACTIVE and ERROR state, and if you want to define Entry or Exit action, this class will realize as follows:
class ActiveObject { public: enum MyState { INACTIVE, ACTIVE, ERROR }; typedef States<MyState> MyStates;
ActiveObject() : m_sm(3) { m_sm.setNOP(&ActiveObject::nullAction); m_sm.setListener(this);
m_sm.setExitAction(INACTIVE, &ActiveObject::inactiveExit); : m_sm.setPostDoAction(ERROR, &ActiveObject::errorPostDo); m_sm.setTransitionAction(&ActiveObject:transition); };
bool nullAction(MyStates st) {}; bool inactiveExit(MyStates st) {}; : bool errorPostDo(MyStates st) {}; bool transition(MyStates st) {};
private: StateMachine<MyState, bool, ActiveObject> m_sm; };
If you want to give a class to some states, you must implement the class to satisfy the following conditions:
In this class, you can define the following five actions for one state:
Transition action is an action invoked at the transition between any states, and you must define its behavior.
This class executes each action according to the following timing.
If the state is changed and transits(A->B) state,
(A:Exit)->|(state update:A->B)->(B:Entry)->(B:PreDo)->(B:Do)->(B:PostDo)
If the state is not changed and remains B state, (| shows a step's break) (B(n-1):PostDo)->|(B(n):PreDo)->(B(n):Do)->(B(n):PostDo)->|(B(n+1):PreDo) PreDo, Do and PostDo are executed over and over again.
State | Type of the state |
Listener | Listener object for action |
States | State holder |
Callback | Callback function for action |
Definition at line 263 of file StateMachine.h.
typedef coil::Guard<Mutex> RTC_Utils::StateMachine< State, Listener, States, Callback >::Guard [private] |
Definition at line 266 of file StateMachine.h.
typedef coil::Mutex RTC_Utils::StateMachine< State, Listener, States, Callback >::Mutex [private] |
Definition at line 265 of file StateMachine.h.
RTC_Utils::StateMachine< State, Listener, States, Callback >::StateMachine | ( | int | num_of_state | ) | [inline] |
Constructor.
Constructor
num_of_state | Number of states in the state machine |
Definition at line 285 of file StateMachine.h.
virtual RTC_Utils::StateMachine< State, Listener, States, Callback >::~StateMachine | ( | ) | [inline, virtual] |
Definition at line 302 of file StateMachine.h.
State RTC_Utils::StateMachine< State, Listener, States, Callback >::getState | ( | ) | [inline] |
Get current state.
Get current state.
Definition at line 603 of file StateMachine.h.
States RTC_Utils::StateMachine< State, Listener, States, Callback >::getStates | ( | ) | [inline] |
Get states.
Get state information. Get the current state, the previous state and the next state to be expected to transfer.
Definition at line 580 of file StateMachine.h.
void RTC_Utils::StateMachine< State, Listener, States, Callback >::goTo | ( | State | state | ) | [inline] |
Transit State.
Transit to the specified state. This function sets the next state forcibly. Therefore, to determine the next state, users must get current state and implement that logic. If transit destination is the same as the current state, flag of self-transition will be set.
state | State of the transition destination |
Definition at line 662 of file StateMachine.h.
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::isIn | ( | State | state | ) | [inline] |
Check current state.
Check whether current state matches the state specified by argument.
state | Target state for the check |
Definition at line 630 of file StateMachine.h.
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::need_trans | ( | ) | [inline, private] |
Definition at line 845 of file StateMachine.h.
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setDoAction | ( | State | state, |
Callback | call_back | ||
) | [inline] |
Set Do action function.
Set callback function for Do action that is executed in each state.
state | Target state for the set |
call_back | Callback function for Do action |
Definition at line 443 of file StateMachine.h.
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setEntryAction | ( | State | state, |
Callback | call_back | ||
) | [inline] |
Set Entry action function.
Set callback function for Entry action that is executed when entering in each state.
state | Target state for the set |
call_back | Callback function for Entry action |
Definition at line 385 of file StateMachine.h.
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setExitAction | ( | State | state, |
Callback | call_back | ||
) | [inline] |
Set Exit action function.
Set callback function for Exit action that is executed in each state.
state | Target state for the set |
call_back | Callback function for Exit action |
Definition at line 501 of file StateMachine.h.
void RTC_Utils::StateMachine< State, Listener, States, Callback >::setListener | ( | Listener * | listener | ) | [inline] |
Set Listener Object.
Set Listener Object invoked when various actions are executed.
listener | Listener object |
Definition at line 356 of file StateMachine.h.
void RTC_Utils::StateMachine< State, Listener, States, Callback >::setNOP | ( | Callback | call_back | ) | [inline] |
Set NOP function.
Set NOP function that does not do anything
call_back | Callback function |
Definition at line 329 of file StateMachine.h.
void RTC_Utils::StateMachine< State, Listener, States, Callback >::setNullFunc | ( | Callback * | s, |
Callback | nullfunc | ||
) | [inline, protected] |
Set NOP function.
Set NOP function (function to do nothing).
s | Callback function for setting |
nullfunc | Callback function (NOP function) |
Definition at line 750 of file StateMachine.h.
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setPostDoAction | ( | State | state, |
Callback | call_back | ||
) | [inline] |
Set PostDo action function.
Set callback function for PostDo action that is executed in each state.
state | Target state for the set |
call_back | Callback function for PostDo action |
Definition at line 472 of file StateMachine.h.
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setPreDoAction | ( | State | state, |
Callback | call_back | ||
) | [inline] |
Set PreDo action function.
Set callback function for PreDo action that is executed in each state.
state | Target state for the set |
call_back | Callback function for PreDo action |
Definition at line 414 of file StateMachine.h.
void RTC_Utils::StateMachine< State, Listener, States, Callback >::setStartState | ( | States | states | ) | [inline] |
Set the initial state.
Set the initial state of the state machine.
states | Initial state |
Definition at line 553 of file StateMachine.h.
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setTransitionAction | ( | Callback | call_back | ) | [inline] |
Set state transition action function.
Set callback function for State transition action that is executed when transiting to the state.
call_back | Callback function for State transition |
Definition at line 530 of file StateMachine.h.
void RTC_Utils::StateMachine< State, Listener, States, Callback >::sync | ( | States & | st | ) | [inline, private] |
Definition at line 839 of file StateMachine.h.
void RTC_Utils::StateMachine< State, Listener, States, Callback >::update_curr | ( | const State | curr | ) | [inline, private] |
Definition at line 851 of file StateMachine.h.
void RTC_Utils::StateMachine< State, Listener, States, Callback >::worker | ( | ) | [inline] |
Worker function.
This is a worker function of the state machine. Execute the invocation of each action at actual state transition and the state transition occurrence.
Definition at line 689 of file StateMachine.h.
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_do [protected] |
Callback function for Do action.
Definition at line 798 of file StateMachine.h.
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_entry [protected] |
Callback function for Entry action.
Definition at line 780 of file StateMachine.h.
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_exit [protected] |
Callback function for Exit action.
Definition at line 816 of file StateMachine.h.
Listener* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_listener [protected] |
Callback function for listener.
Definition at line 771 of file StateMachine.h.
Mutex RTC_Utils::StateMachine< State, Listener, States, Callback >::m_mutex [protected] |
Definition at line 836 of file StateMachine.h.
int RTC_Utils::StateMachine< State, Listener, States, Callback >::m_num [protected] |
Number of state.
Definition at line 762 of file StateMachine.h.
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_postdo [protected] |
Callback function for PostDo action.
Definition at line 807 of file StateMachine.h.
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_predo [protected] |
Callback function for PreDo action.
Definition at line 789 of file StateMachine.h.
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::m_selftrans [protected] |
Definition at line 835 of file StateMachine.h.
States RTC_Utils::StateMachine< State, Listener, States, Callback >::m_states [protected] |
Current state information.
Definition at line 834 of file StateMachine.h.
Callback RTC_Utils::StateMachine< State, Listener, States, Callback >::m_transit [protected] |
Callback function for State transition action.
Definition at line 825 of file StateMachine.h.