メインページ | ネームスペース一覧 | クラス階層 | 構成 | Directories | ファイル一覧 | ネームスペースメンバ | 構成メンバ | ファイルメンバ

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

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

#include <StateMachine.h>

すべてのメンバ一覧

Public メソッド

 StateMachine (int num_of_state)
 コンストラクタ
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)
 Post 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)

Protected 変数

int m_num
Listener * m_listener
Callback * m_entry
Callback * m_predo
Callback * m_do
Callback * m_postdo
Callback * m_exit
Callback m_transit
States m_states
bool m_selftrans
ACE_Thread_Mutex m_mutex


説明

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
class 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(NACTIVE, &ActiveObject::inactiveExit); 
       : 
     m_sm.setPostDoAction(ERROR, &ActiveObject::errorPostDo); 
     m_sm.setTransitionAction(&ActiveObject:tratransitionnsition); 
   };

   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), アクション関数の戻り値(bool), 当該オブジェクトの型>
  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 はあらゆる状態間遷移で呼び出されるアクションで、 その振る舞いはユーザが定義しなければならない。

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


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

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

コンストラクタ


関数

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

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

状態を取得する

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

状態を変更

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

現在状態を確認

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

Do action 関数を登録する.

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

Entry action 関数を登録する.

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

Exit action 関数を登録する.

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

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

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

NOP関数を登録する.

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
void StateMachine< State, Listener, States, Callback >::setNullFunc Callback *  s,
Callback  nullfunc
[inline, protected]
 

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

Post action 関数を登録する.

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

PreDo action 関数を登録する.

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

初期状態をセットする

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

State transition action 関数を登録する.

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

駆動関数


変数

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

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

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

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

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
ACE_Thread_Mutex 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 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* StateMachine< State, Listener, States, Callback >::m_postdo [protected]
 

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

template<class State, class Listener, class States = StateHolder<State>, class Callback = void (Listener::*)(const States& states)>
bool 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 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 StateMachine< State, Listener, States, Callback >::m_transit [protected]
 


このクラスの説明は次のファイルから生成されました:
OpenRTMに対してFri Oct 5 05:14:59 2007に生成されました。  doxygen 1.4.1