[Orxonox-commit 2493] r7200 - in code/branches/consolecommands3/src: libraries/core libraries/tools modules/overlays/hud orxonox/gametypes orxonox/weaponsystem

landauf at orxonox.net landauf at orxonox.net
Sun Aug 22 00:27:53 CEST 2010


Author: landauf
Date: 2010-08-22 00:27:53 +0200 (Sun, 22 Aug 2010)
New Revision: 7200

Modified:
   code/branches/consolecommands3/src/libraries/core/BaseObject.cc
   code/branches/consolecommands3/src/libraries/core/EventIncludes.h
   code/branches/consolecommands3/src/libraries/core/Executor.cc
   code/branches/consolecommands3/src/libraries/core/Executor.h
   code/branches/consolecommands3/src/libraries/core/Thread.cc
   code/branches/consolecommands3/src/libraries/core/Thread.h
   code/branches/consolecommands3/src/libraries/core/ThreadPool.cc
   code/branches/consolecommands3/src/libraries/core/ThreadPool.h
   code/branches/consolecommands3/src/libraries/core/XMLPort.h
   code/branches/consolecommands3/src/libraries/tools/Timer.cc
   code/branches/consolecommands3/src/libraries/tools/Timer.h
   code/branches/consolecommands3/src/modules/overlays/hud/ChatOverlay.cc
   code/branches/consolecommands3/src/orxonox/gametypes/Dynamicmatch.cc
   code/branches/consolecommands3/src/orxonox/weaponsystem/Munition.cc
Log:
createExecutor() now returns a SharedPtr instead of a pointer. Adapted code that uses createExecutor() accordingly.

