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 return (void *)zfnew(_ZFP_GI_##Name); \
180 } \
181 static void _ZFP_GI_dtor_##Name(ZF_IN void *p) { \
182 zfdelete((_ZFP_GI_##Name *)p); \
183 }
187#define ZF_GLOBAL_INITIALIZER_END(Name) \
188 _ZFP_ZF_GLOBAL_INITIALIZER_END(Name)
189
190#define _ZFP_ZF_GLOBAL_INITIALIZER_INSTANCE(Name) \
191 (_ZFP_GI_##Name::_ZFP_GI_I())
195#define ZF_GLOBAL_INITIALIZER_INSTANCE(Name) \
196 _ZFP_ZF_GLOBAL_INITIALIZER_INSTANCE(Name)
197
198#define _ZFP_ZF_GLOBAL_INITIALIZER_CLASS(Name) \
199 _ZFP_GI_##Name
203#define ZF_GLOBAL_INITIALIZER_CLASS(Name) \
204 _ZFP_ZF_GLOBAL_INITIALIZER_CLASS(Name)
205
207#endif // #ifndef _ZFI_ZFCoreGlobalInitializer_h_
208
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:180
#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:331