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 template<typename T_ZFObject>
50 inline zfany &operator = (ZF_IN T_ZFObject const &obj) {
51 _ZFP_obj = _ZFP_zfanyCast(obj);
52 return *this;
53 }
54
55public:
56 template<typename T_ZFObject>
57 inline zfbool operator == (ZF_IN T_ZFObject const &obj) const {
58 return this->toObject() == _ZFP_zfanyCast(obj);
59 }
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
65public:
66 inline ZFObject *operator -> (void) const {
67 return _ZFP_obj;
68 }
69 inline operator zfbool (void) const {
70 return _ZFP_obj != zfnull;
71 }
72 inline operator ZFObject * (void) const {
73 return _ZFP_obj;
74 }
75 template<typename T_ZFObject>
76 inline operator T_ZFObject * (void) const {
77 return zfcast(T_ZFObject *, _ZFP_obj);
78 }
79
80public:
81 static const ZFClass *ClassData(void);
83
84public:
88 inline ZFObject *toObject(void) const {
89 return _ZFP_obj;
90 }
91
94 template<typename T_ZFObject>
95 inline T_ZFObject to(void) const {
96 return zfcast(T_ZFObject, _ZFP_obj);
97 }
98
99private:
100 ZFObject *_ZFP_obj;
101};
103
104// ============================================================
108template<typename T_ZFObjectBase>
111public:
112 zfanyT(void) : zfany() {}
113 zfanyT(ZF_IN zfany const &obj) : zfany(obj) {}
114 zfanyT(ZF_IN zfanyT<T_ZFObjectBase> const &obj) : zfany((zfany const &)obj) {}
115 zfanyT(ZF_IN ZFObject *obj) : zfany(obj) {}
116 template<typename T_ZFObject>
117 zfanyT(ZF_IN T_ZFObject const &obj) : zfany(obj) {}
118
119public:
120 inline zfanyT<T_ZFObjectBase> &operator = (ZF_IN zfany const &obj) {
121 zfany::operator = (obj);
122 return *this;
123 }
124 inline zfanyT<T_ZFObjectBase> &operator = (ZF_IN zfanyT<T_ZFObjectBase> const &obj) {
125 zfany::operator = ((zfany const &)obj);
126 return *this;
127 }
128 template<typename T_ZFObject>
129 inline zfanyT<T_ZFObjectBase> &operator = (ZF_IN T_ZFObject const &obj) {
130 zfany::operator = (obj);
131 return *this;
132 }
133
134public:
135 template<typename T_ZFObject>
136 inline zfbool operator == (ZF_IN T_ZFObject const &obj) const {
137 return this->toObject() == _ZFP_zfanyCast(obj);
138 }
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
144public:
145 inline T_ZFObjectBase *operator -> (void) const {
146 return zfcast(T_ZFObjectBase *, this->toObject());
147 }
148
149public:
150 inline ZFObject *toObject(void) const { // required for _ZFP_zfanyCast to work
151 return zfany::toObject();
152 }
153
154public:
155 static const ZFClass *ClassData(void) {
156 return T_ZFObjectBase::ClassData();
157 }
159};
161
162// ============================================================
164template<typename T_ZFObject>
165inline zfbool operator == (ZF_IN T_ZFObject *obj, ZF_IN zfany const &e) {
166 return e.toObject() == _ZFP_zfanyCast(obj);
167}
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}
172
173// ============================================================
174template<typename T_ZFObject, typename T_ZFObjectBase>
175inline zfbool operator == (ZF_IN T_ZFObject *obj, ZF_IN zfanyT<T_ZFObjectBase> const &e) {
176 return e.toObject() == _ZFP_zfanyCast(obj);
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}
183
185#endif // #ifndef _ZFI_zfany_h_
186
#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:180
#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:95
ZFObject * toObject(void) const
get the holded object
Definition zfany.h:88
see zfany
Definition zfany.h:109
zfcast declarations
#define zfcast(T_To, obj)
safely cast ZFObject types, return null if not desired type
Definition zfcast.h:28