Homepage Demos Overview Downloads Tutorials Reference
Credits
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members | Related Pages | Search

StateNode.cc

Go to the documentation of this file.
00001 #include "StateNode.h"
00002 #include "Events/EventRouter.h"
00003 
00004 StateNode::~StateNode() {
00005   if(isActive())
00006     DoStop();
00007   for(std::vector<Transition*>::iterator it=transitions.begin(); it!=transitions.end(); it++)
00008     delete *it;
00009   for(std::vector<StateNode*>::iterator it=nodes.begin(); it!=nodes.end(); it++)
00010     (*it)->RemoveReference();
00011 }
00012 
00013 void StateNode::addTransition(Transition* trans) {
00014   transitions.push_back(trans);
00015   if(isActive())
00016     trans->enable();
00017 }
00018 
00019 void StateNode::DoStart() {
00020   BehaviorBase::DoStart();
00021   if(!issetup) {
00022     setup();
00023     issetup=true;
00024   }
00025   for(std::vector<Transition*>::iterator it=transitions.begin(); it!=transitions.end(); it++)
00026     (*it)->enable();
00027   erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast<unsigned int>(this),EventBase::activateETID,0,getName(),1);
00028   if(parent!=NULL)
00029     parent->transitionTo(this);
00030 }
00031 
00032 void StateNode::DoStop() {
00033   for(std::vector<Transition*>::iterator it=transitions.begin(); it!=transitions.end(); it++)
00034     (*it)->disable();
00035   for(std::vector<StateNode*>::iterator it=nodes.begin(); it!=nodes.end(); it++)
00036     (*it)->DoStop();
00037   if(!retain) {
00038     for(std::vector<StateNode*>::iterator it=nodes.begin(); it!=nodes.end(); it++)
00039       (*it)->RemoveReference();
00040     issetup=false;
00041   }
00042   erouter->postEvent(EventBase::stateMachineEGID,reinterpret_cast<unsigned int>(this),EventBase::deactivateETID,0,getName(),0);
00043   BehaviorBase::DoStop();
00044 }
00045 
00046 void StateNode::setName(const std::string& n) {
00047   name=n;
00048 }
00049 
00050 void StateNode::transitionTo(StateNode*) {
00051   // may want to throw a status event here
00052 }
00053 
00054 void StateNode::transitionFrom(StateNode*) {
00055   // may want to throw a status event here
00056 }
00057 
00058 /*! @file 
00059  * @brief Describes StateNode, which is both a state machine controller as well as a node within a state machine itself
00060  * @author ejt (Creator)
00061  *
00062  * $Author: ejt $
00063  * $Name: tekkotsu-1_4_1 $
00064  * $Revision: 1.2 $
00065  * $State: Exp $
00066  * $Date: 2003/06/05 17:03:09 $
00067  */
00068 

Tekkotsu v1.4
Generated Sat Jul 19 00:06:31 2003 by Doxygen 1.3.2