6#ifndef YARP_MANAGER_FSM
7#define YARP_MANAGER_FSM
32 if(szName) { strName = szName; }
39 const char*
getName() {
return strName.c_str(); }
42 return ((strName == alt.strName)); }
80 eventSink = pEventSink;
81 if(szName) { strName = szName; }
87 return strName.c_str(); }
99typedef std::map<FSM::StateBase*, std::map<FSM::Event*, FSM::StateBase*> >
MyStateMap;
100typedef std::map<FSM::StateBase*, std::map<FSM::Event*, FSM::StateBase*> >::iterator
MyStateItr;
111 currentTimeStamp = 0.0;
121 catch (std::exception& )
123 std::cerr<<
"Exception in currentState(): Initial state is not set!"<<std::endl;
129 if(!state) { state = pState; }
136 transitions[source][event] = target;
138 catch (std::exception& typevar)
140 std::cerr<<
"Exception in addTransition(): "<<typevar.what()<<std::endl;
160 std::cerr<<
"Initial state is not set!"<<std::endl;
172 currentTimeStamp =
event->getTimeStamp();
175 it = transitions.find(state);
176 if(it==transitions.end())
178 std::cerr<<
"No transition is registered from state "<<state->
getName()<<std::endl;
183 std::map<Event*, StateBase*> row = transitions[state];
184 std::map<Event*, StateBase*>::iterator itr2 = row.find(event);
185 if(itr2 == row.end())
187 std::cerr<<
"No transition is registered for event ";
188 std::cerr<<
event->getName()<<
" ("<<
event->getTimeStamp()<<
")";
189 std::cerr<<
" from state "<<state->
getName()<<std::endl;
206 double currentTimeStamp;
Event(const char *szName)
bool operator==(const Event &alt) const
void setTimeStamp(double t)
virtual void castEvent(Event *event)=0
virtual ~IEventSink()=default
StateBase(IEventSink *pEventSink, const char *szName=nullptr)
void castEvent(Event *event)
virtual ~StateBase()=default
virtual void onTransition(StateBase *previous, Event *event, StateBase *current)
Callback onTransition represents the change in the states.
StateBase * currentState()
~StateMachineBase() override=default
virtual void onEventMissed(StateBase *state, Event *event)
void setInitState(StateBase *pState)
void castEvent(Event *event) override
void addTransition(StateBase *source, Event *event, StateBase *target)
A class for thread synchronization and mutual exclusion.
void wait()
Decrement the counter, even if we must wait to do that.
void post()
Increment the counter.
std::map< FSM::StateBase *, std::map< FSM::Event *, FSM::StateBase * > > MyStateMap
std::map< FSM::StateBase *, std::map< FSM::Event *, FSM::StateBase * > >::iterator MyStateItr