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   erouter->removeListener(this);
00040   getRegistryInstance().erase(this);
00041 }
00042 
00043 void
00044 BehaviorBase::DoStart() {
00045   //std::cout << getName() << " started " << this << std::endl;
00046   if(!started) {
00047     started=true;
00048     AddReference();
00049   }
00050 }
00051 
00052 void
00053 BehaviorBase::DoStop() {
00054   //std::cout << getName() << " stopped " << this << std::endl;
00055   if(started) {
00056     started=false;
00057     erouter->remove(this);
00058     RemoveReference();
00059   }
00060 }
00061 
00062 std::set<BehaviorBase*>& BehaviorBase::getRegistryInstance() {
00063   static std::set<BehaviorBase*> registry;
00064   return registry;
00065 }
00066 
00067 /*! @file
00068  * @brief Implements BehaviorBase from which all Behaviors should inherit
00069  * @author ejt (Creator)
00070  *
00071  * $Author: ejt $
00072  * $Name: tekkotsu-3_0 $
00073  * $Revision: 1.11 $
00074  * $State: Exp $
00075  * $Date: 2006/09/27 21:15:52 $
00076  */
00077 

Tekkotsu v3.0
Generated Wed Oct 4 00:03:42 2006 by Doxygen 1.4.7