19 #ifndef RTC_STATEMACHINE_H
20 #define RTC_STATEMACHINE_H
54 template <
class State>
258 template <
class State,
261 class Callback = void (Listener::*)(
const States& states)
286 : m_num(num_of_state),
287 m_entry (new Callback[m_num]),
288 m_predo (new Callback[m_num]),
289 m_do (new Callback[m_num]),
290 m_postdo(new Callback[m_num]),
291 m_exit (new Callback[m_num])
293 setNullFunc(m_entry, NULL);
294 setNullFunc(m_do, NULL);
295 setNullFunc(m_exit, NULL);
296 setNullFunc(m_predo, NULL);
297 setNullFunc(m_postdo, NULL);
331 setNullFunc(m_entry, call_back);
332 setNullFunc(m_do, call_back);
333 setNullFunc(m_exit, call_back);
334 setNullFunc(m_predo, call_back);
335 setNullFunc(m_postdo, call_back);
336 m_transit = call_back;
358 m_listener = listener;
387 m_entry[state] = call_back;
416 m_predo[state] = call_back;
445 m_do[state] = call_back;
474 m_postdo[state] = call_back;
503 m_exit[state] = call_back;
532 m_transit = call_back;
555 m_states.curr = states.curr;
556 m_states.prev = states.prev;
557 m_states.next = states.next;
582 Guard guard(m_mutex);
605 Guard guard(m_mutex);
606 return m_states.curr;
632 Guard guard(m_mutex);
633 return m_states.curr == state ?
true :
false;
664 Guard guard(m_mutex);
665 m_states.next = state;
666 if (m_states.curr == state)
695 if (state.curr == state.next)
698 if (m_predo[state.curr] != NULL)
699 (m_listener->*m_predo [state.curr])(state);
701 if (need_trans())
return;
704 if (m_do[state.curr] != NULL)
705 (m_listener->*m_do [state.curr])(state);
707 if (need_trans())
return;
710 if (m_postdo[state.curr] != NULL)
711 (m_listener->*m_postdo[state.curr])(state);
715 if (m_exit[state.curr] != NULL)
716 (m_listener->*m_exit[state.curr])(state);
720 if (state.curr != state.next)
722 state.curr = state.next;
723 if(m_entry[state.curr] != NULL)
724 (m_listener->*m_entry[state.curr])(state);
725 update_curr(state.curr);
752 for (
int i = 0; i < m_num; ++i) s[i] = nullfunc;
839 inline void sync(States& st)
841 Guard guard(m_mutex);
845 inline bool need_trans()
847 Guard guard(m_mutex);
848 return (m_states.curr != m_states.next);
851 inline void update_curr(
const State curr)
853 Guard guard(m_mutex);
854 m_states.curr = curr;
859 #endif // RTC_STATEMACHINE_H
virtual ~StateMachine()
Definition: StateMachine.h:302
bool setDoAction(State state, Callback call_back)
Do action 関数を登録する
Definition: StateMachine.h:443
bool setExitAction(State state, Callback call_back)
Exit action 関数を登録する
Definition: StateMachine.h:501
Mutex クラス
Definition: Mutex.h:40
bool setPostDoAction(State state, Callback call_back)
PostDo action 関数を登録する
Definition: StateMachine.h:472
States getStates()
状態を取得する
Definition: StateMachine.h:580
Callback * m_entry
Entry action 用コールバック関数
Definition: StateMachine.h:780
States m_states
現在の状態情報
Definition: StateMachine.h:834
int m_num
状態数
Definition: StateMachine.h:762
Mutex m_mutex
Definition: StateMachine.h:836
void worker()
駆動関数
Definition: StateMachine.h:689
bool setEntryAction(State state, Callback call_back)
Entry action 関数を登録する
Definition: StateMachine.h:385
Callback * m_exit
Exit action 用コールバック関数
Definition: StateMachine.h:816
Callback * m_do
Do action 用コールバック関数
Definition: StateMachine.h:798
bool setTransitionAction(Callback call_back)
State transition action 関数を登録する
Definition: StateMachine.h:530
状態マシンクラス
Definition: StateMachine.h:263
void goTo(State state)
状態を遷移
Definition: StateMachine.h:662
bool isIn(State state)
現在状態を確認
Definition: StateMachine.h:630
void setNOP(Callback call_back)
NOP関数を登録する
Definition: StateMachine.h:329
State prev
Definition: StateMachine.h:58
Listener * m_listener
コールバック関数用リスナー
Definition: StateMachine.h:771
状態保持用クラス
Definition: StateMachine.h:55
bool setPreDoAction(State state, Callback call_back)
PreDo action 関数を登録する
Definition: StateMachine.h:414
void setStartState(States states)
初期状態をセットする
Definition: StateMachine.h:553
Callback * m_predo
PreDo action 用コールバック関数
Definition: StateMachine.h:789
State curr
Definition: StateMachine.h:57
Callback * m_postdo
PostDo action 用コールバック関数
Definition: StateMachine.h:807
bool m_selftrans
Definition: StateMachine.h:835
Guard テンプレートクラス
Definition: Guard.h:41
State next
Definition: StateMachine.h:59
void setListener(Listener *listener)
Listener オブジェクトを登録する
Definition: StateMachine.h:356
Callback m_transit
State transition action 用コールバック関数
Definition: StateMachine.h:825
StateMachine(int num_of_state)
コンストラクタ
Definition: StateMachine.h:285
void setNullFunc(Callback *s, Callback nullfunc)
NOP関数を設定
Definition: StateMachine.h:750
State getState()
現在の状態を取得する
Definition: StateMachine.h:603