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 template<typename T_ZFObject>
40 zfauto(ZF_IN T_ZFObject const &obj);
41 zffinal ~zfauto(void);
42
43public:
44 zfauto &operator = (ZF_IN zfauto const &obj);
45 template<typename T_ZFObject>
46 zfauto &operator = (ZF_IN T_ZFObject const &obj);
47
48public:
49 template<typename T_ZFObject>
50 zfbool operator == (ZF_IN T_ZFObject const &obj) const;
51 template<typename T_ZFObject>
52 zfbool operator != (ZF_IN T_ZFObject const &obj) const;
53
54public:
55 inline ZFObject *operator -> (void) const {
56 return _ZFP_obj;
57 }
58 inline operator zfbool (void) const {
59 return (zfbool)_ZFP_obj;
60 }
61 inline operator ZFObject * (void) const {
62 return _ZFP_obj;
63 }
64 template<typename T_ZFObject>
65 inline operator T_ZFObject * (void) const;
66
67public:
68 static const ZFClass *ClassData(void);
70
71public:
75 inline const zfany &asAny(void) const {
76 return _ZFP_obj;
77 }
78
89 inline ZFObject *toObject(void) const {
90 return _ZFP_obj;
91 }
92
95 template<typename T_ZFObject>
96 inline T_ZFObject to(void) const;
97
98private:
99 zfany _ZFP_obj;
100};
101
102// ============================================================
103// zfautoT
107template<typename T_ZFObjectBase>
110public:
111 zfautoT(void) : zfauto() {}
112 zfautoT(ZF_IN zfauto const &obj) : zfauto(obj) {}
113 zfautoT(ZF_IN zfautoT<T_ZFObjectBase> const &obj) : zfauto(obj) {}
114 template<typename T_ZFObject>
115 zfautoT(ZF_IN T_ZFObject const &obj) : zfauto(obj) {}
116
117public:
118 inline zfautoT<T_ZFObjectBase> &operator = (ZF_IN zfauto const &obj) {
119 zfauto::operator = (obj);
120 return *this;
121 }
122 inline zfautoT<T_ZFObjectBase> &operator = (ZF_IN zfautoT<T_ZFObjectBase> const &obj) {
123 zfauto::operator = (obj);
124 return *this;
125 }
126 template<typename T_ZFObject>
127 inline zfautoT<T_ZFObjectBase> &operator = (ZF_IN T_ZFObject const &obj) {
128 zfauto::operator = (obj);
129 return *this;
130 }
131
132public:
133 template<typename T_ZFObject>
134 inline zfbool operator == (ZF_IN T_ZFObject const &obj) const {
135 return zfauto::operator == (obj);
136 }
137 template<typename T_ZFObject>
138 inline zfbool operator != (ZF_IN T_ZFObject const &obj) const {
139 return zfauto::operator != (obj);
140 }
141
142public:
143 T_ZFObjectBase *operator -> (void) const;
144
145public:
146 inline ZFObject *toObject(void) const { // required for _ZFP_zfanyCast to work
147 return zfauto::toObject();
148 }
149
150public:
151 static const ZFClass *ClassData(void);
153};
154
156// ============================================================
157template<typename T_ZFObject>
158inline zfbool operator == (ZF_IN T_ZFObject *obj, ZF_IN zfauto const &e) {
159 return e.toObject() == _ZFP_zfanyCast(obj);
160}
161template<typename T_ZFObject>
162inline zfbool operator != (ZF_IN T_ZFObject *obj, ZF_IN zfauto const &e) {
163 return e.toObject() != _ZFP_zfanyCast(obj);
164}
165
166// ============================================================
167template<typename T_ZFObject, typename T_ZFObjectBase>
168inline zfbool operator == (ZF_IN T_ZFObject *obj, ZF_IN zfautoT<T_ZFObjectBase> const &e) {
169 return e.toObject() == _ZFP_zfanyCast(obj);
170}
171template<typename T_ZFObject, typename T_ZFObjectBase>
172inline zfbool operator != (ZF_IN T_ZFObject *obj, ZF_IN zfautoT<T_ZFObjectBase> const &e) {
173 return e.toObject() != _ZFP_zfanyCast(obj);
174}
176
178
179#endif // #ifndef _ZFI_zfautoFwd_h_
180
#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: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 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:66
base class of all objects
Definition ZFObjectCore.h:205
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:89
zfindex objectRetainCount(void) const
get current retain count
const zfany & asAny(void) const
access as zfany
Definition zfautoFwd.h:75
type restrict version of zfauto
Definition zfautoFwd.h:108
util class to cast ZFObject types freely