00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef FSM_HPP
00026 #define FSM_HPP
00027
00028 #include "../src/skin_common.hpp"
00029 #include <string>
00030 #include <map>
00031 #include <set>
00032
00033 class EvtGeneric;
00034 class CmdGeneric;
00035
00036
00038 class FSM: public SkinObject
00039 {
00040 public:
00041 FSM( intf_thread_t *pIntf ): SkinObject( pIntf ) {}
00042 virtual ~FSM() {}
00043
00045 void addState( const string &state );
00046
00048 void addTransition( const string &state1, const string &event,
00049 const string &state2,
00050 CmdGeneric *pCmd = NULL );
00051
00053 const string &getState() const { return m_currentState; }
00054
00056 void setState( const string &state );
00057
00060 void handleTransition( const string &event );
00061
00062 private:
00065 typedef pair<string, string> Key_t;
00066
00069 typedef pair<string, CmdGeneric*> Data_t;
00070
00072 string m_currentState;
00073
00075 set<string> m_states;
00076
00080 map<Key_t, Data_t> m_transitions;
00081 };
00082
00083
00084 #endif