6#ifndef _ZFI_ZFExport_h_
7#define _ZFI_ZFExport_h_
13#define _ZFP_ZFEXPORT_VAR_DEFINE(Type, Name) \
14 ZF_STATIC_REGISTER_INIT(ExportV_##Name) { \
15 ZFMethodFuncUserRegister_1(setterMethod, { \
17 }, ZF_NAMESPACE_CURRENT(), \
19 , ZFMP_IN(Type const &, v) \
21 ZFMethodFuncUserRegister_0(getterMethod, { \
23 }, ZF_NAMESPACE_CURRENT(), \
24 Type &, zftext(#Name) \
27 ZF_STATIC_REGISTER_DESTROY(ExportV_##Name) { \
28 ZFMethodFuncUserUnregister(ZFMethodFuncForName(ZF_NAMESPACE_CURRENT(), zftext(#Name), ZFTypeId<Type>::TypeId())); \
29 ZFMethodFuncUserUnregister(ZFMethodFuncForName(ZF_NAMESPACE_CURRENT(), zftext(#Name), zfnull)); \
31 ZF_STATIC_REGISTER_END(ExportV_##Name)
32#define _ZFP_ZFEXPORT_VAR_DEFINE_READONLY(Type, Name) \
33 ZF_STATIC_REGISTER_INIT(ExportV_##Name) { \
34 ZFMethodFuncUserRegister_0(getterMethod, { \
36 }, ZF_NAMESPACE_CURRENT(), \
37 Type const &, zftext(#Name) \
40 ZF_STATIC_REGISTER_DESTROY(ExportV_##Name) { \
41 ZFMethodFuncUserUnregister(ZFMethodFuncForName(ZF_NAMESPACE_CURRENT(), zftext(#Name), zfnull)); \
43 ZF_STATIC_REGISTER_END(ExportV_##Name)
68#define ZFEXPORT_VAR_DECLARE(ZFLIB_, Type, Name) \
70 extern ZFLIB_ Type _ZFP_v_##Name; \
72 inline Type &_ZFP_ZFMETHOD_FUNC_NAME(Name)(void) { \
73 return _ZFP_v_##Name; \
76 inline void _ZFP_ZFMETHOD_FUNC_NAME(Name)(ZF_IN Type const &v) { \
81#define ZFEXPORT_VAR_DEFINE(Type, Name, initValue) \
82 Type _ZFP_v_##Name = (initValue); \
83 _ZFP_ZFEXPORT_VAR_DEFINE(Type, Name)
86#define ZFEXPORT_VAR_ALIAS_DECLARE(ZFLIB_, Type, Name, AliasName) \
87 inline Type &_ZFP_ZFMETHOD_FUNC_NAME(Name)(void) { \
88 return (AliasName)(); \
91 inline void _ZFP_ZFMETHOD_FUNC_NAME(Name)(ZF_IN Type const &v) { \
96#define ZFEXPORT_VAR_ALIAS_DEFINE(Type, Name) \
97 _ZFP_ZFEXPORT_VAR_DEFINE(Type, Name)
100#define ZFEXPORT_VAR_VALUEREF_DECLARE(ZFLIB_, Type, Name, ValueRef) \
101 inline Type &_ZFP_ZFMETHOD_FUNC_NAME(Name)(void) { \
105 inline void _ZFP_ZFMETHOD_FUNC_NAME(Name)(ZF_IN Type const &v) { \
110#define ZFEXPORT_VAR_VALUEREF_DEFINE(Type, Name) \
111 _ZFP_ZFEXPORT_VAR_DEFINE(Type, Name)
115#define ZFEXPORT_VAR_READONLY_DECLARE(ZFLIB_, Type, Name) \
117 extern ZFLIB_ Type _ZFP_v_##Name; \
119 inline Type const &_ZFP_ZFMETHOD_FUNC_NAME(Name)(void) { \
120 return _ZFP_v_##Name; \
124#define ZFEXPORT_VAR_READONLY_DEFINE(Type, Name, initValue) \
125 Type _ZFP_v_##Name = (initValue); \
126 _ZFP_ZFEXPORT_VAR_DEFINE_READONLY(Type, Name)
129#define ZFEXPORT_VAR_READONLY_ALIAS_DECLARE(ZFLIB_, Type, Name, AliasName) \
130 inline Type const &_ZFP_ZFMETHOD_FUNC_NAME(Name)(void) { \
131 return (AliasName)(); \
135#define ZFEXPORT_VAR_READONLY_ALIAS_DEFINE(Type, Name) \
136 _ZFP_ZFEXPORT_VAR_DEFINE_READONLY(Type, Name)
139#define ZFEXPORT_VAR_READONLY_VALUEREF_DECLARE(ZFLIB_, Type, Name, ValueRef) \
140 inline Type const &_ZFP_ZFMETHOD_FUNC_NAME(Name)(void) { \
145#define ZFEXPORT_VAR_READONLY_VALUEREF_DEFINE(Type, Name) \
146 _ZFP_ZFEXPORT_VAR_DEFINE_READONLY(Type, Name)
150#define ZFEXPORT_VAR_USER_REGISTER(Type, Name) \
151 ZF_STATIC_REGISTER_INIT(ExportVar_##Name) { \
152 ZFMethodFuncUserRegister_1(setterMethod, { \
154 }, ZF_NAMESPACE_CURRENT(), void, zftext(#Name) \
155 , ZFMP_IN(Type const &, v) \
157 ZFMethodFuncUserRegister_0(getterMethod, { \
159 }, ZF_NAMESPACE_CURRENT(), Type const &, zftext(#Name) \
162 ZF_STATIC_REGISTER_DESTROY(ExportVar_##Name) { \
163 ZFMethodFuncUserUnregister(ZFMethodFuncForName( \
164 ZF_NAMESPACE_CURRENT() \
166 , ZFTypeId<Type>::TypeId() \
168 ZFMethodFuncUserUnregister(ZFMethodFuncForName( \
169 ZF_NAMESPACE_CURRENT() \
174 ZF_STATIC_REGISTER_END(ExportVar_##Name)
176#define ZFEXPORT_VAR_READONLY_USER_REGISTER(Type, Name) \
177 ZF_STATIC_REGISTER_INIT(ExportVar_##Name) { \
178 ZFMethodFuncUserRegister_0(getterMethod, { \
180 }, ZF_NAMESPACE_CURRENT(), Type const &, zftext(#Name) \
183 ZF_STATIC_REGISTER_DESTROY(ExportVar_##Name) { \
184 ZFMethodFuncUserUnregister(ZFMethodFuncForName( \
185 ZF_NAMESPACE_CURRENT() \
190 ZF_STATIC_REGISTER_END(ExportVar_##Name)
194#define ZFEXPORT_VAR_USER_REGISTER_FOR_FUNC(Type, Name) \
195 ZF_STATIC_REGISTER_INIT(ExportVar_##Name) { \
196 ZFMethodFuncUserRegister_1(setterMethod, { \
198 }, ZF_NAMESPACE_CURRENT(), void, zftext(#Name) \
199 , ZFMP_IN(Type const &, v) \
201 ZFMethodFuncUserRegister_0(getterMethod, { \
203 }, ZF_NAMESPACE_CURRENT(), Type const &, zftext(#Name) \
206 ZF_STATIC_REGISTER_DESTROY(ExportVar_##Name) { \
207 ZFMethodFuncUserUnregister(ZFMethodFuncForName( \
208 ZF_NAMESPACE_CURRENT() \
210 , ZFTypeId<Type>::TypeId() \
212 ZFMethodFuncUserUnregister(ZFMethodFuncForName( \
213 ZF_NAMESPACE_CURRENT() \
218 ZF_STATIC_REGISTER_END(ExportVar_##Name)
220#define ZFEXPORT_VAR_READONLY_USER_REGISTER_FOR_FUNC(Type, Name) \
221 ZF_STATIC_REGISTER_INIT(ExportVar_##Name) { \
222 ZFMethodFuncUserRegister_0(getterMethod, { \
224 }, ZF_NAMESPACE_CURRENT(), Type const &, zftext(#Name) \
227 ZF_STATIC_REGISTER_DESTROY(ExportVar_##Name) { \
228 ZFMethodFuncUserUnregister(ZFMethodFuncForName( \
229 ZF_NAMESPACE_CURRENT() \
234 ZF_STATIC_REGISTER_END(ExportVar_##Name)
247#define ZFEXPORT_RAW_ENUM_DEFINE(EnumName, enumValues, ...) \
248 _ZFP_ZFEXPORT_RAW_ENUM_DEFINE(EnumName, enumValues, ##__VA_ARGS__)
250#define _ZFP_ZFEXPORT_RAW_ENUM_DEFINE_EXPAND(...) __VA_ARGS__
251#define _ZFP_ZFEXPORT_RAW_ENUM_DEFINE(...) \
252 _ZFP_ZFEXPORT_RAW_ENUM_DEFINE_EXPAND(_ZFP_ZFEXPORT_RAW_ENUM_DEFINE_(__VA_ARGS__))
253#define _ZFP_ZFEXPORT_RAW_ENUM_DEFINE_(EnumName, enumValues, ...) \
254 ZF_STATIC_REGISTER_INIT(ExportEnum_##EnumName) { \
255 typedef EnumName _EnumName; \
256 ZFM_FIX_PARAM(_ZFP_ZFEXPORT_RAW_ENUM_DEFINE_ITEM_EXPAND, ZFM_EMPTY, enumValues, ##__VA_ARGS__) \
258 ZF_STATIC_REGISTER_DESTROY(ExportEnum_##EnumName) { \
259 for(zfindex i = 0; i < m.count(); ++i) { \
260 ZFMethodFuncUserUnregister(m[i]); \
263 ZFCoreArray<const ZFMethod *> m; \
264 ZF_STATIC_REGISTER_END(ExportEnum_##EnumName)
265#define _ZFP_ZFEXPORT_RAW_ENUM_DEFINE_ITEM_EXPAND(v) \
267 ZFMethodFuncUserRegister_0(resultMethod, { \
269 }, ZF_NAMESPACE_CURRENT(), _EnumName, zftext(#v)); \
270 m.add(resultMethod); \
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98