[Orxonox-commit 5732] r10392 - in code/branches/core7/src: libraries/core orxonox orxonox/gamestates

landauf at orxonox.net landauf at orxonox.net
Thu Apr 23 22:44:57 CEST 2015


Author: landauf
Date: 2015-04-23 22:44:57 +0200 (Thu, 23 Apr 2015)
New Revision: 10392

Modified:
   code/branches/core7/src/libraries/core/Core.cc
   code/branches/core7/src/libraries/core/Core.h
   code/branches/core7/src/libraries/core/CorePrereqs.h
   code/branches/core7/src/libraries/core/GraphicsManager.cc
   code/branches/core7/src/libraries/core/Loader.cc
   code/branches/core7/src/libraries/core/Loader.h
   code/branches/core7/src/libraries/core/XMLPort.cc
   code/branches/core7/src/orxonox/Level.cc
   code/branches/core7/src/orxonox/LevelManager.cc
   code/branches/core7/src/orxonox/gamestates/GSLevel.cc
Log:
Loader is now a singleton instead of a static class. fixes issue with statically initialized ClassTreeMask (which again requires a BaseObject-Identifier)

Modified: code/branches/core7/src/libraries/core/Core.cc
===================================================================
--- code/branches/core7/src/libraries/core/Core.cc	2015-04-23 14:19:02 UTC (rev 10391)
+++ code/branches/core7/src/libraries/core/Core.cc	2015-04-23 20:44:57 UTC (rev 10392)
@@ -69,6 +69,7 @@
 #include "GUIManager.h"
 #include "class/Identifier.h"
 #include "Language.h"
+#include "Loader.h"
 #include "LuaState.h"
 #include "command/ConsoleCommandManager.h"
 #include "command/IOConsole.h"
@@ -101,6 +102,7 @@
         , signalHandler_(NULL)
         , configFileManager_(NULL)
         , languageInstance_(NULL)
+        , loaderInstance_(NULL)
         , ioConsole_(NULL)
         , tclBind_(NULL)
         , tclThreadManager_(NULL)
@@ -207,6 +209,9 @@
         orxout(internal_info) << "creating class hierarchy" << endl;
         IdentifierManager::getInstance().createClassHierarchy();
 
+        // Loader
+        this->loaderInstance_ = new Loader();
+
         // Load OGRE excluding the renderer and the render window
         orxout(internal_info) << "creating GraphicsManager:" << endl;
         this->graphicsManager_ = new GraphicsManager(false);
@@ -252,6 +257,7 @@
         safeObjectDelete(&tclThreadManager_);
         safeObjectDelete(&tclBind_);
         safeObjectDelete(&ioConsole_);
+        safeObjectDelete(&loaderInstance_);
         safeObjectDelete(&languageInstance_);
         safeObjectDelete(&configFileManager_);
         ConsoleCommandManager::destroyAll();

Modified: code/branches/core7/src/libraries/core/Core.h
===================================================================
--- code/branches/core7/src/libraries/core/Core.h	2015-04-23 14:19:02 UTC (rev 10391)
+++ code/branches/core7/src/libraries/core/Core.h	2015-04-23 20:44:57 UTC (rev 10392)
@@ -124,6 +124,7 @@
             SignalHandler*            signalHandler_;
             ConfigFileManager*        configFileManager_;
             Language*                 languageInstance_;
+            Loader*                   loaderInstance_;
             IOConsole*                ioConsole_;
             TclBind*                  tclBind_;
             TclThreadManager*         tclThreadManager_;

Modified: code/branches/core7/src/libraries/core/CorePrereqs.h
===================================================================
--- code/branches/core7/src/libraries/core/CorePrereqs.h	2015-04-23 14:19:02 UTC (rev 10391)
+++ code/branches/core7/src/libraries/core/CorePrereqs.h	2015-04-23 20:44:57 UTC (rev 10392)
@@ -164,6 +164,7 @@
     class Iterator;
     class Language;
     class Listable;
+    class Loader;
     class LuaFunctor;
     class LuaState;
     class MemoryArchive;

Modified: code/branches/core7/src/libraries/core/GraphicsManager.cc
===================================================================
--- code/branches/core7/src/libraries/core/GraphicsManager.cc	2015-04-23 14:19:02 UTC (rev 10391)
+++ code/branches/core7/src/libraries/core/GraphicsManager.cc	2015-04-23 20:44:57 UTC (rev 10392)
@@ -116,7 +116,7 @@
         // Load resources
         resources_.reset(new XMLFile("DefaultResources.oxr"));
         resources_->setLuaSupport(false);
