aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/common/subsystem.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/common/subsystem.h')
-rw-r--r--src/libjin/common/subsystem.h30
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;
};
}