Modified: code/branches/consolecommands3/src/libraries/core/BaseObject.cc
===================================================================
--- code/branches/consolecommands3/src/libraries/core/BaseObject.cc	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/libraries/core/BaseObject.cc	2010-08-21 22:27:53 UTC (rev 7200)
@@ -476,8 +476,8 @@
                 XMLPortClassObjectContainer<BaseObject, BaseObject>* container = (XMLPortClassObjectContainer<BaseObject, BaseObject>*)(identifier->getXMLPortObjectContainer(statename));
                 if (!container)
                 {
-                    ExecutorMember<BaseObject>* setfunctor = createExecutor(createFunctor(&BaseObject::addEventSource), std::string( "BaseObject" ) + "::" + "addEventSource" + '(' + statename + ')');
-                    ExecutorMember<BaseObject>* getfunctor = createExecutor(createFunctor(&BaseObject::getEventSource), std::string( "BaseObject" ) + "::" + "getEventSource" + '(' + statename + ')');
+                    const ExecutorMemberPtr<BaseObject>& setfunctor = createExecutor(createFunctor(&BaseObject::addEventSource), std::string( "BaseObject" ) + "::" + "addEventSource" + '(' + statename + ')');
+                    const ExecutorMemberPtr<BaseObject>& getfunctor = createExecutor(createFunctor(&BaseObject::getEventSource), std::string( "BaseObject" ) + "::" + "getEventSource" + '(' + statename + ')');
                     setfunctor->setDefaultValue(1, statename);
                     getfunctor->setDefaultValue(1, statename);
 

Modified: code/branches/consolecommands3/src/libraries/core/EventIncludes.h
===================================================================
--- code/branches/consolecommands3/src/libraries/core/EventIncludes.h	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/libraries/core/EventIncludes.h	2010-08-21 22:27:53 UTC (rev 7200)
@@ -75,8 +75,10 @@
     XMLPortEventStateIntern(xmlportevent##function, classname, statename, xmlelement, mode)
 
 #define XMLPortEventStateIntern(name, classname, statename, xmlelement, mode) \
-    static orxonox::ExecutorMember<classname>* xmlsetfunctor##name = (orxonox::ExecutorMember<classname>*)&orxonox::createExecutor(orxonox::createFunctor(&classname::addEventSource), std::string( #classname ) + "::" + "addEventSource" + '(' + statename + ')')->setDefaultValue(1, statename); \
-    static orxonox::ExecutorMember<classname>* xmlgetfunctor##name = (orxonox::ExecutorMember<classname>*)&orxonox::createExecutor(orxonox::createFunctor(&classname::getEventSource), std::string( #classname ) + "::" + "getEventSource" + '(' + statename + ')')->setDefaultValue(1, statename); \
+    static orxonox::ExecutorMemberPtr<classname> xmlsetfunctor##name = orxonox::createExecutor(orxonox::createFunctor(&classname::addEventSource), std::string( #classname ) + "::" + "addEventSource" + '(' + statename + ')').cast<orxonox::ExecutorMember<classname> >(); \
+    static orxonox::ExecutorMemberPtr<classname> xmlgetfunctor##name = orxonox::createExecutor(orxonox::createFunctor(&classname::getEventSource), std::string( #classname ) + "::" + "getEventSource" + '(' + statename + ')').cast<orxonox::ExecutorMember<classname> >(); \
+    xmlsetfunctor##name->setDefaultValue(1, statename); \
+    xmlgetfunctor##name->setDefaultValue(1, statename); \
     XMLPortObjectGeneric(xmlport##name, classname, orxonox::BaseObject, statename, xmlsetfunctor##name, xmlgetfunctor##name, xmlelement, mode, false, true)
 
 

Modified: code/branches/consolecommands3/src/libraries/core/Executor.cc
===================================================================
--- code/branches/consolecommands3/src/libraries/core/Executor.cc	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/libraries/core/Executor.cc	2010-08-21 22:27:53 UTC (rev 7200)
@@ -190,57 +190,45 @@
         }
     }
 
-    Executor& Executor::setDefaultValues(const MultiType& param1)
+    void Executor::setDefaultValues(const MultiType& param1)
     {
         this->defaultValue_[0] = param1;
-
-        return (*this);
     }
 
-    Executor& Executor::setDefaultValues(const MultiType& param1, const MultiType& param2)
+    void Executor::setDefaultValues(const MultiType& param1, const MultiType& param2)
     {
         this->defaultValue_[0] = param1;
         this->defaultValue_[1] = param2;
-
-        return (*this);
     }
 
-    Executor& Executor::setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3)
+    void Executor::setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3)
     {
         this->defaultValue_[0] = param1;
         this->defaultValue_[1] = param2;
         this->defaultValue_[2] = param3;
-
-        return (*this);
     }
 
-    Executor& Executor::setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4)
+    void Executor::setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4)
     {
         this->defaultValue_[0] = param1;
         this->defaultValue_[1] = param2;
         this->defaultValue_[2] = param3;
         this->defaultValue_[3] = param4;
-
-        return (*this);
     }
 
-    Executor& Executor::setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5)
+    void Executor::setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5)
     {
         this->defaultValue_[0] = param1;
         this->defaultValue_[1] = param2;
         this->defaultValue_[2] = param3;
         this->defaultValue_[3] = param4;
         this->defaultValue_[4] = param5;
-
-        return (*this);
     }
 
-    Executor& Executor::setDefaultValue(unsigned int index, const MultiType& param)
+    void Executor::setDefaultValue(unsigned int index, const MultiType& param)
     {
         if (index < MAX_FUNCTOR_ARGUMENTS)
             this->defaultValue_[index] = param;
-
-        return (*this);
     }
 
     bool Executor::allDefaultValuesSet() const

Modified: code/branches/consolecommands3/src/libraries/core/Executor.h
===================================================================
--- code/branches/consolecommands3/src/libraries/core/Executor.h	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/libraries/core/Executor.h	2010-08-21 22:27:53 UTC (rev 7200)
@@ -80,12 +80,12 @@
             inline const std::string& getName() const
                 { return this->name_; }
 
