From 453f8c05a4fc2ef03ba1d4f7bac43ba871c52fbd Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 29 Aug 2021 19:32:22 +0300 Subject: script revision p1 --- src/leeds/base/singletonManager.h | 60 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/leeds/base/singletonManager.h (limited to 'src/leeds/base/singletonManager.h') 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 +class cSingleton : public cSingletonBase +{ + static T* mspInstance; + static void cSingleton::CreateInstance() + { + mspInstance = new T(); + SingletonManager().Add(mspInstance); + } + +public: + static T* Instance() + { + if (!mspInstance) + CreateInstance(); + return mspInstance; + } + + ~cSingleton() + { + 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 -- cgit v1.2.3 From b67a08744849c2d0912ac818de92b752ee563e19 Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Mon, 30 Aug 2021 10:58:57 +0300 Subject: fix compile --- src/leeds/base/singletonManager.h | 40 ++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) (limited to 'src/leeds/base/singletonManager.h') diff --git a/src/leeds/base/singletonManager.h b/src/leeds/base/singletonManager.h index 833e178b..9c980bb2 100644 --- a/src/leeds/base/singletonManager.h +++ b/src/leeds/base/singletonManager.h @@ -5,6 +5,26 @@ namespace base { +class cSingletonBase; + +class cSingletonManager +{ + cSingletonBase* head; + cSingletonBase* tail; + +public: + cSingletonManager() : + head(nil), + tail(nil) + {} + + void Add(cSingletonBase*); + void Purge(); + ~cSingletonManager(); +}; + +cSingletonManager& SingletonManager(); + class cSingletonBase { friend class cSingletonManager; @@ -19,7 +39,7 @@ template class cSingleton : public cSingletonBase { static T* mspInstance; - static void cSingleton::CreateInstance() + static void CreateInstance() { mspInstance = new T(); SingletonManager().Add(mspInstance); @@ -39,22 +59,4 @@ public: } }; -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 -- cgit v1.2.3