-        Loader::open(resources_.get(), ClassTreeMask(), false);
+        Loader::getInstance().open(resources_.get(), ClassTreeMask(), false);
 
         // Only for runs in the build directory (not installed)
         if (PathConfig::buildDirectoryRun())
@@ -124,7 +124,7 @@
 
         extResources_.reset(new XMLFile("resources.oxr"));
         extResources_->setLuaSupport(false);
-        Loader::open(extResources_.get(), ClassTreeMask(), false);
+        Loader::getInstance().open(extResources_.get(), ClassTreeMask(), false);
 
         if (bLoadRenderer)
         {
@@ -139,7 +139,7 @@
     {
         orxout(internal_status) << "destroying GraphicsManager..." << endl;
 
-        Loader::unload(debugOverlay_.get());
+        Loader::getInstance().unload(debugOverlay_.get());
 
         Ogre::WindowEventUtilities::removeWindowEventListener(renderWindow_, ogreWindowEventListener_);
         ModifyConsoleCommand(__CC_printScreen_name).resetFunction();
@@ -148,8 +148,8 @@
         ModifyConsoleCommand(__CC_GraphicsManager_group, __CC_setVSync_name).resetFunction();
 
         // Undeclare the resources
-        Loader::unload(resources_.get());
-        Loader::unload(extResources_.get());
+        Loader::getInstance().unload(resources_.get());
+        Loader::getInstance().unload(extResources_.get());
 
         safeObjectDelete(&ogreRoot_);
         safeObjectDelete(&ogreLogger_);
@@ -329,7 +329,7 @@
         // Load debug overlay to show info about fps and tick time
         orxout(internal_info) << "Loading Debug Overlay..." << endl;
         debugOverlay_.reset(new XMLFile("debug.oxo"));
-        Loader::open(debugOverlay_.get(), ClassTreeMask(), false);
+        Loader::getInstance().open(debugOverlay_.get(), ClassTreeMask(), false);
     }
 
     /**

Modified: code/branches/core7/src/libraries/core/Loader.cc
===================================================================
--- code/branches/core7/src/libraries/core/Loader.cc	2015-04-23 14:19:02 UTC (rev 10391)
+++ code/branches/core7/src/libraries/core/Loader.cc	2015-04-23 20:44:57 UTC (rev 10392)
@@ -47,43 +47,42 @@
 
 namespace orxonox
 {
-    std::vector<std::pair<const XMLFile*, ClassTreeMask> > Loader::files_s;
-    ClassTreeMask Loader::currentMask_s;
+    Loader* Loader::singletonPtr_s = 0;
 
     bool Loader::open(const XMLFile* file, const ClassTreeMask& mask, bool bVerbose)
     {
-        Loader::add(file, mask);
-        return Loader::load(file, mask, bVerbose);
+        this->add(file, mask);
+        return this->load(file, mask, bVerbose);
     }
 
     void Loader::close()
     {
-        Loader::unload();
-        Loader::files_s.clear();
+        this->unload();
+        this->files_.clear();
     }
 
     void Loader::close(const XMLFile* file)
     {
-        Loader::unload(file);
-        Loader::remove(file);
+        this->unload(file);
+        this->remove(file);
     }
 
     void Loader::add(const XMLFile* file, const ClassTreeMask& mask)
     {
         if (!file)
             return;
-        Loader::files_s.insert(Loader::files_s.end(), std::pair<const XMLFile*, ClassTreeMask>(file, mask));
+        this->files_.insert(this->files_.end(), std::pair<const XMLFile*, ClassTreeMask>(file, mask));
     }
 
     void Loader::remove(const XMLFile* file)
     {
         if (!file)
             return;
-        for (std::vector<std::pair<const XMLFile*, ClassTreeMask> >::iterator it = Loader::files_s.begin(); it != Loader::files_s.end(); ++it)
+        for (std::vector<std::pair<const XMLFile*, ClassTreeMask> >::iterator it = this->files_.begin(); it != this->files_.end(); ++it)
         {
             if (it->first == file)
             {
-                Loader::files_s.erase(it);
+                this->files_.erase(it);
                 break;
             }
         }
@@ -102,8 +101,8 @@
     bool Loader::load(const ClassTreeMask& mask, bool bVerbose)
     {
         bool success = true;
-        for (std::vector<std::pair<const XMLFile*, ClassTreeMask> >::iterator it = Loader::files_s.begin(); it != Loader::files_s.end(); ++it)
-            if (!Loader::load(it->first, it->second * mask, bVerbose))
+        for (std::vector<std::pair<const XMLFile*, ClassTreeMask> >::iterator it = this->files_.begin(); it != this->files_.end(); ++it)
+            if (!this->load(it->first, it->second * mask, bVerbose))
                 success = false;
 
         return success;
@@ -132,8 +131,8 @@
     */
     bool Loader::reload(const ClassTreeMask& mask, bool bVerbose)
     {
-        Loader::unload(mask);
-        return Loader::load(mask, bVerbose);
+        this->unload(mask);
+        return this->load(mask, bVerbose);
     }
 
     /**
@@ -155,7 +154,7 @@
         if (!file)
             return false;
 
-        Loader::currentMask_s = file->getMask() * mask;
+        this->currentMask_ = file->getMask() * mask;
 
         std::string xmlInput;
 
@@ -188,7 +187,7 @@
                 // Note: we only need this to speed up parsing of level files at the
                 // start of the program.
                 // Assumption: the LevelInfo tag does not use Lua scripting
-                xmlInput = removeLuaTags(xmlInput);
+                xmlInput = Loader::removeLuaTags(xmlInput);
             }
         }
 
@@ -197,12 +196,12 @@
             if(bVerbose)
             {
                 orxout(user_info) << "Start loading " << file->getFilename() << "..." << endl;
-                orxout(internal_info, context::loader) << "Mask: " << Loader::currentMask_s << endl;
+                orxout(internal_info, context::loader) << "Mask: " << this->currentMask_ << endl;
             }
             else
             {
                 orxout(verbose, context::loader) << "Start loading " << file->getFilename() << "..." << endl;
-                orxout(verbose_more, context::loader) << "Mask: " << Loader::currentMask_s << endl;
+                orxout(verbose_more, context::loader) << "Mask: " << this->currentMask_ << endl;
             }
 
             ticpp::Document xmlfile(file->getFilename());
@@ -318,8 +317,8 @@
     */
     bool Loader::reload(const XMLFile* file, const ClassTreeMask& mask, bool bVerbose)
     {
-        Loader::unload(file, mask);
-        return Loader::load(file, mask, bVerbose);
+        this->unload(file, mask);
+        return this->load(file, mask, bVerbose);
     }
 
     bool Loader::getLuaTags(const std::string& text, std::map<size_t, bool>& luaTags)

Modified: code/branches/core7/src/libraries/core/Loader.h
===================================================================
--- code/branches/core7/src/libraries/core/Loader.h	2015-04-23 14:19:02 UTC (rev 10391)
+++ code/branches/core7/src/libraries/core/Loader.h	2015-04-23 20:44:57 UTC (rev 10392)
@@ -43,38 +43,44 @@
 
 #include <map>
 #include <vector>
+
+#include "util/Singleton.h"
 #include "ClassTreeMask.h"
 
 namespace orxonox
 {
-    class _CoreExport Loader
+    class _CoreExport Loader : public Singleton<Loader>
     {
+        friend class Singleton<Loader>;
+
         public:
-            static bool open(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true);
-            static void close();
-            static void close(const XMLFile* file);
+            bool open(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true);
+            void close();
+            void close(const XMLFile* file);
 
-            static void add(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask());
-            static void remove(const XMLFile* file);
+            void add(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask());
+            void remove(const XMLFile* file);
 
-            static bool load(const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true);
-            static void unload(const ClassTreeMask& mask = ClassTreeMask());
-            static bool reload(const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true);
+            bool load(const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true);
+            void unload(const ClassTreeMask& mask = ClassTreeMask());
+            bool reload(const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true);
 
-            static bool load(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(),
-                             bool bVerbose = true, bool bRemoveLuaTags = false);
-            static void unload(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask());
-            static bool reload(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true);
+            bool load(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(),
+                      bool bVerbose = true, bool bRemoveLuaTags = false);
+            void unload(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask());
+            bool reload(const XMLFile* file, const ClassTreeMask& mask = ClassTreeMask(), bool bVerbose = true);
 
             static std::string replaceLuaTags(const std::string& text);
             static std::string removeLuaTags(const std::string& text);
 
-            static ClassTreeMask currentMask_s;
+            ClassTreeMask currentMask_;
 
         private:
             static bool getLuaTags(const std::string& text, std::map<size_t, bool>& luaTags);
 
-            static std::vector<std::pair<const XMLFile*, ClassTreeMask> > files_s;
+            std::vector<std::pair<const XMLFile*, ClassTreeMask> > files_;
+
+            static Loader* singletonPtr_s;
     };
 }
 

Modified: code/branches/core7/src/libraries/core/XMLPort.cc
===================================================================
--- code/branches/core7/src/libraries/core/XMLPort.cc	2015-04-23 14:19:02 UTC (rev 10391)
+++ code/branches/core7/src/libraries/core/XMLPort.cc	2015-04-23 20:44:57 UTC (rev 10392)
@@ -39,7 +39,7 @@
     // ################################
     bool XMLPortObjectContainer::identifierIsIncludedInLoaderMask(const Identifier* identifier)
     {
-        return ((!this->bApplyLoaderMask_) || identifier->isA(ClassIdentifier<Namespace>::getIdentifier()) || Loader::currentMask_s.isIncluded(identifier));
+        return ((!this->bApplyLoaderMask_) || identifier->isA(ClassIdentifier<Namespace>::getIdentifier()) || Loader::getInstance().currentMask_.isIncluded(identifier));
     }
 
     XMLPortObjectContainer& XMLPortObjectContainer::port(BaseObject* object, Element& xmlelement, XMLPort::Mode mode)

Modified: code/branches/core7/src/orxonox/Level.cc
===================================================================
--- code/branches/core7/src/orxonox/Level.cc	2015-04-23 14:19:02 UTC (rev 10391)
+++ code/branches/core7/src/orxonox/Level.cc	2015-04-23 20:44:57 UTC (rev 10392)
@@ -62,7 +62,7 @@
                 LevelManager::getInstance().releaseActivity(this);
 
             if (this->xmlfile_)
-                Loader::unload(this->xmlfile_);
+                Loader::getInstance().unload(this->xmlfile_);
         }
     }
 