-            Executor& setDefaultValues(const MultiType& param1);
-            Executor& setDefaultValues(const MultiType& param1, const MultiType& param2);
-            Executor& setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3);
-            Executor& setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4);
-            Executor& setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5);
-            Executor& setDefaultValue(unsigned int index, const MultiType& param);
+            void setDefaultValues(const MultiType& param1);
+            void setDefaultValues(const MultiType& param1, const MultiType& param2);
+            void setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3);
+            void setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4);
+            void setDefaultValues(const MultiType& param1, const MultiType& param2, const MultiType& param3, const MultiType& param4, const MultiType& param5);
+            void setDefaultValue(unsigned int index, const MultiType& param);
 
             inline MultiType getDefaultValue(unsigned int index) const
             {
@@ -168,7 +168,7 @@
                 const typename FunctorMember<T>::Objects& objects = this->functorMember_->getObjects();
 
                 this->functorMember_->setObject(object);
-                const MultiType& result = Executor::parse(params, success, delimiter);
+                const MultiType& result = this->Executor::parse(params, success, delimiter);
                 this->functorMember_->setObjects(objects);
 
                 return result;
@@ -179,7 +179,7 @@
                 const typename FunctorMember<T>::Objects& objects = this->functorMember_->getObjects();
 
                 this->functorMember_->setObject(object);
-                const MultiType& result = Executor::parse(params, success, delimiter);
+                const MultiType& result = this->Executor::parse(params, success, delimiter);
                 this->functorMember_->setObjects(objects);
 
                 return result;
@@ -189,18 +189,18 @@
             FunctorMemberPtr<T> functorMember_;
     };
 
-    inline Executor* createExecutor(const FunctorPtr& functor, const std::string& name = "")
+    inline ExecutorPtr createExecutor(const FunctorPtr& functor, const std::string& name = "")
     {
         return new Executor(functor, name);
     }
 
     template <class T>
-    inline ExecutorMember<T>* createExecutor(const FunctorMemberPtr<T>& functor, const std::string& name = "")
+    inline ExecutorMemberPtr<T> createExecutor(const FunctorMemberPtr<T>& functor, const std::string& name = "")
     {
         return new ExecutorMember<T>(functor, name);
     }
 
-    inline ExecutorStatic* createExecutor(const FunctorStaticPtr& functor, const std::string& name = "")
+    inline ExecutorStaticPtr createExecutor(const FunctorStaticPtr& functor, const std::string& name = "")
     {
         return new ExecutorStatic(functor, name);
     }

Modified: code/branches/consolecommands3/src/libraries/core/Thread.cc
===================================================================
--- code/branches/consolecommands3/src/libraries/core/Thread.cc	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/libraries/core/Thread.cc	2010-08-21 22:27:53 UTC (rev 7200)
@@ -74,7 +74,7 @@
       return isWorking;
     }
 
-    bool Thread::evaluateExecutor( Executor* executor )
+    bool Thread::evaluateExecutor( const ExecutorPtr& executor )
     {
         this->isWorkingMutex_->lock();
         this->isWorking_=true;
@@ -91,13 +91,12 @@
         while( !stopThread )
         {
             //this->executorMutex_->lock();
-            Executor* executor = this->executor_;
+            ExecutorPtr executor = this->executor_;
             //this->executorMutex_->unlock();
             if( executor )
             {
                 (*executor)();
                 this->executorMutex_->lock();
-                delete this->executor_;
                 this->executor_ = 0;
                 this->executorMutex_->unlock();
                 this->isWorkingMutex_->lock();

Modified: code/branches/consolecommands3/src/libraries/core/Thread.h
===================================================================
--- code/branches/consolecommands3/src/libraries/core/Thread.h	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/libraries/core/Thread.h	2010-08-21 22:27:53 UTC (rev 7200)
@@ -45,17 +45,17 @@
 
         bool isWorking();
         void waitUntilFinished();
-        bool evaluateExecutor( Executor* executor );
+        bool evaluateExecutor( const ExecutorPtr& executor );
 
     private:
         void            threadLoop();
 
-        Executor*       executor_;
+        ExecutorPtr     executor_;
         bool            isWorking_;
         bool            stopThread_;
         boost::thread*  workerThread_;
         boost::mutex*   executorMutex_;
-        boost::mutex*     isWorkingMutex_;
+        boost::mutex*   isWorkingMutex_;
         boost::mutex*   stopThreadMutex_;
     };
 

Modified: code/branches/consolecommands3/src/libraries/core/ThreadPool.cc
===================================================================
--- code/branches/consolecommands3/src/libraries/core/ThreadPool.cc	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/libraries/core/ThreadPool.cc	2010-08-21 22:27:53 UTC (rev 7200)
@@ -80,7 +80,7 @@
         }
     }
 
