Tekkotsu Homepage
Demos
Overview
Downloads
Dev. Resources
Reference
Credits

BehaviorBase.cc

Go to the documentation of this file.
00001 #include "BehaviorBase.h"
00002 #include "Events/EventRouter.h"
00003 
00004 BehaviorBase::BehaviorBase(const std::string& name)
00005   : ReferenceCounter(), EventListener(), started(false),
00006     instanceName(name), className(name)
00007 {
00008   getRegistryInstance().insert(this);
00009 }
00010 
00011 BehaviorBase::BehaviorBase(const std::string& classname, const std::string& instancename)
00012   : ReferenceCounter(), EventListener(), started(false),
00013     instanceName(instancename), className(classname)
00014 {
00015   getRegistryInstance().insert(this);
00016 }
00017 
00018 
00019 BehaviorBase::BehaviorBase(const BehaviorBase& b)
00020   : ReferenceCounter(b), EventListener(b), started(b.started),
00021     instanceName(b.instanceName), className(b.className)
00022 {
00023   getRegistryInstance().insert(this);
00024 }
00025 
00026 BehaviorBase&
00027 BehaviorBase::operator=(const BehaviorBase& b) {
00028   ReferenceCounter::operator=(b);
00029   EventListener::operator=(b);
00030   started=b.started;
00031   instanceName=b.instanceName;
00032   return *this;
00033 }
00034 
00035 BehaviorBase::~BehaviorBase() {
00036   SetAutoDelete(false);
00037   if(started)
00038     std::cerr << "Behavior " << getName() << " deleted while running: use 'RemoveReference', not 'delete'" << std::endl;
00039   if(erouter!=NULL)
00040     erouter->removeListener(this);
00041   getRegistryInstance().erase(this);
00042 }
00043 
00044 void
00045 BehaviorBase::DoStart() {
00046   //std::cout << getName() << " started " << this << std::endl;
00047   if(!started) {
00048     started=true;
00049     AddReference();
00050   }
00051 }
00052 
00053 void
00054 BehaviorBase::DoStop() {
00055   //std::cout << getName() << " stopped " << this << std::endl;
00056   if(started) {
00057     started=false;
00058     erouter->remove(this);
00059     RemoveReference();
00060   }
00061 }
00062 
00063 std::set<BehaviorBase*>& BehaviorBase::getRegistryInstance() {
00064   static std::set<BehaviorBase*> registry;
00065   return registry;
00066 }
00067 
00068 /*! @file
00069  * @brief Implements BehaviorBase from which all Behaviors should inherit
00070  * @author ejt (Creator)
00071  *
00072  * $Author: ejt $
00073  * $Name: tekkotsu-4_0 $
00074  * $Revision: 1.12 $
00075  * $State: Exp $
00076  * $Date: 2007/06/14 06:24:03 $
00077  */
00078 

Tekkotsu v4.0
Generated Thu Nov 22 00:54:51 2007 by Doxygen 1.5.4