@@ -94,7 +94,7 @@
 
         this->xmlfile_ = new XMLFile(mask, this->xmlfilename_);
 
-        Loader::open(this->xmlfile_);
+        Loader::getInstance().open(this->xmlfile_);
     }
 
     void Level::networkCallbackTemplatesChanged()

Modified: code/branches/core7/src/orxonox/LevelManager.cc
===================================================================
--- code/branches/core7/src/orxonox/LevelManager.cc	2015-04-23 14:19:02 UTC (rev 10391)
+++ code/branches/core7/src/orxonox/LevelManager.cc	2015-04-23 20:44:57 UTC (rev 10392)
@@ -275,7 +275,7 @@
 
                 // Load the LevelInfo object from the level file.
                 XMLFile file = XMLFile(*it);
-                Loader::load(&file, mask, false, true);
+                Loader::getInstance().load(&file, mask, false, true);
 
                 // Find the LevelInfo object we've just loaded (if there was one)
                 for(ObjectList<LevelInfo>::iterator item = ObjectList<LevelInfo>::begin(); item != ObjectList<LevelInfo>::end(); ++item)
@@ -283,7 +283,7 @@
                         info = item->copy();
 
                 // We don't need the loaded stuff anymore
-                Loader::unload(&file);
+                Loader::getInstance().unload(&file);
 
                 if(info == NULL)
                 {

Modified: code/branches/core7/src/orxonox/gamestates/GSLevel.cc
===================================================================
--- code/branches/core7/src/orxonox/gamestates/GSLevel.cc	2015-04-23 14:19:02 UTC (rev 10391)
+++ code/branches/core7/src/orxonox/gamestates/GSLevel.cc	2015-04-23 20:44:57 UTC (rev 10392)
@@ -167,7 +167,7 @@
 
         // call the loader
         startFile_ = new XMLFile(LevelManager::getInstance().getDefaultLevel());
-        bool loaded = Loader::open(startFile_);
+        bool loaded = Loader::getInstance().open(startFile_);
 
         Core::getInstance().updateLastLevelTimestamp();
         if(!loaded)
@@ -176,7 +176,7 @@
 
     void GSLevel::unloadLevel()
     {
-        Loader::unload(startFile_);
+        Loader::getInstance().unload(startFile_);
         delete startFile_;
 
         orxout(internal_info) << "Remaining objects:" << endl;




More information about the Orxonox-commit mailing list