-    bool ThreadPool::passFunction( Executor* executor, bool addThread )
+    bool ThreadPool::passFunction( const ExecutorPtr& executor, bool addThread )
     {
         std::vector<Thread*>::iterator it;
         for ( it=this->threadPool_.begin(); it!=this->threadPool_.end(); ++it )

Modified: code/branches/consolecommands3/src/libraries/core/ThreadPool.h
===================================================================
--- code/branches/consolecommands3/src/libraries/core/ThreadPool.h	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/libraries/core/ThreadPool.h	2010-08-21 22:27:53 UTC (rev 7200)
@@ -45,7 +45,7 @@
         unsigned int removeThreads( unsigned int nr );
         unsigned int setNrOfThreads( unsigned int nr );
 
-        bool passFunction( Executor* executor, bool addThread=false );
+        bool passFunction( const ExecutorPtr& executor, bool addThread=false );
         void synchronise();
 
     private:

Modified: code/branches/consolecommands3/src/libraries/core/XMLPort.h
===================================================================
--- code/branches/consolecommands3/src/libraries/core/XMLPort.h	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/libraries/core/XMLPort.h	2010-08-21 22:27:53 UTC (rev 7200)
@@ -74,8 +74,8 @@
     write an existing value to an XML file).
 */
 #define XMLPortParam(classname, paramname, loadfunction, savefunction, xmlelement, mode) \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
     XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, classname, this, paramname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode)
 
 /**
@@ -93,8 +93,8 @@
 */
 #define XMLPortParamVariable(classname, paramname, variable, xmlelement, mode) \
     XMLPortVariableHelperClass xmlcontainer##variable##dummy(static_cast<void*>(&variable)); \
-    static ExecutorMember<orxonox::XMLPortVariableHelperClass>* xmlcontainer##variable##loadexecutor = static_cast<ExecutorMember<orxonox::XMLPortVariableHelperClass>*>(orxonox::createExecutor(orxonox::createFunctor(orxonox::XMLPortVariableHelperClass::getLoader(variable)), std::string( #classname ) + "::" + #variable + "loader")); \
-    static ExecutorMember<orxonox::XMLPortVariableHelperClass>* xmlcontainer##variable##saveexecutor = static_cast<ExecutorMember<orxonox::XMLPortVariableHelperClass>*>(orxonox::createExecutor(orxonox::createFunctor(orxonox::XMLPortVariableHelperClass::getSaver (variable)), std::string( #classname ) + "::" + #variable + "saver" )); \
+    static ExecutorMemberPtr<orxonox::XMLPortVariableHelperClass> xmlcontainer##variable##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(orxonox::XMLPortVariableHelperClass::getLoader(variable)), std::string( #classname ) + "::" + #variable + "loader"); \
+    static ExecutorMemberPtr<orxonox::XMLPortVariableHelperClass> xmlcontainer##variable##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(orxonox::XMLPortVariableHelperClass::getSaver (variable)), std::string( #classname ) + "::" + #variable + "saver" ); \
     XMLPortParamGeneric(xmlcontainer##variable, classname, orxonox::XMLPortVariableHelperClass, &xmlcontainer##variable##dummy, paramname, xmlcontainer##variable##loadexecutor, xmlcontainer##variable##saveexecutor, xmlelement, mode)
 
 /**
@@ -109,8 +109,8 @@
     You don't have to use this, if there exist only one function with the given name.
 */
 #define XMLPortParamTemplate(classname, paramname, loadfunction, savefunction, xmlelement, mode, ...) \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
     XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, classname, this, paramname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode)
 
 // --------------------
