jp.go.aist.rtm.RTC
Class StateMachine<STATE,LISTENER>

java.lang.Object
  extended by jp.go.aist.rtm.RTC.StateMachine<STATE,LISTENER>

public class StateMachine<STATE,LISTENER>
extends java.lang.Object

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 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 m_sm; 
 }; 
 
If you want to give a class to some states, you must implement the class to satisfy the following conditions:
  1. You must define states by enum.
  2. Template arguments of StateMachine must be
  3. Constructor arguments of StateMachine must be the number of the states.
  4. You must set the following action functions as a function of (Return _function_name_(States))
    1. You must define a function that does not do anything and give with setNOP.
    2. You must set actions to each state by set(Entry|PreDo|Do|PostDo|Exit)Action.
    3. You should set actions at the state transition by setTransitionAction().
  5. You must implement action at the transition based on given states, such as current state, next state and previous state.
  6. You should change states by goTo() and check the state by isIn(state).
  7. goTo() is a function that sets next state forcibly, therefore, to determine the next state, you must get current state and implement that logic.
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.


Field Summary
protected  java.util.HashMap<STATE,StateAction> m_do
           Callback function for Do action
protected  java.util.HashMap<STATE,StateAction> m_entry
           Callback function for Entry action
protected  java.util.HashMap<STATE,StateAction> m_exit
           Callback function for Exit action
protected  LISTENER m_listener
           Callback function for listener
protected  int m_num
           Number of state
protected  java.util.HashMap<STATE,StateAction> m_postdo
           Callback function for PostDo action
protected  java.util.HashMap<STATE,StateAction> m_predo
           Callback function for PreDo action
protected  StateHolder<STATE> m_states
           Current state information
protected  StateAction m_transit
           Callback function for State transition action
 
Constructor Summary
StateMachine(int num_of_state)
           Constructor
 
Method Summary
 STATE getState()
           Get current state
 void goTo(STATE state)
           Transit State
 boolean isIn(STATE state)
           Check current state
 boolean setDoAction(STATE state, StateAction call_back)
           Set Do action function
 boolean setEntryAction(STATE state, StateAction call_back)
           Set Entry action function
 boolean setExitAction(STATE state, StateAction call_back)
           Set Exit action function
 void setListener(LISTENER listener)
           Set Listener Object
 void setNOP()
           Set NOP function
 boolean setPostDoAction(STATE state, StateAction call_back)
           Set PostDo action function
 boolean setPreDoAction(STATE state, StateAction call_back)
           Set PreDo action function
 void setStartState(StateHolder states)
           Set the initial state
 boolean setTransitionAction(StateAction call_back)
           Set state transition action function
 void worker()
           Worker function
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

m_num

protected int m_num
Number of state


m_listener

protected LISTENER m_listener
Callback function for listener


m_entry

protected java.util.HashMap<STATE,StateAction> m_entry
Callback function for Entry action


m_predo

protected java.util.HashMap<STATE,StateAction> m_predo
Callback function for PreDo action


m_do

protected java.util.HashMap<STATE,StateAction> m_do
Callback function for Do action


m_postdo

protected java.util.HashMap<STATE,StateAction> m_postdo
Callback function for PostDo action


m_exit

protected java.util.HashMap<STATE,StateAction> m_exit
Callback function for Exit action


m_transit

protected StateAction m_transit
Callback function for State transition action


m_states

protected StateHolder<STATE> m_states
Current state information

Constructor Detail

StateMachine

public StateMachine(int num_of_state)
Constructor

Parameters:
num_of_state - Number of states in the state machine
Method Detail

setNOP

public void setNOP()
Set NOP function

Set NOP function that does not do anything


setListener

public void setListener(LISTENER listener)
Set Listener Object

Set Listener Object invoked when various actions are executed.

Parameters:
listener - Listener object

setEntryAction

public boolean setEntryAction(STATE state,
                              StateAction call_back)
Set Entry action function

Set callback function for Entry action that is executed when entering in each state.

Parameters:
state - Target state for the set
call_back - Callback function for Entry action
Returns:
Action execution result

setPreDoAction

public boolean setPreDoAction(STATE state,
                              StateAction call_back)
Set PreDo action function

Set callback function for PreDo action that is executed in each state.

Parameters:
state - Target state for the set
call_back - Callback function for PreDo action
Returns:
Action execution result

setDoAction

public boolean setDoAction(STATE state,
                           StateAction call_back)
Set Do action function

Set callback function for Do action that is executed in each state.

Parameters:
state - Target state for the set
call_back - Callback function for Do action
Returns:
Action execution result

setPostDoAction

public boolean setPostDoAction(STATE state,
                               StateAction call_back)
Set PostDo action function

Set callback function for PostDo action that is executed in each state.

Parameters:
state - Target state for the set
call_back - Callback function for PostDo action
Returns:
Action execution result

setExitAction

public boolean setExitAction(STATE state,
                             StateAction call_back)
Set Exit action function

Set callback function for Exit action that is executed in each state.

Parameters:
state - Target state for the set
call_back - Callback function for Exit action
Returns:
Action execution result

setTransitionAction

public boolean setTransitionAction(StateAction call_back)
Set state transition action function

Set callback function for State transition action that is executed when transiting to the state.

Parameters:
call_back - Callback function for State transition
Returns:
Action execution result

setStartState

public void setStartState(StateHolder states)
Set the initial state

Set the initial state of the state machine.

Parameters:
states - Initial state

getState

public STATE getState()
Get current state

Returns:
Current state

isIn

public boolean isIn(STATE state)
Check current state

Check whether current state matches the state specified by argument.

Parameters:
state - Target state for the check
Returns:
Check state result

goTo

public void goTo(STATE state)
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.

Parameters:
state - State of the transition destination

worker

public void worker()
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.