[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