summaryrefslogtreecommitdiffstats
path: root/src/Common/SingletonPtr.h
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2008-11-20 16:38:51 +0100
committerMatthias Schiffer <matthias@gamezock.de>2008-11-20 16:38:51 +0100
commitd002476c5e6b8f6bc728063fc8e7ce74da562e57 (patch)
tree0df9fb41ec09a96b6498a691d36164a6b4a6a7ca /src/Common/SingletonPtr.h
parent0a1df98c0420e9ac097622f2bddcd73a6488ed52 (diff)
downloadmad-d002476c5e6b8f6bc728063fc8e7ce74da562e57.tar
mad-d002476c5e6b8f6bc728063fc8e7ce74da562e57.zip
SingletonPtr ueberarbeitet
Diffstat (limited to 'src/Common/SingletonPtr.h')
-rw-r--r--src/Common/SingletonPtr.h37
1 files changed, 29 insertions, 8 deletions
diff --git a/src/Common/SingletonPtr.h b/src/Common/SingletonPtr.h
index ea4eda1..03d0040 100644
--- a/src/Common/SingletonPtr.h
+++ b/src/Common/SingletonPtr.h
@@ -21,6 +21,8 @@
#define MAD_COMMON_SINGLETONPTR_H_
#include "Initializable.h"
+#include "Configurable.h"
+#include "ConfigManager.h"
namespace Mad {
namespace Common {
@@ -32,23 +34,42 @@ class SingletonPtr : public virtual Initializable {
protected:
virtual void doInit() {
- if(ptr)
- delete ptr;
-
ptr = new T();
Initializable *in = dynamic_cast<Initializable*>(ptr);
- if(in)
- in->init();
+ if(in) {
+ in->initialized = true;
+ in->doInit();
+ }
+
+ Configurable *c = dynamic_cast<Configurable*>(ptr);
+ if(c)
+ ConfigManager::get()->registerConfigurable(c);
+
+ if(in) {
+ initializing = false;
+ initialized = true;
+ }
}
- public:
- SingletonPtr() : ptr(0) {}
+ virtual void doDeinit() {
+ Configurable *c = dynamic_cast<Configurable*>(ptr);
+ if(c)
+ ConfigManager::get()->unregisterConfigurable(c);
+
+ Initializable *in = dynamic_cast<Initializable*>(ptr);
+ if(in) {
+ in->doDeinit();
+ in->initialized = false;
+ }
- virtual ~SingletonPtr() {
delete ptr;
+ ptr = 0;
}
+ public:
+ SingletonPtr() : ptr(0) {}
+
T *get() {
if(!ptr)
init();