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 StateNode* StateNode::addNode(StateNode* node) {
00022 nodes.push_back(node);
00023 node->AddReference();
00024 if ( node->parent == NULL )
00025 node->parent = this;
00026 return node;
00027 }
00028
00029 void StateNode::DoStart() {
00030 BehaviorBase::DoStart();
00031 if(!issetup) {
00032 setup();
00033 issetup=true;
00034 }
00035 for(std::vector<Transition*>::iterator it=transitions.begin(); it!=transitions.end(); it++)
00036 if ( !(*it)->isActive() ) (*it)->DoStart();
00037 erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast<unsigned int>(this),EventBase::activateETID,0,getName(),1);
00038 if(parent!=NULL)
00039 parent->transitionTo(this);
00040 }
00041
00042 void StateNode::DoStop() {
00043 for(std::vector<Transition*>::iterator it=transitions.begin(); it!=transitions.end(); it++) {
00044 if((*it)->isActive())
00045 (*it)->DoStop();
00046 }
00047 for(std::vector<StateNode*>::iterator it=nodes.begin(); it!=nodes.end(); it++)
00048 if((*it)->isActive())
00049 (*it)->DoStop();
00050 if(!retain) {
00051 teardown();
00052 issetup=false;
00053 for(std::vector<StateNode*>::iterator it=nodes.begin(); it!=nodes.end(); it++)
00054 (*it)->RemoveReference();
00055 nodes.clear();
00056 }
00057 erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast<unsigned int>(this),EventBase::deactivateETID,0,getName(),0);
00058 BehaviorBase::DoStop();
00059 }
00060
00061 void StateNode::setName(const std::string& n) {
00062 name=n;
00063 }
00064
00065 void StateNode::transitionTo(StateNode*) {
00066
00067 }
00068
00069 void StateNode::transitionFrom(StateNode*) {
00070
00071 }
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083