blob: 2f3a4a4b0e980459a99e3c3905e450a735f5759b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#ifndef __JE_COMMON_SUBSYSTEM_H__
#define __JE_COMMON_SUBSYSTEM_H__
#include "../utils/macros.h"
#include "singleton.hpp"
namespace JinEngine
{
///
/// Subsystem class.
///
template<class System>
class Subsystem : public Singleton<System>
{
public:
///
/// Subsystem setting.
///
struct Setting
{
};
typedef Setting SettingBase;
///
/// Initialize subsystem.
///
/// @param setting Subsystem setting.
/// @return True if initialize sucessful, otherwise return false.
///
bool start(const SettingBase* setting = nullptr)
{
static bool success = startSystem(setting);
return success;
}
///
/// Quit subsystem.
///
void quit()
{
// Call only once.
static char __dummy__ = (quitSystem(), 1);
Singleton<System>::destroy();
}
///
/// Subsystem constructor.
///
Subsystem() {};
///
/// Subsystem destructor.
///
virtual ~Subsystem() {}
protected:
///
/// Initializer callback.
///
virtual bool startSystem(const Setting* setting) = 0;
///
/// Quit subsystem callback.
///
virtual void quitSystem() = 0;
};
} // namespace JinEngine
#endif
|