#include <StateMachine.h>
Public メソッド | |
| StateMachine (int num_of_state) | |
| コンストラクタ | |
| virtual | ~StateMachine () |
| void | setNOP (Callback call_back) |
| NOP関数を登録する | |
| void | setListener (Listener *listener) |
| Listener オブジェクトを登録する | |
| bool | setEntryAction (State state, Callback call_back) |
| Entry action 関数を登録する | |
| bool | setPreDoAction (State state, Callback call_back) |
| PreDo action 関数を登録する | |
| bool | setDoAction (State state, Callback call_back) |
| Do action 関数を登録する | |
| bool | setPostDoAction (State state, Callback call_back) |
| PostDo action 関数を登録する | |
| bool | setExitAction (State state, Callback call_back) |
| Exit action 関数を登録する | |
| bool | setTransitionAction (Callback call_back) |
| State transition action 関数を登録する | |
| void | setStartState (States states) |
| 初期状態をセットする | |
| States | getStates () |
| 状態を取得する | |
| State | getState () |
| 現在の状態を取得する | |
| bool | isIn (State state) |
| 現在状態を確認 | |
| void | goTo (State state) |
| 状態を遷移 | |
| void | worker () |
| 駆動関数 | |
Protected メソッド | |
| void | setNullFunc (Callback *s, Callback nullfunc) |
| NOP関数を設定 | |
Protected 変数 | |
| int | m_num |
| 状態数 | |
| Listener * | m_listener |
| コールバック関数用リスナー | |
| Callback * | m_entry |
| Entry action 用コールバック関数 | |
| Callback * | m_predo |
| PreDo action 用コールバック関数 | |
| Callback * | m_do |
| Do action 用コールバック関数 | |
| Callback * | m_postdo |
| PostDo action 用コールバック関数 | |
| Callback * | m_exit |
| Exit action 用コールバック関数 | |
| Callback | m_transit |
| State transition action 用コールバック関数 | |
| States | m_states |
| 現在の状態情報 | |
| bool | m_selftrans |
| Mutex | m_mutex |
StateMachine クラスは状態マシンを実現するクラスである。
例: ActiveObjectは状態マシンを持つアクティブオブジェクトであるとする。 状態は3状態 INACTIVE, ACTIVE, ERROR があり、各状態でのEntryやExit動作を 定義したいとすると、以下のように実現される。
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; };状態を持たせたいクラスは以下の条件を満たすように実装しなければならない。
このクラスは、一つの状態に対して、
このクラスは以下のようなタイミングで各アクションが実行される。
| State | 状態の型 | |
| Listener | アクション用リスナーオブジェクト | |
| States | 状態ホルダー | |
| Callback | アクション用コールバック関数 |
| RTC_Utils::StateMachine< State, Listener, States, Callback >::StateMachine | ( | int | num_of_state | ) | [inline] |
コンストラクタ
コンストラクタ
| num_of_state | ステートマシン中の状態数 |
| virtual RTC_Utils::StateMachine< State, Listener, States, Callback >::~StateMachine | ( | ) | [inline, virtual] |
| void RTC_Utils::StateMachine< State, Listener, States, Callback >::setNOP | ( | Callback | call_back | ) | [inline] |
NOP関数を登録する
NOP関数(何もしない関数)を登録する。
| call_back | コールバック関数 |
| void RTC_Utils::StateMachine< State, Listener, States, Callback >::setListener | ( | Listener * | listener | ) | [inline] |
Listener オブジェクトを登録する
各種アクション実行時に呼び出される Listener オブジェクトを登録する。
| listener | Listener オブジェクト |
| bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setEntryAction | ( | State | state, | |
| Callback | call_back | |||
| ) | [inline] |
Entry action 関数を登録する
各状態に入った際に実行される Entry action 用コールバック関数を登録する。
| state | 登録対象状態 | |
| call_back | Entry action 用コールバック関数 |
| bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setPreDoAction | ( | State | state, | |
| Callback | call_back | |||
| ) | [inline] |
PreDo action 関数を登録する
各状態内で実行される PreDo action 用コールバック関数を登録する。
| state | 登録対象状態 | |
| call_back | PreDo action 用コールバック関数 |
| bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setDoAction | ( | State | state, | |
| Callback | call_back | |||
| ) | [inline] |
Do action 関数を登録する
各状態内で実行される Do action 用コールバック関数を登録する。
| state | 登録対象状態 | |
| call_back | Do action 用コールバック関数 |
| bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setPostDoAction | ( | State | state, | |
| Callback | call_back | |||
| ) | [inline] |
PostDo action 関数を登録する
各状態内で実行される PostDo action 用コールバック関数を登録する。
| state | 登録対象状態 | |
| call_back | PostDo action 用コールバック関数 |
| bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setExitAction | ( | State | state, | |
| Callback | call_back | |||
| ) | [inline] |
Exit action 関数を登録する
各状態内で実行される Exit action 用コールバック関数を登録する。
| state | 登録対象状態 | |
| call_back | Exit action 用コールバック関数 |
| bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setTransitionAction | ( | Callback | call_back | ) | [inline] |
State transition action 関数を登録する
状態遷移時に実行される State transition action 用コールバック関数を 登録する。
| call_back | State transition 用コールバック関数 |
| void RTC_Utils::StateMachine< State, Listener, States, Callback >::setStartState | ( | States | states | ) | [inline] |
初期状態をセットする
ステートマシンの初期状態を設定する。
| states | 初期状態 |
| States RTC_Utils::StateMachine< State, Listener, States, Callback >::getStates | ( | ) | [inline] |
状態を取得する
状態情報を取得する。 現在の状態、1つ前の状態、遷移予定の状態を取得することができる。
| State RTC_Utils::StateMachine< State, Listener, States, Callback >::getState | ( | ) | [inline] |
現在の状態を取得する
現在の状態を取得する。
| bool RTC_Utils::StateMachine< State, Listener, States, Callback >::isIn | ( | State | state | ) | [inline] |
現在状態を確認
現在の状態が、引数で指定した状態と一致するか確認する。
| state | 確認対象状態 |
| void RTC_Utils::StateMachine< State, Listener, States, Callback >::goTo | ( | State | state | ) | [inline] |
状態を遷移
指定した状態に状態を遷移する。 本関数は次状態を強制的にセットする関数である。 このため、遷移の可否は、ユーザが現在状態を取得し判断するロジックを 実装しなければならない。 遷移先が現在の状態と同じ場合には、自己遷移フラグをセットする。
| state | 遷移先状態 |
| void RTC_Utils::StateMachine< State, Listener, States, Callback >::worker | ( | void | ) | [inline] |
駆動関数
ステートマシンの駆動関数。 実際の状態遷移および状態遷移発生時の各アクションの呼びだしを実行する。
| void RTC_Utils::StateMachine< State, Listener, States, Callback >::setNullFunc | ( | Callback * | s, | |
| Callback | nullfunc | |||
| ) | [inline, protected] |
NOP関数を設定
NOP関数(何もしない関数)を登録する。
| s | コールバック関数設定先 | |
| nullfunc | コールバック関数(NOP関数) |
int RTC_Utils::StateMachine< State, Listener, States, Callback >::m_num [protected] |
状態数
Listener* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_listener [protected] |
コールバック関数用リスナー
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_entry [protected] |
Entry action 用コールバック関数
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_predo [protected] |
PreDo action 用コールバック関数
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_do [protected] |
Do action 用コールバック関数
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_postdo [protected] |
PostDo action 用コールバック関数
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_exit [protected] |
Exit action 用コールバック関数
Callback RTC_Utils::StateMachine< State, Listener, States, Callback >::m_transit [protected] |
State transition action 用コールバック関数
States RTC_Utils::StateMachine< State, Listener, States, Callback >::m_states [protected] |
現在の状態情報
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::m_selftrans [protected] |
Mutex RTC_Utils::StateMachine< State, Listener, States, Callback >::m_mutex [protected] |
1.5.5