ZFFramework
 
Loading...
Searching...
No Matches
zfautoFwd.h
Go to the documentation of this file.
1
5
6#ifndef _ZFI_zfautoFwd_h_
7#define _ZFI_zfautoFwd_h_
8
9#include "zfany.h"
10
12
13// ============================================================
14// zfauto
36public:
37 zfauto(void) : _ZFP_obj(zfnull) {}
38 zfauto(ZF_IN zfauto const &obj);
39 zfauto(ZF_IN ZFObject *obj);
40 template<typename T_ZFObject>
41 zfauto(ZF_IN T_ZFObject const &obj);
42 zffinal ~zfauto(void);
43
44public:
45 zfauto &operator = (ZF_IN zfauto const &obj);
46 template<typename T_ZFObject>
47 zfauto &operator = (ZF_IN T_ZFObject const &obj);
48
49public:
50 template<typename T_ZFObject>
51 inline zfbool operator == (ZF_IN T_ZFObject const &obj) const {
52 return this->toObject() == _ZFP_zfanyCast(obj);
53 }
54 template<typename T_ZFObject>
55 inline zfbool operator != (ZF_IN T_ZFObject const &obj) const {
56 return this->toObject() != _ZFP_zfanyCast(obj);
57 }
58
59public:
60 inline ZFObject *operator -> (void) const {
61 return this->toObject();
62 }
63 inline operator ZFObject * (void) const {
64 return this->toObject();
65 }
66 template<typename T_ZFObject>
67 inline operator T_ZFObject * (void) const;
68
69public:
70 static const ZFClass *ClassData(void);
72
73public:
77 const zfany &asAny(void) const {
78 return _ZFP_obj;
79 }
80
91 inline ZFObject *toObject(void) const {
92 return _ZFP_obj;
93 }
94
97 template<typename T_ZFObject>
98 inline T_ZFObject to(void) const;
99
100private:
101 zfany _ZFP_obj;
102};
103
104// ============================================================
105// zfautoT
109template<typename T_ZFObjectBase>
112public:
113 zfautoT(void) : zfauto() {}
114 zfautoT(ZF_IN zfauto const &obj) : zfauto(obj) {}
115 zfautoT(ZF_IN zfautoT<T_ZFObjectBase> const &obj) : zfauto((zfauto const &)obj) {}
116 zfautoT(ZF_IN ZFObject *obj) : zfauto(obj) {}
117 template<typename T_ZFObject>
118 zfautoT(ZF_IN T_ZFObject const &obj) : zfauto(obj) {}
119
120public:
121 inline zfautoT<T_ZFObjectBase> &operator = (ZF_IN zfauto const &obj) {
122 zfauto::operator = (obj);
123 return *this;
124 }
125 inline zfautoT<T_ZFObjectBase> &operator = (ZF_IN zfautoT<T_ZFObjectBase> const &obj) {
126 zfauto::operator = ((zfauto const &)obj);
127 return *this;
128 }
129 template<typename T_ZFObject>
130 inline zfautoT<T_ZFObjectBase> &operator = (ZF_IN T_ZFObject const &obj) {
131 zfauto::operator = (obj);
132 return *this;
133 }
134
135public:
136 template<typename T_ZFObject>
137 inline zfbool operator == (ZF_IN T_ZFObject const &obj) const {
138 return this->toObject() == _ZFP_zfanyCast(obj);
139 }
140 template<typename T_ZFObject>
141 inline zfbool operator != (ZF_IN T_ZFObject const &obj) const {
142 return this->toObject() != _ZFP_zfanyCast(obj);
143 }
144
145public:
146 T_ZFObjectBase *operator -> (void) const;
147
148public:
149 inline ZFObject *toObject(void) const { // required for _ZFP_zfanyCast to work
150 return zfauto::toObject();
151 }
152
153public:
154 static const ZFClass *ClassData(void);
156};
157
159// ============================================================
160template<typename T_ZFObject>
161inline zfbool operator == (ZF_IN T_ZFObject *obj, ZF_IN zfauto const &e) {
162 return e.toObject() == _ZFP_zfanyCast(obj);
163}
164template<typename T_ZFObject>
165inline zfbool operator != (ZF_IN T_ZFObject *obj, ZF_IN zfauto const &e) {
166 return e.toObject() != _ZFP_zfanyCast(obj);
167}
168
169// ============================================================
170template<typename T_ZFObject, typename T_ZFObjectBase>
171inline zfbool operator == (ZF_IN T_ZFObject *obj, ZF_IN zfautoT<T_ZFObjectBase> const &e) {
172 return e.toObject() == _ZFP_zfanyCast(obj);
173}
174template<typename T_ZFObject, typename T_ZFObjectBase>
175inline zfbool operator != (ZF_IN T_ZFObject *obj, ZF_IN zfautoT<T_ZFObjectBase> const &e) {
176 return e.toObject() != _ZFP_zfanyCast(obj);
177}
179
181
182#endif // #ifndef _ZFI_zfautoFwd_h_
183
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
#define zffinal
dummy macro shows that a method or class is designed must not to be overrided
Definition ZFCoreTypeDef_ClassType.h:63
#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 zfextend
dummy macro shows class inherit from another
Definition ZFCoreTypeDef_ClassType.h:53
#define ZF_IN
dummy macro that shows the param used as required input
Definition ZFCoreTypeDef_ClassType.h:180
_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 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
ZFObject's class info.
Definition ZFClass.h:67
base class of all objects
Definition ZFObjectCore.h:209
util method to cast ZFObject types freely
Definition zfany.h:35
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:91
zfindex objectRetainCount(void) const
get current retain count
const zfany & asAny(void) const
access as zfany
Definition zfautoFwd.h:77
type restrict version of zfauto
Definition zfautoFwd.h:110
util class to cast ZFObject types freely