ZFFramework
 
Loading...
Searching...
No Matches
zfauto.h
Go to the documentation of this file.
1
5
6#ifndef _ZFI_zfauto_h_
7#define _ZFI_zfauto_h_
8
9#include "ZFObjectRetain.h"
10
12
13// ============================================================
14// zfauto
16inline zfauto::zfauto(ZF_IN zfauto const &obj)
17: _ZFP_obj(zfRetain(_ZFP_zfanyCast(obj)))
18{
19}
20template<typename T_ZFObject>
21zfauto::zfauto(ZF_IN T_ZFObject const &obj)
22: _ZFP_obj(zfRetain(_ZFP_zfanyCast(obj)))
23{
24}
25inline zfauto::~zfauto(void) {
26 zfRelease(_ZFP_obj);
27}
28
29inline zfauto &zfauto::operator = (ZF_IN zfauto const &obj) {
31 this->zfunsafe_assign(_ZFP_zfanyCast(obj));
33 return *this;
34}
35template<typename T_ZFObject>
36zfauto &zfauto::operator = (ZF_IN T_ZFObject const &obj) {
38 this->zfunsafe_assign(_ZFP_zfanyCast(obj));
40 return *this;
41}
42
43template<typename T_ZFObject>
44zfbool zfauto::operator == (ZF_IN T_ZFObject const &obj) const {
45 return this->toObject() == _ZFP_zfanyCast(obj);
46}
47template<typename T_ZFObject>
48zfbool zfauto::operator != (ZF_IN T_ZFObject const &obj) const {
49 return this->toObject() != _ZFP_zfanyCast(obj);
50}
51
52template<typename T_ZFObject>
53inline zfauto::operator T_ZFObject * (void) const {
54 return zfcast(T_ZFObject *, this->toObject());
55}
56
57inline const ZFClass *zfauto::ClassData(void) {
58 return ZFObject::ClassData();
59}
60
61inline void zfauto::zfunsafe_assign(ZF_IN ZFObject *obj) {
62 ZFObject *t = _ZFP_obj;
63 _ZFP_obj = zfunsafe_zfRetain(obj);
65}
66
67inline zfindex zfauto::objectRetainCount(void) const {
68 return _ZFP_obj ? _ZFP_obj->objectRetainCount() : 0;
69}
70template<typename T_ZFObject>
71inline T_ZFObject zfauto::to(void) const {
72 return zfcast(T_ZFObject, this->toObject());
73}
75
76// ============================================================
78template<typename T_ZFObjectBase>
79T_ZFObjectBase *zfautoT<T_ZFObjectBase>::operator -> (void) const {
80 return zfcast(T_ZFObjectBase *, this->toObject());
81}
82
83template<typename T_ZFObjectBase>
85 return T_ZFObjectBase::ClassData();
86}
88
90
91#endif // #ifndef _ZFI_zfauto_h_
92
#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:184
_ZFT_t_zfbool zfbool
bool type
Definition ZFCoreTypeDef_CoreType.h:103
_ZFT_t_zfindex zfindex
similar to size_t, used for index and size only
Definition ZFCoreTypeDef_CoreType.h:154
#define ZF_NAMESPACE_GLOBAL_BEGIN
begin namespace ZFFramework
Definition ZFNamespace.h:97
#define ZF_NAMESPACE_GLOBAL_END
end namespace ZFFramework
Definition ZFNamespace.h:98
retain count logic for ZFFramework
#define zfRelease(obj)
release an object, see ZFObject
Definition ZFObjectRetain.h:148
#define zfunsafe_zfRelease(obj)
no lock version of zfRelease, use with caution
Definition ZFObjectRetain.h:151
#define zfRetain(obj)
retain an object, see ZFObject
Definition ZFObjectRetain.h:128
#define zfunsafe_zfRetain(obj)
no lock version of zfRetain, use with caution
Definition ZFObjectRetain.h:131
ZFObject's class info.
Definition ZFClass.h:66
base class of all objects
Definition ZFObjectCore.h:205
static const ZFClass * ClassData(void)
get class info
Definition ZFObjectCore.h:207
a ZFObject holder which would release content object automatically when destroyed
Definition zfautoFwd.h:34
T_ZFObject to(void) const
cast by zfcast
void zfunsafe_assign(ZFObject *obj)
no lock version of object assign, for low level impl only
ZFObject * toObject(void) const
get the holded object
Definition zfautoFwd.h:89
zfindex objectRetainCount(void) const
get current retain count
type restrict version of zfauto
Definition zfautoFwd.h:108
#define zfcast(T_To, obj)
safely cast ZFObject types, return null if not desired type
Definition zfcast.h:24