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

クラス StateMachine

状態マシンクラス StateMachine クラスは状態マシンを実現するクラスである。 例: ActiveObjectは状態マシンを持つアクティブオブジェクトであるとする。 状態は3状態 INACTIVE, ACTIVE, ERROR あり、各状態でのEntryやExit動作を 定義したいとすると、以下のように実現される。 [詳細]

すべてのメンバ一覧

Public メソッド

 __init__ (num_of_state)
 コンストラクタ
 setNOP (call_back)
 NOP関数を登録する.
 setListener (listener)
 Listener オブジェクトを登録する.
 setEntryAction (state, call_back)
 Entry action 関数を登録する.
 setPreDoAction (state, call_back)
 PreDo action 関数を登録する.
 setDoAction (state, call_back)
 Do action 関数を登録する.
 setPostDoAction (state, call_back)
 Post action 関数を登録する.
 setExitAction (state, call_back)
 Exit action 関数を登録する.
 setTransitionAction (call_back)
 State transition action 関数を登録する.
 setStartState (states)
 初期状態をセットする
 getStates ()
 状態を取得する
 getState ()
 isIn (state)
 現在状態を確認
 goTo (state)
 状態を変更
 worker ()
 駆動関数
 setNullFunc (s, nullfunc)
 sync (states)
 need_trans ()
 update_curr (curr)


説明

状態マシンクラス 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 はあらゆる状態間遷移で呼び出されるアクションで、 その振る舞いはユーザが定義しなければならない。

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

2


関数

StateMachine::__init__ num_of_state   ) 
 

コンストラクタ

StateMachine::getState  ) 
 

StateMachine::getStates  ) 
 

状態を取得する

StateMachine::goTo state   ) 
 

状態を変更

StateMachine::isIn state   ) 
 

現在状態を確認

StateMachine::need_trans  ) 
 

StateMachine::setDoAction state  ,
call_back 
 

Do action 関数を登録する.

StateMachine::setEntryAction state  ,
call_back 
 

Entry action 関数を登録する.

StateMachine::setExitAction state  ,
call_back 
 

Exit action 関数を登録する.

StateMachine::setListener listener   ) 
 

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

StateMachine::setNOP call_back   ) 
 

NOP関数を登録する.

StateMachine::setNullFunc ,
nullfunc 
 

StateMachine::setPostDoAction state  ,
call_back 
 

Post action 関数を登録する.

StateMachine::setPreDoAction state  ,
call_back 
 

PreDo action 関数を登録する.

StateMachine::setStartState states   ) 
 

初期状態をセットする

StateMachine::setTransitionAction call_back   ) 
 

State transition action 関数を登録する.

StateMachine::sync states   ) 
 

StateMachine::update_curr curr   ) 
 

StateMachine::worker  ) 
 

駆動関数


このクラスの説明は次のファイルから生成されました:
OpenRTMに対してMon Oct 29 15:51:38 2007に生成されました。  doxygen 1.4.3