6#ifndef _ZFI_ZFObjectRetain_h_
7#define _ZFI_ZFObjectRetain_h_
15template<
typename T_ZFObject,
int val
id>
17template<
typename T_ZFObject>
20 static inline T_ZFObject *A(
void) {
21 ZFObject *obj = T_ZFObject::_ZFP_Obj_ctor();
22 obj->_ZFP_ZFObject_objectOnInit();
23 obj->_ZFP_ZFObject_objectOnInitFinish();
24 return _ZFP_ObjCastInternal(T_ZFObject *, obj);
27 static inline T_ZFObject *CanAlloc(
void);
29 static inline T_ZFObject *CanAlloc(P0
const &p0) {
30 T_ZFObject *obj = _ZFP_ObjCastInternal(T_ZFObject *, T_ZFObject::_ZFP_Obj_ctor());
31 obj->_ZFP_ZFObject_objectOnInit();
32 obj->objectOnInit(p0);
33 obj->_ZFP_ZFObject_objectOnInitFinish();
36 template<
typename P0,
typename P1>
37 static inline T_ZFObject *CanAlloc(P0
const &p0, P1
const &p1) {
38 T_ZFObject *obj = _ZFP_ObjCastInternal(T_ZFObject *, T_ZFObject::_ZFP_Obj_ctor());
39 obj->_ZFP_ZFObject_objectOnInit();
40 obj->objectOnInit(p0, p1);
41 obj->_ZFP_ZFObject_objectOnInitFinish();
44 template<
typename P0,
typename P1,
typename P2>
45 static inline T_ZFObject *CanAlloc(P0
const &p0, P1
const &p1, P2
const &p2) {
46 T_ZFObject *obj = _ZFP_ObjCastInternal(T_ZFObject *, T_ZFObject::_ZFP_Obj_ctor());
47 obj->_ZFP_ZFObject_objectOnInit();
48 obj->objectOnInit(p0, p1, p2);
49 obj->_ZFP_ZFObject_objectOnInitFinish();
52 template<
typename P0,
typename P1,
typename P2,
typename P3>
53 static inline T_ZFObject *CanAlloc(P0
const &p0, P1
const &p1, P2
const &p2, P3
const &p3) {
54 T_ZFObject *obj = _ZFP_ObjCastInternal(T_ZFObject *, T_ZFObject::_ZFP_Obj_ctor());
55 obj->_ZFP_ZFObject_objectOnInit();
56 obj->objectOnInit(p0, p1, p2, p3);
57 obj->_ZFP_ZFObject_objectOnInitFinish();
60 template<
typename P0,
typename P1,
typename P2,
typename P3,
typename P4>
61 static inline T_ZFObject *CanAlloc(P0
const &p0, P1
const &p1, P2
const &p2, P3
const &p3, P4
const &p4) {
62 T_ZFObject *obj = _ZFP_ObjCastInternal(T_ZFObject *, T_ZFObject::_ZFP_Obj_ctor());
63 obj->_ZFP_ZFObject_objectOnInit();
64 obj->objectOnInit(p0, p1, p2, p3, p4);
65 obj->_ZFP_ZFObject_objectOnInitFinish();
68 template<
typename P0,
typename P1,
typename P2,
typename P3,
typename P4,
typename P5>
69 static inline T_ZFObject *CanAlloc(P0
const &p0, P1
const &p1, P2
const &p2, P3
const &p3, P4
const &p4, P5
const &p5) {
70 T_ZFObject *obj = _ZFP_ObjCastInternal(T_ZFObject *, T_ZFObject::_ZFP_Obj_ctor());
71 obj->_ZFP_ZFObject_objectOnInit();
72 obj->objectOnInit(p0, p1, p2, p3, p4, p5);
73 obj->_ZFP_ZFObject_objectOnInitFinish();
76 template<
typename P0,
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6>
77 static inline T_ZFObject *CanAlloc(P0
const &p0, P1
const &p1, P2
const &p2, P3
const &p3, P4
const &p4, P5
const &p5, P6
const &p6) {
78 T_ZFObject *obj = _ZFP_ObjCastInternal(T_ZFObject *, T_ZFObject::_ZFP_Obj_ctor());
79 obj->_ZFP_ZFObject_objectOnInit();
80 obj->objectOnInit(p0, p1, p2, p3, p4, p5, p6);
81 obj->_ZFP_ZFObject_objectOnInitFinish();
84 template<
typename P0,
typename P1,
typename P2,
typename P3,
typename P4,
typename P5,
typename P6,
typename P7>
85 static inline T_ZFObject *CanAlloc(P0
const &p0, P1
const &p1, P2
const &p2, P3
const &p3, P4
const &p4, P5
const &p5, P6
const &p6, P7
const &p7) {
86 T_ZFObject *obj = _ZFP_ObjCastInternal(T_ZFObject *, T_ZFObject::_ZFP_Obj_ctor());
87 obj->_ZFP_ZFObject_objectOnInit();
88 obj->objectOnInit(p0, p1, p2, p3, p4, p5, p6, p7);
89 obj->_ZFP_ZFObject_objectOnInitFinish();
93template<
typename T_ZFObject>
96#define _ZFP_zfobjAlloc(T_ZFObject, ...) \
97 _ZFP_ObjACk<T_ZFObject, T_ZFObject::_ZFP_ZFObjectCanAlloc && T_ZFObject::_ZFP_ZFObjectCanAllocPublic>::CanAlloc(__VA_ARGS__)
101#define zfobjAlloc(T_ZFObject, ...) \
102 zfunsafe_zfobjAlloc(T_ZFObject, ##__VA_ARGS__)
104#define zfunsafe_zfobjAlloc(T_ZFObject, ...) \
105 _ZFP_zfobjAlloc(T_ZFObject, ##__VA_ARGS__)
107#define _ZFP_zfobjAllocInternal(T_ZFObject) \
108 _ZFP_ObjACk<T_ZFObject, T_ZFObject::_ZFP_ZFObjectCanAlloc && T_ZFObject::_ZFP_ZFObjectCanAllocPublic>::A()
114 obj->objectOnRetain();
117template<
typename T_ZFObject>
118inline T_ZFObject
const &_ZFP_zfobjRetain(
ZF_IN T_ZFObject
const &obj) {
125#define zfobjRetain(obj) \
126 (ZFCoreMutexLockerHolder(), zfunsafe_zfobjRetain(obj))
128#define zfunsafe_zfobjRetain(obj) \
129 _ZFP_zfobjRetain(obj)
135 obj->_ZFP_ZFObjectCheckRelease();
138template<
typename T_ZFObject>
139inline void _ZFP_zfobjRelease(
ZF_IN T_ZFObject
const &obj) {
145#define zfobjRelease(obj) \
146 (ZFCoreMutexLockerHolder(), zfunsafe_zfobjRelease(obj))
148#define zfunsafe_zfobjRelease(obj) \
149 _ZFP_zfobjRelease(obj)
151template<
typename T_ZFObject>
152T_ZFObject *_ZFP_ObjACk<T_ZFObject, 1>::CanAlloc(
void) {
153 return _ZFP_ObjACk<T_ZFObject, 1>::A();
157template<
typename T_ZFObject>
void _ZFP_zfweakCk(T_ZFObject &t);
186template<
typename T_ZFObject,
typename T_ZFObject2>
196template<
typename T_ZFObject,
typename T_ZFObject2>
#define ZFCoreMutexUnlock()
see ZFCoreMutexLock
Definition ZFCoreMutex.h:58
#define ZFCoreMutexLock()
internal use only
Definition ZFCoreMutex.h:51
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:191
#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 ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
base class of all objects
#define zfunsafe_zfobjRelease(obj)
no lock version of zfobjRelease, use with caution
Definition ZFObjectRetain.h:148
void zfunsafe_zfobjRetainChange(T_ZFObject &obj, T_ZFObject2 const &v)
no lock version of zfobjRetainChange, use with caution
Definition ZFObjectRetain.h:197
void zfobjRetainChange(T_ZFObject &obj, T_ZFObject2 const &v)
util to release property's old value, retain new value, then set to property
Definition ZFObjectRetain.h:187
#define zfunsafe_zfobjRetain(obj)
no lock version of zfobjRetain, use with caution
Definition ZFObjectRetain.h:128
base class of all objects
Definition ZFObjectCore.h:195
#define zfcast(T_To, obj)
safely cast ZFObject types, return null if not desired type
Definition zfcast.h:24