From ad483a2d1c25f2f986eedbdadf4dbf1f24d0c532 Mon Sep 17 00:00:00 2001 From: chai Date: Sun, 22 Jul 2018 15:25:01 +0800 Subject: *singleton --- src/libjin/common/singleton.h | 34 ++++++++++++++++++++++++++++++++++ src/libjin/common/subsystem.h | 30 +++++++++++++++++------------- 2 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 src/libjin/common/singleton.h (limited to 'src/libjin/common') diff --git a/src/libjin/common/singleton.h b/src/libjin/common/singleton.h new file mode 100644 index 0000000..e6326b2 --- /dev/null +++ b/src/libjin/common/singleton.h @@ -0,0 +1,34 @@ +#ifndef __JIN_SINGLETON_H +#define __JIN_SINGLETON_H + +namespace jin +{ + template + class Singleton + { + public: + static T* get() + { + if (_instance == nullptr) + _instance = new T; + return _instance; + } + static void destroy() + { + delete _instance; + _instance = nullptr; + } + protected: + Singleton() {}; + virtual ~Singleton() {}; + private: + Singleton(const Singleton&); + Singleton& operator = (const Singleton&); + + static T* _instance; + }; + + template T* Singleton::_instance = nullptr; +} + +#endif \ No newline at end of file diff --git a/src/libjin/common/subsystem.h b/src/libjin/common/subsystem.h index abe509e..4f3c5ab 100644 --- a/src/libjin/common/subsystem.h +++ b/src/libjin/common/subsystem.h @@ -1,32 +1,36 @@ #ifndef __JIN_COMMON_SUBSYSTEM_H #define __JIN_COMMON_SUBSYSTEM_H +#include "singleton.h" #include "../utils/macros.h" namespace jin { - class Subsystem + template + class Subsystem : public Singleton { + public: + struct Setting {}; + typedef Setting SettingBase; - public: + void init(const SettingBase* setting) + { + initSystem(setting); + } - struct Setting {}; - - typedef Subsystem::Setting SettingBase; - - virtual bool init(const Setting* setting) = 0; - - virtual void quit() = 0; + void quit() + { + quitSystem(); + destroy(); + } protected: - Subsystem() {}; virtual ~Subsystem() {}; - virtual onlyonce bool _init(const Setting* setting) = 0; - virtual onlyonce void _quit() = 0; - + virtual bool initSystem(const Setting* setting) = 0; + virtual void quitSystem() = 0; }; } -- cgit v1.1-26-g67d0