6#ifndef _ZFI_ZFCoreUtilAutoPtr_h_
7#define _ZFI_ZFCoreUtilAutoPtr_h_
17 _ZFP_zfscopeFreeContainer(
ZF_IN void *p) : p(p) {}
18 ~_ZFP_zfscopeFreeContainer(
void) {
36#define zfscopeFree(obj) \
37 _ZFP_zfscopeFreeContainer ZFUniqueName(zfscopeFree_)(obj)
41typedef void (*_ZFP_zfscopeDeleteCallback)(
ZF_IN void *p);
42template<
typename T_Object>
43void _ZFP_zfscopeDeleteOnDelete(
ZF_IN void *p) {
48 _ZFP_zfscopeDeleteContainer(
void) : p(
zfnull), deleteCallback(
zfnull) {}
49 ~_ZFP_zfscopeDeleteContainer(
void) {
51 this->deleteCallback(this->p);
56 _ZFP_zfscopeDeleteCallback deleteCallback;
58template<
typename T_Object>
59void _ZFP_zfscopeDeleteSetup(
60 ZF_IN _ZFP_zfscopeDeleteContainer *container
61 ,
ZF_IN T_Object *
const &p
63 container->p = (
void *)p;
64 container->deleteCallback = _ZFP_zfscopeDeleteOnDelete<T_Object>;
78#define zfscopeDelete(obj) \
79 _ZFP_zfscopeDeleteContainer ZFUniqueName(zfscopeDelete_); \
80 _ZFP_zfscopeDeleteSetup(&ZFUniqueName(zfscopeDelete_), obj)
87#define zfscopeCleanup_1(action \
90 zfclassLikePOD ZFUniqueName(zfscopeCleanup_T) { \
92 ZFUniqueName(zfscopeCleanup_T)(P0 &p0) \
95 ~ZFUniqueName(zfscopeCleanup_T)(void) { \
100 } ZFUniqueName(zfscopeCleanup_)(p0)
102#define zfscopeCleanup_2(action \
106 zfclassLikePOD ZFUniqueName(zfscopeCleanup_T) { \
108 ZFUniqueName(zfscopeCleanup_T)(P0 &p0 \
114 ~ZFUniqueName(zfscopeCleanup_T)(void) { \
120 } ZFUniqueName(zfscopeCleanup_)(p0 \
124#define zfscopeCleanup_3(action \
129 zfclassLikePOD ZFUniqueName(zfscopeCleanup_T) { \
131 ZFUniqueName(zfscopeCleanup_T)(P0 &p0 \
139 ~ZFUniqueName(zfscopeCleanup_T)(void) { \
146 } ZFUniqueName(zfscopeCleanup_)(p0 \
151#define zfscopeCleanup_4(action \
157 zfclassLikePOD ZFUniqueName(zfscopeCleanup_T) { \
159 ZFUniqueName(zfscopeCleanup_T)(P0 &p0 \
169 ~ZFUniqueName(zfscopeCleanup_T)(void) { \
177 } ZFUniqueName(zfscopeCleanup_)(p0 \
183#define zfscopeCleanup_5(action \
190 zfclassLikePOD ZFUniqueName(zfscopeCleanup_T) { \
192 ZFUniqueName(zfscopeCleanup_T)(P0 &p0 \
204 ~ZFUniqueName(zfscopeCleanup_T)(void) { \
213 } ZFUniqueName(zfscopeCleanup_)(p0 \
220#define zfscopeCleanup_6(action \
228 zfclassLikePOD ZFUniqueName(zfscopeCleanup_T) { \
230 ZFUniqueName(zfscopeCleanup_T)(P0 &p0 \
244 ~ZFUniqueName(zfscopeCleanup_T)(void) { \
254 } ZFUniqueName(zfscopeCleanup_)(p0 \
262#define zfscopeCleanup_7(action \
271 zfclassLikePOD ZFUniqueName(zfscopeCleanup_T) { \
273 ZFUniqueName(zfscopeCleanup_T)(P0 &p0 \
289 ~ZFUniqueName(zfscopeCleanup_T)(void) { \
300 } ZFUniqueName(zfscopeCleanup_)(p0 \
309#define zfscopeCleanup_8(action \
319 zfclassLikePOD ZFUniqueName(zfscopeCleanup_T) { \
321 ZFUniqueName(zfscopeCleanup_T)(P0 &p0 \
339 ~ZFUniqueName(zfscopeCleanup_T)(void) { \
351 } ZFUniqueName(zfscopeCleanup_)(p0 \
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
#define zfclassLikePOD
shows the class is not a POD type, but you may use it like a POD except memset it to 0
Definition ZFCoreTypeDef_ClassType.h:41
#define zfdelete(instance)
same as delete defined for future use
Definition ZFCoreTypeDef_ClassType.h:91
#define zffree(ptr)
same as free defined for future use, do nothing if ptr is NULL
Definition ZFCoreTypeDef_ClassType.h:112
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:180
#define zfnull
same as NULL, defined for future use
Definition ZFCoreTypeDef_CoreType.h:88
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98