クラス テンプレート RTC_Utils::StateMachine< State, Listener, States, Callback >

状態マシンクラス [詳細]

#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

説明

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
class RTC_Utils::StateMachine< State, Listener, States, Callback >

状態マシンクラス

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; 
 }; 
 

状態を持たせたいクラスは以下の条件を満たすように実装しなければならない。

  1. enum で状態を定義
  2. StateMachine のテンプレート引数は、
    <状態の型(MyState), リスナーオブジェクト, 状態ホルダー,コールバック関数>
  3. StateMachine のコンストラクタ引数は状態の数
  4. 以下のアクション関数を(Return _function_name_(States)) の関数として設定
    1. 何もしない関数を必ず定義し、setNOP で与えなければならない
    2. 各状態毎に, set(Entry|PreDo|Do|PostDo|Exit)Action でアクションを設定
    3. 状態遷移時のアクションを setTransitionAction() で設定。
  5. 遷移時のアクションは、与えられた現在状態、次状態、前状態を元に、 ユーザが実装しなければならない。
  6. 状態の変更は goTo() で、状態のチェックは isIn(state) で行う。
  7. goTo()は次状態を強制的にセットする関数であり、遷移の可否は、 ユーザが現在状態を取得し判断するロジックを実装しなければならない。

このクラスは、一つの状態に対して、

5つのアクションが定義することができる。 Transition action はあらゆる状態間遷移で呼び出されるアクションで、 その振る舞いはユーザが定義しなければならない。

このクラスは以下のようなタイミングで各アクションが実行される。

引数:
State 状態の型
Listener アクション用リスナーオブジェクト
States 状態ホルダー
Callback アクション用コールバック関数
から:
0.4.0

コンストラクタとデストラクタ

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
RTC_Utils::StateMachine< State, Listener, States, Callback >::StateMachine ( int  num_of_state  )  [inline]

コンストラクタ

コンストラクタ

引数:
num_of_state ステートマシン中の状態数
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
virtual RTC_Utils::StateMachine< State, Listener, States, Callback >::~StateMachine (  )  [inline, virtual]

関数

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
State RTC_Utils::StateMachine< State, Listener, States, Callback >::getState (  )  [inline]

現在の状態を取得する

現在の状態を取得する。

戻り値:
現在の状態
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
States RTC_Utils::StateMachine< State, Listener, States, Callback >::getStates (  )  [inline]

状態を取得する

状態情報を取得する。 現在の状態、1つ前の状態、遷移予定の状態を取得することができる。

戻り値:
状態情報
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
void RTC_Utils::StateMachine< State, Listener, States, Callback >::goTo ( State  state  )  [inline]

状態を遷移

指定した状態に状態を遷移する。 本関数は次状態を強制的にセットする関数である。 このため、遷移の可否は、ユーザが現在状態を取得し判断するロジックを 実装しなければならない。 遷移先が現在の状態と同じ場合には、自己遷移フラグをセットする。

引数:
state 遷移先状態

参照元 RTC::PeriodicExecutionContext::DFP< OpenRTM::DataFlowComponent_var >::on_activated(), RTC::PeriodicExecutionContext::DFP< OpenRTM::DataFlowComponent_var >::on_execute(), RTC::PeriodicExecutionContext::DFP< OpenRTM::DataFlowComponent_var >::on_reset(), と RTC::PeriodicExecutionContext::DFP< OpenRTM::DataFlowComponent_var >::on_state_update().

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::isIn ( State  state  )  [inline]

現在状態を確認

現在の状態が、引数で指定した状態と一致するか確認する。

引数:
state 確認対象状態
戻り値:
状態確認結果
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setDoAction ( State  state,
Callback  call_back 
) [inline]

Do action 関数を登録する.

各状態内で実行される Do action 用コールバック関数を登録する。

引数:
state 登録対象状態
call_back Do action 用コールバック関数
戻り値:
アクション実行結果
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setEntryAction ( State  state,
Callback  call_back 
) [inline]

Entry action 関数を登録する.

各状態に入った際に実行される Entry action 用コールバック関数を登録する。

引数:
state 登録対象状態
call_back Entry action 用コールバック関数
戻り値:
アクション実行結果
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setExitAction ( State  state,
Callback  call_back 
) [inline]

Exit action 関数を登録する.

各状態内で実行される Exit action 用コールバック関数を登録する。

引数:
state 登録対象状態
call_back Exit action 用コールバック関数
戻り値:
アクション実行結果
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
void RTC_Utils::StateMachine< State, Listener, States, Callback >::setListener ( Listener *  listener  )  [inline]

Listener オブジェクトを登録する.

各種アクション実行時に呼び出される Listener オブジェクトを登録する。

引数:
listener Listener オブジェクト
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
void RTC_Utils::StateMachine< State, Listener, States, Callback >::setNOP ( Callback  call_back  )  [inline]

NOP関数を登録する.

NOP関数(何もしない関数)を登録する。

引数:
call_back コールバック関数
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
void RTC_Utils::StateMachine< State, Listener, States, Callback >::setNullFunc ( Callback *  s,
Callback  nullfunc 
) [inline, protected]

NOP関数を設定.

NOP関数(何もしない関数)を登録する。

引数:
s コールバック関数設定先
nullfunc コールバック関数(NOP関数)
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setPostDoAction ( State  state,
Callback  call_back 
) [inline]

PostDo action 関数を登録する.

各状態内で実行される PostDo action 用コールバック関数を登録する。

引数:
state 登録対象状態
call_back PostDo action 用コールバック関数
戻り値:
アクション実行結果
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setPreDoAction ( State  state,
Callback  call_back 
) [inline]

PreDo action 関数を登録する.

各状態内で実行される PreDo action 用コールバック関数を登録する。

引数:
state 登録対象状態
call_back PreDo action 用コールバック関数
戻り値:
アクション実行結果
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
void RTC_Utils::StateMachine< State, Listener, States, Callback >::setStartState ( States  states  )  [inline]

初期状態をセットする

ステートマシンの初期状態を設定する。

引数:
states 初期状態
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::setTransitionAction ( Callback  call_back  )  [inline]

State transition action 関数を登録する.

状態遷移時に実行される State transition action 用コールバック関数を 登録する。

引数:
call_back State transition 用コールバック関数
戻り値:
アクション実行結果
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
void RTC_Utils::StateMachine< State, Listener, States, Callback >::worker (  )  [inline]

駆動関数

ステートマシンの駆動関数。 実際の状態遷移および状態遷移発生時の各アクションの呼びだしを実行する。


変数

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_do [protected]

Do action 用コールバック関数.

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_entry [protected]

Entry action 用コールバック関数.

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_exit [protected]

Exit action 用コールバック関数.

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
Listener* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_listener [protected]

コールバック関数用リスナー

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
Mutex RTC_Utils::StateMachine< State, Listener, States, Callback >::m_mutex [protected]
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
int RTC_Utils::StateMachine< State, Listener, States, Callback >::m_num [protected]

状態数

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_postdo [protected]

PostDo action 用コールバック関数.

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
Callback* RTC_Utils::StateMachine< State, Listener, States, Callback >::m_predo [protected]

PreDo action 用コールバック関数.

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
bool RTC_Utils::StateMachine< State, Listener, States, Callback >::m_selftrans [protected]
template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
States RTC_Utils::StateMachine< State, Listener, States, Callback >::m_states [protected]

現在の状態情報

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
Callback RTC_Utils::StateMachine< State, Listener, States, Callback >::m_transit [protected]

State transition action 用コールバック関数.

OpenRTM-aistに対してFri Oct 28 18:31:16 2016に生成されました。  doxygen 1.6.3