@@ -128,13 +128,13 @@
     When saving the object, only one of both options has to be saved; this is, where this macro helps.
 */
 #define XMLPortParamLoadOnly(classname, paramname, loadfunction, xmlelement, mode) \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##0##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##0##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
     XMLPortParamGeneric(xmlcontainer##loadfunction##0, classname, classname, this, paramname, xmlcontainer##loadfunction##0##loadexecutor, 0, xmlelement, mode)
 /**
     @brief This is the same as XMLPortParamTemplate, but for load-only attributes (see XMLPortParamLoadOnly).
 */
 #define XMLPortParamLoadOnlyTemplate(classname, paramname, loadfunction, xmlelement, mode, ...) \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##0##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##0##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
     XMLPortParamGeneric(xmlcontainer##loadfunction##0, classname, classname, this, paramname, xmlcontainer##loadfunction##0##loadexecutor, 0, xmlelement, mode)
 
 // ------------------
@@ -160,15 +160,15 @@
     > XMLPortParamExtern(SpaceShip, Pilot, myPilot_, "pilotname", setName, getName, xmlelement, mode);
 */
 #define XMLPortParamExtern(classname, externclass, object, paramname, loadfunction, savefunction, xmlelement, mode) \
-    static ExecutorMember<externclass>* xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&externclass::loadfunction), std::string( #externclass ) + "::" + #loadfunction); \
-    static ExecutorMember<externclass>* xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&externclass::savefunction), std::string( #externclass ) + "::" + #savefunction); \
+    static ExecutorMemberPtr<externclass> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&externclass::loadfunction), std::string( #externclass ) + "::" + #loadfunction); \
+    static ExecutorMemberPtr<externclass> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&externclass::savefunction), std::string( #externclass ) + "::" + #savefunction); \
     XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, externclass, object, paramname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode);
 /**
     @brief This is the same as XMLPortParamTemplate, but for extern attributes (see XMLPortParamExtern).
 */
 #define XMLPortParamExternTemplate(classname, externclass, object, paramname, loadfunction, savefunction, xmlelement, mode, ...) \
-    static ExecutorMember<externclass>* xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<externclass, __VA_ARGS__ >(&externclass::loadfunction), std::string( #externclass ) + "::" + #loadfunction); \
-    static ExecutorMember<externclass>* xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&externclass::savefunction), std::string( #externclass ) + "::" + #savefunction); \
+    static ExecutorMemberPtr<externclass> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<externclass, __VA_ARGS__ >(&externclass::loadfunction), std::string( #externclass ) + "::" + #loadfunction); \
+    static ExecutorMemberPtr<externclass> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&externclass::savefunction), std::string( #externclass ) + "::" + #savefunction); \
     XMLPortParamGeneric(xmlcontainer##loadfunction##savefunction, classname, externclass, object, paramname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode);
 
 // -------------------
@@ -248,15 +248,15 @@
     empty string). Then you can add sub-objects directly into the mainclass.
 */
 #define XMLPortObjectExtended(classname, objectclass, sectionname, loadfunction, savefunction, xmlelement, mode, bApplyLoaderMask, bLoadBefore) \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
     XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode, bApplyLoaderMask, bLoadBefore)
 /**
     @brief This is the same as XMLPortObjectExtended, but you can specify the loadfunction by adding the param types. See XMLPortParamTemplate for more details about the types.
 */
 #define XMLPortObjectExtendedTemplate(classname, objectclass, sectionname, loadfunction, savefunction, xmlelement, mode, bApplyLoaderMask, bLoadBefore, ...) \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
     XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode, bApplyLoaderMask, bLoadBefore)
 
 // -------------
@@ -266,15 +266,15 @@
     @brief This is the same as XMLPortObjectExtended, but bApplyLoaderMask is false and bLoadBefore is true by default.
 */
 #define XMLPortObject(classname, objectclass, sectionname, loadfunction, savefunction, xmlelement, mode) \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
     XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode, false, true)
 /**
     @brief This is the same as XMLPortObject, but you can specify the loadfunction by adding the param types. See XMLPortParamTemplate for more details about the types.
 */
 #define XMLPortObjectTemplate(classname, objectclass, sectionname, loadfunction, savefunction, xmlelement, mode, ...) \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
