diff options
Diffstat (limited to 'src/libjin/common/subsystem.h')
-rw-r--r-- | src/libjin/common/subsystem.h | 30 |
1 files changed, 17 insertions, 13 deletions
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 System> + class Subsystem : public Singleton<System> { + 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; }; } |