[Orxonox-commit 5684] r10344 - code/branches/core7/src/libraries/core/module

landauf at orxonox.net landauf at orxonox.net
Sun Apr 5 17:29:22 CEST 2015


Author: landauf
Date: 2015-04-05 17:29:21 +0200 (Sun, 05 Apr 2015)
New Revision: 10344

Modified:
   code/branches/core7/src/libraries/core/module/ModuleInstance.cc
   code/branches/core7/src/libraries/core/module/ModuleInstance.h
   code/branches/core7/src/libraries/core/module/StaticallyInitializedInstance.cc
   code/branches/core7/src/libraries/core/module/StaticallyInitializedInstance.h
Log:
remove and destroy StaticallyInitializedInstances

Modified: code/branches/core7/src/libraries/core/module/ModuleInstance.cc
===================================================================
--- code/branches/core7/src/libraries/core/module/ModuleInstance.cc	2015-04-04 11:34:39 UTC (rev 10343)
+++ code/branches/core7/src/libraries/core/module/ModuleInstance.cc	2015-04-05 15:29:21 UTC (rev 10344)
@@ -34,6 +34,13 @@
 {
     ModuleInstance* ModuleInstance::currentModuleInstance_s = NULL;
 
+    ModuleInstance::~ModuleInstance()
+    {
+        std::list<StaticallyInitializedInstance*> copy(this->staticallyInitializedInstances_);
+        for (std::list<StaticallyInitializedInstance*>::iterator it = this->staticallyInitializedInstances_.begin(); it != this->staticallyInitializedInstances_.end(); ++it)
+            delete (*it);
+    }
+
     void ModuleInstance::addStaticallyInitializedInstance(StaticallyInitializedInstance* instance)
     {
         this->staticallyInitializedInstances_.push_back(instance);
@@ -41,10 +48,15 @@
 
     void ModuleInstance::loadAllStaticallyInitializedInstances()
     {
-        for (size_t i = 0; i < this->staticallyInitializedInstances_.size(); ++i)
-            this->staticallyInitializedInstances_[i]->load();
+        for (std::list<StaticallyInitializedInstance*>::iterator it = this->staticallyInitializedInstances_.begin(); it != this->staticallyInitializedInstances_.end(); ++it)
+            (*it)->load();
     }
 
+    void ModuleInstance::removeStaticallyInitializedInstance(StaticallyInitializedInstance* instance)
+    {
+        this->staticallyInitializedInstances_.remove(instance);
+    }
+
     /*static*/ void ModuleInstance::setCurrentModuleInstance(ModuleInstance* instance)
     {
         ModuleInstance::currentModuleInstance_s = instance;

Modified: code/branches/core7/src/libraries/core/module/ModuleInstance.h
===================================================================
--- code/branches/core7/src/libraries/core/module/ModuleInstance.h	2015-04-04 11:34:39 UTC (rev 10343)
+++ code/branches/core7/src/libraries/core/module/ModuleInstance.h	2015-04-05 15:29:21 UTC (rev 10344)
@@ -31,21 +31,24 @@
 
 #include "core/CorePrereqs.h"
 
-#include <vector>
+#include <list>
 
 namespace orxonox
 {
     class _CoreExport ModuleInstance
     {
         public:
+            ~ModuleInstance();
+
             void addStaticallyInitializedInstance(StaticallyInitializedInstance* instance);
             void loadAllStaticallyInitializedInstances();
+            void removeStaticallyInitializedInstance(StaticallyInitializedInstance* instance);
 
             static void setCurrentModuleInstance(ModuleInstance* instance);
             static ModuleInstance* getCurrentModuleInstance();
 
         private:
-            std::vector<StaticallyInitializedInstance*> staticallyInitializedInstances_;
+            std::list<StaticallyInitializedInstance*> staticallyInitializedInstances_;
 
             static ModuleInstance* currentModuleInstance_s;
     };

Modified: code/branches/core7/src/libraries/core/module/StaticallyInitializedInstance.cc
===================================================================
--- code/branches/core7/src/libraries/core/module/StaticallyInitializedInstance.cc	2015-04-04 11:34:39 UTC (rev 10343)
+++ code/branches/core7/src/libraries/core/module/StaticallyInitializedInstance.cc	2015-04-05 15:29:21 UTC (rev 10344)
@@ -36,4 +36,9 @@
     {
         ModuleInstance::getCurrentModuleInstance()->addStaticallyInitializedInstance(this);
     }
+
+    StaticallyInitializedInstance::~StaticallyInitializedInstance()
+    {
+        ModuleInstance::getCurrentModuleInstance()->removeStaticallyInitializedInstance(this);
+    }
 }

Modified: code/branches/core7/src/libraries/core/module/StaticallyInitializedInstance.h
===================================================================
--- code/branches/core7/src/libraries/core/module/StaticallyInitializedInstance.h	2015-04-04 11:34:39 UTC (rev 10343)
+++ code/branches/core7/src/libraries/core/module/StaticallyInitializedInstance.h	2015-04-05 15:29:21 UTC (rev 10344)
@@ -37,7 +37,7 @@
     {
         public:
             StaticallyInitializedInstance();
-            virtual ~StaticallyInitializedInstance() {}
+            virtual ~StaticallyInitializedInstance();
 
             virtual void load() = 0;
     };




More information about the Orxonox-commit mailing list