summaryrefslogtreecommitdiffstats
path: root/src/leeds/base/singletonManager.h
diff options
context:
space:
mode:
authorNikolay Korolev <nickvnuk@gmail.com>2021-08-29 18:32:22 +0200
committerNikolay Korolev <nickvnuk@gmail.com>2021-08-29 18:32:22 +0200
commit453f8c05a4fc2ef03ba1d4f7bac43ba871c52fbd (patch)
treeb1586ab27437633e49c795c2e1277f6ca4877cfa /src/leeds/base/singletonManager.h
parentfix (diff)
downloadre3-453f8c05a4fc2ef03ba1d4f7bac43ba871c52fbd.tar
re3-453f8c05a4fc2ef03ba1d4f7bac43ba871c52fbd.tar.gz
re3-453f8c05a4fc2ef03ba1d4f7bac43ba871c52fbd.tar.bz2
re3-453f8c05a4fc2ef03ba1d4f7bac43ba871c52fbd.tar.lz
re3-453f8c05a4fc2ef03ba1d4f7bac43ba871c52fbd.tar.xz
re3-453f8c05a4fc2ef03ba1d4f7bac43ba871c52fbd.tar.zst
re3-453f8c05a4fc2ef03ba1d4f7bac43ba871c52fbd.zip
Diffstat (limited to 'src/leeds/base/singletonManager.h')
-rw-r--r--src/leeds/base/singletonManager.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/leeds/base/singletonManager.h b/src/leeds/base/singletonManager.h
new file mode 100644
index 00000000..833e178b
--- /dev/null
+++ b/src/leeds/base/singletonManager.h
@@ -0,0 +1,60 @@
+#pragma once
+
+#include "common.h"
+
+namespace base
+{
+
+class cSingletonBase
+{
+ friend class cSingletonManager;
+
+ cSingletonBase* next;
+
+public:
+ virtual ~cSingletonBase() {}
+};
+
+template<typename T>
+class cSingleton : public cSingletonBase
+{
+ static T* mspInstance;
+ static void cSingleton<T>::CreateInstance()
+ {
+ mspInstance = new T();
+ SingletonManager().Add(mspInstance);
+ }
+
+public:
+ static T* Instance()
+ {
+ if (!mspInstance)
+ CreateInstance();
+ return mspInstance;
+ }
+
+ ~cSingleton<T>()
+ {
+ mspInstance = nil;
+ }
+};
+
+class cSingletonManager
+{
+ cSingletonBase* head;
+ cSingletonBase* tail;
+
+public:
+ cSingletonManager() :
+ head(nil),
+ tail(nil)
+ {}
+
+ void Add(cSingletonBase*);
+ void Purge();
+ ~cSingletonManager();
+};
+
+cSingletonManager& SingletonManager();
+
+} \ No newline at end of file