5#ifndef _ZFI_ZFCoreGlobalInitializer_h_
6#define _ZFI_ZFCoreGlobalInitializer_h_
20#define ZFFrameworkInitFinishCallbacks _ZFP_ZFFrameworkInitFinishCallbacks()
22#define ZFFrameworkCleanupPrepareCallbacks _ZFP_ZFFrameworkCleanupPrepareCallbacks()
56#define ZFTOKEN_ZFFrameworkStateNotAvailable "NotAvailable"
58#define ZFTOKEN_ZFFrameworkStateInitRunning "InitRunning"
60#define ZFTOKEN_ZFFrameworkStateAvailable "Available"
62#define ZFTOKEN_ZFFrameworkStateCleanupRunning "CleanupRunning"
97typedef void *(*_ZFP_GI_Constructor)(void);
98typedef void (*_ZFP_GI_Destructor)(
ZF_IN void *p);
105 ,
ZF_IN _ZFP_GI_Constructor constructor
106 ,
ZF_IN _ZFP_GI_Destructor destructor
110 void *instanceAccess(
void);
112 _ZFP_GI_RegPrivate *d;
115#define _ZFP_ZF_GLOBAL_INITIALIZER_INIT_WITH_LEVEL(Name, ZFLevel_) \
116 ZFLIB_HIDDEN_BEGIN() \
117 static void *_ZFP_GI_ctor_##Name(void); \
118 static void _ZFP_GI_dtor_##Name(ZF_IN void *p); \
119 static _ZFP_GI_Reg _ZFP_GI_reg_##Name(#Name, \
121 _ZFP_GI_ctor_##Name, \
122 _ZFP_GI_dtor_##Name \
124 zfclassNotPOD _ZFP_GI_##Name { \
126 typedef _ZFP_GI_##Name zfself; \
128 static _ZFP_GI_##Name *_ZFP_GI_I(void) { \
129 return (_ZFP_GI_##Name *)_ZFP_GI_reg_##Name.instanceAccess(); \
159#define ZF_GLOBAL_INITIALIZER_INIT_WITH_LEVEL(Name, ZFLevel_) \
160 _ZFP_ZF_GLOBAL_INITIALIZER_INIT_WITH_LEVEL(Name, ZFLevel_)
165#define ZF_GLOBAL_INITIALIZER_INIT(Name) \
166 _ZFP_ZF_GLOBAL_INITIALIZER_INIT_WITH_LEVEL(Name, ZFLevelAppNormal)
168#define _ZFP_ZF_GLOBAL_INITIALIZER_DESTROY(Name) \
170 ~_ZFP_GI_##Name(void)
174#define ZF_GLOBAL_INITIALIZER_DESTROY(Name) \
175 _ZFP_ZF_GLOBAL_INITIALIZER_DESTROY(Name)
177#define _ZFP_ZF_GLOBAL_INITIALIZER_END(Name) \
179 static void *_ZFP_GI_ctor_##Name(void) { \
180 return zfnew(_ZFP_GI_##Name); \
182 static void _ZFP_GI_dtor_##Name(ZF_IN void *p) { \
183 zfdelete((_ZFP_GI_##Name *)p); \
189#define ZF_GLOBAL_INITIALIZER_END(Name) \
190 _ZFP_ZF_GLOBAL_INITIALIZER_END(Name)
192#define _ZFP_ZF_GLOBAL_INITIALIZER_INSTANCE(Name) \
193 (_ZFP_GI_##Name::_ZFP_GI_I())
197#define ZF_GLOBAL_INITIALIZER_INSTANCE(Name) \
198 _ZFP_ZF_GLOBAL_INITIALIZER_INSTANCE(Name)
200#define _ZFP_ZF_GLOBAL_INITIALIZER_CLASS(Name) \
205#define ZF_GLOBAL_INITIALIZER_CLASS(Name) \
206 _ZFP_ZF_GLOBAL_INITIALIZER_CLASS(Name)
#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
_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:198
#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:297