ZFFramework
Loading...
Searching...
No Matches
ZFCoreGlobalInitializer.h
Go to the documentation of this file.
1
5#ifndef _ZFI_ZFCoreGlobalInitializer_h_
6#define _ZFI_ZFCoreGlobalInitializer_h_
7
8#include "ZFLevel.h"
10#include "ZFCoreArray.h"
11
13
14// ============================================================
16typedef void (*ZFFrameworkStateUpdateCallback)(void);
17extern ZFLIB_ZFCore ZFCoreArray<ZFFrameworkStateUpdateCallback> &_ZFP_ZFFrameworkInitFinishCallbacks(void);
18extern ZFLIB_ZFCore ZFCoreArray<ZFFrameworkStateUpdateCallback> &_ZFP_ZFFrameworkCleanupPrepareCallbacks(void);
20#define ZFFrameworkInitFinishCallbacks _ZFP_ZFFrameworkInitFinishCallbacks()
22#define ZFFrameworkCleanupPrepareCallbacks _ZFP_ZFFrameworkCleanupPrepareCallbacks()
23
24// ============================================================
39extern ZFLIB_ZFCore void ZFFrameworkInit(void);
44
54
56#define ZFTOKEN_ZFFrameworkStateNotAvailable "NotAvailable"
58#define ZFTOKEN_ZFFrameworkStateInitRunning "InitRunning"
60#define ZFTOKEN_ZFFrameworkStateAvailable "Available"
62#define ZFTOKEN_ZFFrameworkStateCleanupRunning "CleanupRunning"
63
65 switch(v) {
68 break;
71 break;
74 break;
77 break;
78 default:
79 break;
80 }
81})
82
95
96// ============================================================
97typedef void *(*_ZFP_GI_Constructor)(void);
98typedef void (*_ZFP_GI_Destructor)(ZF_IN void *p);
99zfclassFwd _ZFP_GI_RegPrivate;
100zfclassNotPOD ZFLIB_ZFCore _ZFP_GI_Reg {
101public:
102 _ZFP_GI_Reg(
103 ZF_IN const zfchar *name
104 , ZF_IN ZFLevel level
105 , ZF_IN _ZFP_GI_Constructor constructor
106 , ZF_IN _ZFP_GI_Destructor destructor
107 );
108 ~_ZFP_GI_Reg(void);
109public:
110 void *instanceAccess(void);
111private:
112 _ZFP_GI_RegPrivate *d;
113};
114
115#define _ZFP_ZF_GLOBAL_INITIALIZER_INIT_WITH_LEVEL(Name, ZFLevel_) \
116 static void *_ZFP_GI_ctor_##Name(void); \
117 static void _ZFP_GI_dtor_##Name(ZF_IN void *p); \
118 static _ZFP_GI_Reg _ZFP_GI_reg_##Name(#Name, \
119 ZFLevel_, \
120 _ZFP_GI_ctor_##Name, \
121 _ZFP_GI_dtor_##Name \
122 ); \
123 zfclassNotPOD _ZFP_GI_##Name { \
124 protected: \
125 typedef _ZFP_GI_##Name zfself; \
126 public: \
127 static _ZFP_GI_##Name *_ZFP_GI_I(void) { \
128 return (_ZFP_GI_##Name *)_ZFP_GI_reg_##Name.instanceAccess(); \
129 } \
130 _ZFP_GI_##Name(void)
158#define ZF_GLOBAL_INITIALIZER_INIT_WITH_LEVEL(Name, ZFLevel_) \
159 _ZFP_ZF_GLOBAL_INITIALIZER_INIT_WITH_LEVEL(Name, ZFLevel_)
160
164#define ZF_GLOBAL_INITIALIZER_INIT(Name) \
165 _ZFP_ZF_GLOBAL_INITIALIZER_INIT_WITH_LEVEL(Name, ZFLevelAppNormal)
166
167#define _ZFP_ZF_GLOBAL_INITIALIZER_DESTROY(Name) \
168 public: \
169 ~_ZFP_GI_##Name(void)
173#define ZF_GLOBAL_INITIALIZER_DESTROY(Name) \
174 _ZFP_ZF_GLOBAL_INITIALIZER_DESTROY(Name)
175
176#define _ZFP_ZF_GLOBAL_INITIALIZER_END(Name) \
177 }; \
178 static void *_ZFP_GI_ctor_##Name(void) { \
179 static zfbyte d[sizeof(_ZFP_GI_##Name)]; \
180 return (void *)zfnewPlacement(d, _ZFP_GI_##Name); \
181 } \
182 static void _ZFP_GI_dtor_##Name(ZF_IN void *p) { \
183 zfdeletePlacement((_ZFP_GI_##Name *)p); \
184 }
188#define ZF_GLOBAL_INITIALIZER_END(Name) \
189 _ZFP_ZF_GLOBAL_INITIALIZER_END(Name)
190
191#define _ZFP_ZF_GLOBAL_INITIALIZER_INSTANCE(Name) \
192 (_ZFP_GI_##Name::_ZFP_GI_I())
196#define ZF_GLOBAL_INITIALIZER_INSTANCE(Name) \
197 _ZFP_ZF_GLOBAL_INITIALIZER_INSTANCE(Name)
198
199#define _ZFP_ZF_GLOBAL_INITIALIZER_CLASS(Name) \
200 _ZFP_GI_##Name
204#define ZF_GLOBAL_INITIALIZER_CLASS(Name) \
205 _ZFP_ZF_GLOBAL_INITIALIZER_CLASS(Name)
206
208#endif // #ifndef _ZFI_ZFCoreGlobalInitializer_h_
209
light weight array
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
ZFFrameworkState
state for ZFFramework
Definition ZFCoreGlobalInitializer.h:48
@ ZFFrameworkStateNotAvailable
not available
Definition ZFCoreGlobalInitializer.h:49
@ ZFFrameworkStateCleanupRunning
during cleanup step (ZFFrameworkCleanup)
Definition ZFCoreGlobalInitializer.h:52
@ ZFFrameworkStateAvailable
available, init finished
Definition ZFCoreGlobalInitializer.h:51
@ ZFFrameworkStateInitRunning
during init step (ZFFrameworkInit)
Definition ZFCoreGlobalInitializer.h:50
#define ZFTOKEN_ZFFrameworkStateCleanupRunning
string tokens
Definition ZFCoreGlobalInitializer.h:62
#define ZFTOKEN_ZFFrameworkStateInitRunning
string tokens
Definition ZFCoreGlobalInitializer.h:58
void ZFFrameworkCleanup(void)
see ZFFrameworkInit
#define ZFTOKEN_ZFFrameworkStateNotAvailable
string tokens
Definition ZFCoreGlobalInitializer.h:56
ZFFrameworkState ZFFrameworkStateCheck(void)
get current state of ZFFramework
#define ZFTOKEN_ZFFrameworkStateAvailable
string tokens
Definition ZFCoreGlobalInitializer.h:60
void ZFFrameworkInit(void)
must be called in main thread before any access of ZFFramework member
void ZFFrameworkAssertInit(void)
assert fail and output log if ZFFramework not initialized
void(* ZFFrameworkStateUpdateCallback)(void)
see ZFFrameworkInit
Definition ZFCoreGlobalInitializer.h:16
static register util
_ZFT_t_zfchar zfchar
char wrapper
Definition ZFCoreTypeDef_CharType.h:17
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:184
#define zfclassNotPOD
shows the class is not a POD type, you should not memset it or declare it in stack or copy value by c...
Definition ZFCoreTypeDef_ClassType.h:48
#define zfclassFwd
forward declaration of a class type
Definition ZFCoreTypeDef_ClassType.h:31
#define ZFOUTPUT_TYPE(T_Type, outputAction)
declare your custom type conversion to string, convenient for debug
Definition ZFCoreTypeDef_OtherType.h:221
level for logic which depends on order
ZFLevel
level for logic which depends on order
Definition ZFLevel.h:17
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
light weight array
Definition ZFCoreArray.h:348