diff options
author | Nikolay <nickvnuk@gmail.com> | 2021-08-31 23:16:52 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-31 23:16:52 +0300 |
commit | 9bd80324d1ff3f221304a7dde98358d9895926c2 (patch) | |
tree | 7f2b08583a71f159faa69b4254b54e4fac55174c /src/leeds/base/singletonManager.h | |
parent | 27ddca26c2f01428f68f25d12ffb293573b17033 (diff) | |
parent | b67a08744849c2d0912ac818de92b752ee563e19 (diff) |
Merge pull request #1327 from Nick007J/lcs
some lcs stuff
Diffstat (limited to 'src/leeds/base/singletonManager.h')
-rw-r--r-- | src/leeds/base/singletonManager.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/src/leeds/base/singletonManager.h b/src/leeds/base/singletonManager.h new file mode 100644 index 00000000..9c980bb2 --- /dev/null +++ b/src/leeds/base/singletonManager.h @@ -0,0 +1,62 @@ +#pragma once + +#include "common.h" + +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; + + cSingletonBase* next; + +public: + virtual ~cSingletonBase() {} +}; + +template<typename T> +class cSingleton : public cSingletonBase +{ + static T* mspInstance; + static void CreateInstance() + { + mspInstance = new T(); + SingletonManager().Add(mspInstance); + } + +public: + static T* Instance() + { + if (!mspInstance) + CreateInstance(); + return mspInstance; + } + + ~cSingleton<T>() + { + mspInstance = nil; + } +}; + +}
\ No newline at end of file |