ZFFramework
 
Loading...
Searching...
No Matches
zfany.h
Go to the documentation of this file.
1
5
6#ifndef _ZFI_zfany_h_
7#define _ZFI_zfany_h_
8
9#include "zfcast.h"
11
13
14// ============================================================
15// zfany
37public:
38 zfany(void) : _ZFP_obj(zfnull) {}
39 zfany(ZF_IN zfany const &obj) : _ZFP_obj(obj._ZFP_obj) {}
40 zfany(ZF_IN ZFObject *obj) : _ZFP_obj(obj) {}
41 template<typename T_ZFObject>
42 zfany(ZF_IN T_ZFObject const &obj) : _ZFP_obj(_ZFP_zfanyCast(obj)) {}
43
44public:
45 inline zfany &operator = (ZF_IN zfany const &obj) {
46 _ZFP_obj = obj._ZFP_obj;
47 return *this;
48 }
49 inline zfany &operator = (ZF_IN ZFObject *obj) {
50 _ZFP_obj = obj;
51 return *this;
52 }
53 template<typename T_ZFObject>
54 inline zfany &operator = (ZF_IN T_ZFObject const &obj) {
55 _ZFP_obj = _ZFP_zfanyCast(obj);
56 return *this;
57 }
58
59public:
60 template<typename T_ZFObject>
61 inline zfbool operator == (ZF_IN T_ZFObject const &obj) const {
62 return this->toObject() == _ZFP_zfanyCast(obj);
63 }
64 template<typename T_ZFObject>
65 inline zfbool operator != (ZF_IN T_ZFObject const &obj) const {
66 return this->toObject() != _ZFP_zfanyCast(obj);
67 }
68
69public:
70 inline ZFObject *operator -> (void) const {
71 return _ZFP_obj;
72 }
73 inline operator zfbool (void) const {
74 return _ZFP_obj != zfnull;
75 }
76 inline operator ZFObject * (void) const {
77 return _ZFP_obj;
78 }
79 template<typename T_ZFObject>
80 inline operator T_ZFObject * (void) const {
81 return zfcast(T_ZFObject *, _ZFP_obj);
82 }
83
84public:
85 static const ZFClass *ClassData(void);
87
88public:
92 inline ZFObject *toObject(void) const {
93 return _ZFP_obj;
94 }
95
98 template<typename T_ZFObject>
99 inline T_ZFObject to(void) const {
100 return zfcast(T_ZFObject, _ZFP_obj);
101 }
102
103private:
104 ZFObject *_ZFP_obj;
105};
107
108// ============================================================
112template<typename T_ZFObjectBase>
115public:
116 zfanyT(void) : zfany() {}
117 zfanyT(ZF_IN zfany const &obj) : zfany(obj) {}
118 zfanyT(ZF_IN zfanyT<T_ZFObjectBase> const &obj) : zfany((zfany const &)obj) {}
119 zfanyT(ZF_IN ZFObject *obj) : zfany(obj) {}
120 template<typename T_ZFObject>
121 zfanyT(ZF_IN T_ZFObject const &obj) : zfany(obj) {}
122
123public:
124 inline zfanyT<T_ZFObjectBase> &operator = (ZF_IN zfany const &obj) {
125 zfany::operator = (obj);
126 return *this;
127 }
128 inline zfanyT<T_ZFObjectBase> &operator = (ZF_IN zfanyT<T_ZFObjectBase> const &obj) {
129 zfany::operator = ((zfany const &)obj);
130 return *this;
131 }
132 template<typename T_ZFObject>
133 inline zfanyT<T_ZFObjectBase> &operator = (ZF_IN T_ZFObject const &obj) {
134 zfany::operator = (obj);
135 return *this;
136 }
137
138public:
139 template<typename T_ZFObject>
140 inline zfbool operator == (ZF_IN T_ZFObject const &obj) const {
141 return this->toObject() == _ZFP_zfanyCast(obj);
142 }
143 template<typename T_ZFObject>
144 inline zfbool operator != (ZF_IN T_ZFObject const &obj) const {
145 return this->toObject() != _ZFP_zfanyCast(obj);
146 }
147
148public:
149 inline T_ZFObjectBase *operator -> (void) const {
150 return zfcast(T_ZFObjectBase *, this->toObject());
151 }
152
153public:
154 inline ZFObject *toObject(void) const { // required for _ZFP_zfanyCast to work
155 return zfany::toObject();
156 }
157
158public:
159 static const ZFClass *ClassData(void) {
160 return T_ZFObjectBase::ClassData();
161 }
163};
165
166// ============================================================
168template<typename T_ZFObject>
169inline zfbool operator == (ZF_IN T_ZFObject *obj, ZF_IN zfany const &e) {
170 return e.toObject() == _ZFP_zfanyCast(obj);
171}
172template<typename T_ZFObject>
173inline zfbool operator != (ZF_IN T_ZFObject *obj, ZF_IN zfany const &e) {
174 return e.toObject() != _ZFP_zfanyCast(obj);
175}
176
177// ============================================================
178template<typename T_ZFObject, typename T_ZFObjectBase>
179inline zfbool operator == (ZF_IN T_ZFObject *obj, ZF_IN zfanyT<T_ZFObjectBase> const &e) {
180 return e.toObject() == _ZFP_zfanyCast(obj);
181}
182template<typename T_ZFObject, typename T_ZFObjectBase>
183inline zfbool operator != (ZF_IN T_ZFObject *obj, ZF_IN zfanyT<T_ZFObjectBase> const &e) {
184 return e.toObject() != _ZFP_zfanyCast(obj);
185}
187
189#endif // #ifndef _ZFI_zfany_h_
190
#define ZFLIB_ZFCore
used to export symbols
Definition ZFCoreEnvDef.h:30
#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
#define zfclassPOD
shows the class is a POD type
Definition ZFCoreTypeDef_ClassType.h:35
#define zfclassFwd
forward declaration of a class type
Definition ZFCoreTypeDef_ClassType.h:31
_ZFT_t_zfbool zfbool
bool type
Definition ZFCoreTypeDef_CoreType.h:103
#define zfnull
same as NULL, defined for future use
Definition ZFCoreTypeDef_CoreType.h:88
#define ZFCORE_POD_DECLARE_NO_COMPARER(Type)
explicitly declare as POD
Definition ZFCoreUtilTemplate.h:565
#define ZFCORE_POD_DECLARE_TEMPLATE_NO_COMPARER(T_Type, Type)
explicitly declare as POD
Definition ZFCoreUtilTemplate.h:568
#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
T_ZFObject to(void) const
cast by zfcast
Definition zfany.h:99
ZFObject * toObject(void) const
get the holded object
Definition zfany.h:92
see zfany
Definition zfany.h:113
zfcast declarations
#define zfcast(T_To, obj)
safely cast ZFObject types, return null if not desired type
Definition zfcast.h:24