00001 #include "StateNode.h"
00002 #include "Events/EventRouter.h"
00003 #include "Wireless/Wireless.h"
00004
00005 StateNode::~StateNode() {
00006 ASSERT(!isActive(), "Destructing while active?")
00007 for(std::vector<Transition*>::iterator it=transitions.begin(); it!=transitions.end(); it++)
00008 (*it)->RemoveReference();
00009 if(issetup) {
00010 for(std::vector<StateNode*>::iterator it=nodes.begin(); it!=nodes.end(); it++)
00011 (*it)->RemoveReference();
00012 }
00013 }
00014
00015 void StateNode::addTransition(Transition* trans) {
00016 transitions.push_back(trans);
00017 trans->AddReference();
00018 trans->addSource(this);
00019 }
00020
00021 void StateNode::DoStart() {
00022 BehaviorBase::DoStart();
00023 if(!issetup) {
00024 setup();
00025 issetup=true;
00026 }
00027 for(std::vector<Transition*>::iterator it=transitions.begin(); it!=transitions.end(); it++)
00028 (*it)->DoStart();
00029 erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast<unsigned int>(this),EventBase::activateETID,0,getName(),1);
00030 if(parent!=NULL)
00031 parent->transitionTo(this);
00032 }
00033
00034 void StateNode::DoStop() {
00035 for(std::vector<Transition*>::iterator it=transitions.begin(); it!=transitions.end(); it++) {
00036 ASSERT((*it)->isActive(),"Inactive transition");
00037 if((*it)->isActive())
00038 (*it)->DoStop();
00039 }
00040 for(std::vector<StateNode*>::iterator it=nodes.begin(); it!=nodes.end(); it++)
00041 if((*it)->isActive())
00042 (*it)->DoStop();
00043 if(!retain) {
00044 teardown();
00045 issetup=false;
00046 for(std::vector<StateNode*>::iterator it=nodes.begin(); it!=nodes.end(); it++)
00047 (*it)->RemoveReference();
00048 nodes.clear();
00049 }
00050 erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast<unsigned int>(this),EventBase::deactivateETID,0,getName(),0);
00051 BehaviorBase::DoStop();
00052 }
00053
00054 void StateNode::setName(const std::string& n) {
00055 name=n;
00056 }
00057
00058 void StateNode::transitionTo(StateNode*) {
00059
00060 }
00061
00062 void StateNode::transitionFrom(StateNode*) {
00063
00064 }
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076