-    static ExecutorMember<classname>* xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##loadexecutor = orxonox::createExecutor(orxonox::createFunctor<classname, __VA_ARGS__ >(&classname::loadfunction), std::string( #classname ) + "::" + #loadfunction); \
+    static ExecutorMemberPtr<classname> xmlcontainer##loadfunction##savefunction##saveexecutor = orxonox::createExecutor(orxonox::createFunctor(&classname::savefunction), std::string( #classname ) + "::" + #savefunction); \
     XMLPortObjectGeneric(xmlcontainer##loadfunction##savefunction, classname, objectclass, sectionname, xmlcontainer##loadfunction##savefunction##loadexecutor, xmlcontainer##loadfunction##savefunction##saveexecutor, xmlelement, mode, false, true)
 
 // --------------------
@@ -347,7 +347,7 @@
         };
 
         public:
-            XMLPortClassParamContainer(const std::string& paramname, Identifier* identifier, ExecutorMember<T>* loadexecutor, ExecutorMember<T>* saveexecutor)
+            XMLPortClassParamContainer(const std::string& paramname, Identifier* identifier, const ExecutorMemberPtr<T>& loadexecutor, const ExecutorMemberPtr<T>& saveexecutor)
             {
                 this->paramname_ = paramname;
                 this->identifier_ = identifier;
@@ -357,10 +357,6 @@
 
             ~XMLPortClassParamContainer()
             {
-                assert(this->loadexecutor_);
-                delete this->loadexecutor_;
-                if (this->saveexecutor_)
-                    delete this->saveexecutor_;
             }
 
             XMLPortParamContainer& port(BaseObject* owner, T* object, Element& xmlelement, XMLPort::Mode mode)
@@ -478,8 +474,8 @@
             }
 
         private:
-            ExecutorMember<T>* loadexecutor_;
-            ExecutorMember<T>* saveexecutor_;
+            ExecutorMemberPtr<T> loadexecutor_;
+            ExecutorMemberPtr<T> saveexecutor_;
             ParseParams parseParams_;
     };
 
@@ -521,7 +517,7 @@
     class XMLPortClassObjectContainer : public XMLPortObjectContainer
     {
         public:
-            XMLPortClassObjectContainer(const std::string& sectionname, Identifier* identifier, ExecutorMember<T>* loadexecutor, ExecutorMember<T>* saveexecutor, bool bApplyLoaderMask, bool bLoadBefore)
+            XMLPortClassObjectContainer(const std::string& sectionname, Identifier* identifier, const ExecutorMemberPtr<T>& loadexecutor, const ExecutorMemberPtr<T>& saveexecutor, bool bApplyLoaderMask, bool bLoadBefore)
             {
                 this->sectionname_ = sectionname;
                 this->identifier_ = identifier;
@@ -535,10 +531,6 @@
 
             ~XMLPortClassObjectContainer()
             {
-                assert(this->loadexecutor_);
-                delete this->loadexecutor_;
-                if (this->saveexecutor_)
-                    delete this->saveexecutor_;
             }
 
             void callLoadExecutor(BaseObject* object, BaseObject* newObject)
@@ -552,8 +544,8 @@
             }
 
         private:
-            ExecutorMember<T>* loadexecutor_;
-            ExecutorMember<T>* saveexecutor_;
+            ExecutorMemberPtr<T> loadexecutor_;
+            ExecutorMemberPtr<T> saveexecutor_;
     };
 
 

Modified: code/branches/consolecommands3/src/libraries/tools/Timer.cc
===================================================================
--- code/branches/consolecommands3/src/libraries/tools/Timer.cc	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/libraries/tools/Timer.cc	2010-08-21 22:27:53 UTC (rev 7200)
@@ -53,7 +53,7 @@
         Timer* delaytimer = new Timer();
         delaytimerset.insert(delaytimer);
 
-        ExecutorStatic* delayexecutor = createExecutor(createFunctor(&executeDelayedCommand));
+        const ExecutorStaticPtr& delayexecutor = createExecutor(createFunctor(&executeDelayedCommand));
         delayexecutor->setDefaultValues(delaytimer, command);
         delaytimer->setTimer(delay, false, delayexecutor);
     }
@@ -96,7 +96,7 @@
         @param bLoop If true, the function gets called every 'interval' seconds
         @param exeuctor A executor of the function to call
     */
-    Timer::Timer(float interval, bool bLoop, Executor* executor, bool bKillAfterCall)
+    Timer::Timer(float interval, bool bLoop, const ExecutorPtr& executor, bool bKillAfterCall)
     {
         this->init();
         RegisterObject(Timer);
@@ -105,14 +105,6 @@
     }
 
     /**
-        @brief Deletes the executor.
-    */
-    Timer::~Timer()
-    {
-        this->deleteExecutor();
-    }
-
-    /**
         @brief Initializes the Timer
     */
     void Timer::init()
@@ -140,15 +132,6 @@
     }
 
     /**
-        @brief Deletes the executor.
-    */
-    void Timer::deleteExecutor()
-    {
-      if (this->executor_)
-          delete this->executor_;
-    }
-
-    /**
         @brief Updates the timer before the frames are rendered.
     */
     void Timer::tick(const Clock& time)

Modified: code/branches/consolecommands3/src/libraries/tools/Timer.h
===================================================================
--- code/branches/consolecommands3/src/libraries/tools/Timer.h	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/libraries/tools/Timer.h	2010-08-21 22:27:53 UTC (rev 7200)
@@ -77,9 +77,8 @@
     {
         public:
             Timer();
-            ~Timer();
 
-            Timer(float interval, bool bLoop, Executor* executor, bool bKillAfterCall = false);
+            Timer(float interval, bool bLoop, const ExecutorPtr& executor, bool bKillAfterCall = false);
 
             /**
                 @brief Initializes the Timer with given values.
@@ -88,10 +87,8 @@
                 @param object The object owning the timer and the function
                 @param executor A executor of the function to call
             */
-            void setTimer(float interval, bool bLoop, Executor* executor, bool bKillAfterCall = false)
+            void setTimer(float interval, bool bLoop, const ExecutorPtr& executor, bool bKillAfterCall = false)
             {
-                this->deleteExecutor();
-
                 this->setInterval(interval);
                 this->bLoop_ = bLoop;
                 this->executor_ = executor;
@@ -102,7 +99,6 @@
             }
 
             void run();
-            void deleteExecutor();
 
             /** @brief Starts the Timer: Function-call after 'interval' seconds. */
             inline void startTimer()
@@ -140,14 +136,14 @@
         private:
             void init();
 
-            Executor* executor_;  //!< The executor of the function that should be called when the time expires
+            ExecutorPtr executor_;  //!< The executor of the function that should be called when the time expires
 
-            long long interval_;  //!< The time-interval in micro seconds
-            bool bLoop_;          //!< If true, the function gets called every 'interval' seconds
-            bool bActive_;        //!< If true, the Timer ticks and calls the function if the time's up
-            bool bKillAfterCall_; //!< If true the timer gets deleted after it called the function
+            long long interval_;    //!< The time-interval in micro seconds
+            bool bLoop_;            //!< If true, the function gets called every 'interval' seconds
+            bool bActive_;          //!< If true, the Timer ticks and calls the function if the time's up
+            bool bKillAfterCall_;   //!< If true the timer gets deleted after it called the function
 
-            long long time_;      //!< Internal variable, counting the time till the next function-call
+            long long time_;        //!< Internal variable, counting the time till the next function-call
     };
 }
 

Modified: code/branches/consolecommands3/src/modules/overlays/hud/ChatOverlay.cc
===================================================================
--- code/branches/consolecommands3/src/modules/overlays/hud/ChatOverlay.cc	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/modules/overlays/hud/ChatOverlay.cc	2010-08-21 22:27:53 UTC (rev 7200)
@@ -90,7 +90,7 @@
 
         Timer* timer = new Timer();
         this->timers_.insert(timer); // store the timer in a set to destroy it in the destructor
-        Executor* executor = createExecutor(createFunctor(&ChatOverlay::dropMessage, this));
+        const ExecutorPtr& executor = createExecutor(createFunctor(&ChatOverlay::dropMessage, this));
         executor->setDefaultValues(timer);
         timer->setTimer(this->displayTime_, false, executor, true);
 

Modified: code/branches/consolecommands3/src/orxonox/gametypes/Dynamicmatch.cc
===================================================================
--- code/branches/consolecommands3/src/orxonox/gametypes/Dynamicmatch.cc	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/orxonox/gametypes/Dynamicmatch.cc	2010-08-21 22:27:53 UTC (rev 7200)
@@ -154,7 +154,9 @@
                 {
                     spaceship->getEngine()->setSpeedFactor(5);
                     WeakPtr<Engine>* ptr = new WeakPtr<Engine>(spaceship->getEngine());
-                    new Timer(10, false, &createExecutor(createFunctor(&Dynamicmatch::resetSpeedFactor, this))->setDefaultValue(0, ptr), true);
+                    ExecutorPtr executor = createExecutor(createFunctor(&Dynamicmatch::resetSpeedFactor, this));
+                    executor->setDefaultValue(0, ptr);
+                    new Timer(10, false, executor, true);
                 }
             }
 
@@ -253,7 +255,9 @@
                 {
                     spaceship->getEngine()->setSpeedFactor(5);
                     WeakPtr<Engine>* ptr = new WeakPtr<Engine>(spaceship->getEngine());
-                    new Timer(10, false, &createExecutor(createFunctor(&Dynamicmatch::resetSpeedFactor, this))->setDefaultValue(0, ptr), true);
+                    ExecutorPtr executor = createExecutor(createFunctor(&Dynamicmatch::resetSpeedFactor, this));
+                    executor->setDefaultValue(0, ptr);
+                    new Timer(10, false, executor, true);
                 }
 
             }

Modified: code/branches/consolecommands3/src/orxonox/weaponsystem/Munition.cc
===================================================================
--- code/branches/consolecommands3/src/orxonox/weaponsystem/Munition.cc	2010-08-21 20:20:09 UTC (rev 7199)
+++ code/branches/consolecommands3/src/orxonox/weaponsystem/Munition.cc	2010-08-21 22:27:53 UTC (rev 7200)
@@ -460,7 +460,7 @@
 
         if (bUseReloadTime && (munition->reloadTime_ > 0 || munition->bStackMunition_))
         {
-            Executor* executor = createExecutor(createFunctor(&Magazine::loaded, this));
+            const ExecutorPtr& executor = createExecutor(createFunctor(&Magazine::loaded, this));
             executor->setDefaultValues(munition);
 
             this->loadTimer_.setTimer(munition->reloadTime_, false, executor);




More information about the Orxonox-commit mailing list