CFx SDK Documentation
2020SP3
|
Go to the documentation of this file.
27 #ifndef __PROPERTIES_H_INCLUDED_
28 #define __PROPERTIES_H_INCLUDED_
38 #pragma warning ( disable : 4702 ) // unreachable code
56 template <
class TBase = OdRxDictionary>
67 : m_pOwner(pOwner), m_pDescIter(pDescIter) {}
75 bool done()
const {
return m_pDescIter->
done(); }
98 pDesc->
prop_put((TBase*)
this, pObject);
136 #define ODRX_DECLARE_DYNAMIC_PROPERTY_MAP(CLASS) \
137 virtual void generatePropMap(OdRxDictionary*) const;\
138 virtual OdRxDictionary* propertiesInfo() const
140 #define ODRX_BEGIN_DYNAMIC_PROPERTY_MAP(CLASS) \
141 void CLASS::generatePropMap(OdRxDictionary* pInfo) const {
143 #define ODRX_END_DYNAMIC_PROPERTY_MAP(CLASS) }\
144 OdRxDictionary* CLASS::propertiesInfo() const\
146 static OdRxDictionaryPtr pInfo;\
149 pInfo = ::odrxCreateRxDictionary();\
150 generatePropMap(pInfo);\
155 #define ODRX_INHERIT_PROPERTIES(BASE_CLASS) \
156 BASE_CLASS::generatePropMap(pInfo);
159 #define ODRX_DECLARE_PROPERTY(PropName) \
160 class _##PropName##_PropDesc : public OdRxObjectImpl<OdRxPropDesc>\
163 static OdRxObjectPtr createObject();\
164 static inline OdString _name();\
165 OdString name() const;\
166 OdRxObjectPtr prop_get(const void* pThis) const;\
167 void prop_put(void* pThis, OdRxObject* pVal);\
170 #define ODRX_DECLARE_PROPERTY2(PropName, SrcFileName) \
171 class _##PropName##_##SrcFileName##_PropDesc : public OdRxObjectImpl<OdRxPropDesc>\
174 static OdRxObjectPtr createObject();\
175 static inline OdString _name();\
176 OdString name() const;\
177 OdRxObjectPtr prop_get(const void* pThis) const;\
178 void prop_put(void* pThis, OdRxObject* pVal);\
181 #define ODRX_DEFINE_PROPERTY_METHODS(PropName, PropHolder, getMethodName, putMethodName, accessFn) \
182 OdRxObjectPtr _##PropName##_PropDesc::createObject()\
184 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
186 inline OdString _##PropName##_PropDesc::_name()\
188 static OdString sName(OD_T(#PropName));\
191 OdString _##PropName##_PropDesc::name() const \
195 OdRxObjectPtr _##PropName##_PropDesc::prop_get(const void* pThis) const\
197 return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
199 void _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
201 (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
204 #define ODRX_DEFINE_PROPERTY_METHODS2(PropName, SrcFileName, PropHolder, getMethodName, putMethodName, accessFn) \
205 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::createObject()\
207 return OdRxObjectPtr(new _##PropName##_##SrcFileName##_PropDesc, kOdRxObjAttach);\
209 inline OdString _##PropName##_##SrcFileName##_PropDesc::_name()\
211 static OdString sName(OD_T(#PropName));\
214 OdString _##PropName##_##SrcFileName##_PropDesc::name() const \
218 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::prop_get(const void* pThis) const\
220 return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
222 void _##PropName##_##SrcFileName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
224 (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
227 #define ODRX_DEFINE_PROPERTY_METHODS_PREFIX(ClassPrefix, PropName, PropHolder, getMethodName, putMethodName, accessFn) \
228 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::createObject()\
230 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
232 inline OdString ClassPrefix _##PropName##_PropDesc::_name()\
234 static OdString sName(OD_T(#PropName));\
237 OdString ClassPrefix _##PropName##_PropDesc::name() const \
241 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::prop_get(const void* pThis) const\
243 return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
245 void ClassPrefix _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
247 (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
250 #define ODRX_GENERATE_PROPERTY(PropName) \
251 pInfo->putAt(_##PropName##_PropDesc::_name(), _##PropName##_PropDesc::createObject());
253 #define ODRX_GENERATE_PROPERTY2(PropName, SrcFileName) \
254 pInfo->putAt(_##PropName##_##SrcFileName##_PropDesc::_name(), _##PropName##_##SrcFileName##_PropDesc::createObject());
256 #define ODRX_DEFINE_PROPERTY(PropName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS(PropName, PropHolder, get_##PropName, put_##PropName, accessFn)
258 #define ODRX_DEFINE_PROPERTY2(PropName, SrcFileName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS2(PropName, SrcFileName, PropHolder, get_##PropName, put_##PropName, accessFn)
260 #define ODRX_DEFINE_PROPERTY_PREFIX(ClassPrefix, PropName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS_PREFIX(ClassPrefix, PropName, PropHolder, get_##PropName, put_##PropName, accessFn)
264 #define ODRX_DEFINE_PROPERTY_OBJECT(PropName, PropHolder, getMethodName, putMethodName, ObjType) \
265 OdRxObjectPtr _##PropName##_PropDesc::createObject()\
267 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
269 OdString _##PropName##_PropDesc::_name()\
271 static OdString sName(OD_T(#PropName));\
274 OdString _##PropName##_PropDesc::name() const \
278 OdRxObjectPtr _##PropName##_PropDesc::prop_get(const void* pThis) const\
280 return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
282 void _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
284 static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
287 #define ODRX_DEFINE_PROPERTY_OBJECT2(PropName, SrcFileName, PropHolder, getMethodName, putMethodName, ObjType) \
288 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::createObject()\
290 return OdRxObjectPtr(new _##PropName##_##SrcFileName##_PropDesc, kOdRxObjAttach);\
292 OdString _##PropName##_##SrcFileName##_PropDesc::_name()\
294 static OdString sName(OD_T(#PropName));\
297 OdString _##PropName##_##SrcFileName##_PropDesc::name() const \
301 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::prop_get(const void* pThis) const\
303 return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
305 void _##PropName##_##SrcFileName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
307 static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
310 #define ODRX_DEFINE_PROPERTY_OBJECT_PREFIX(ClassPrefix, PropName, PropHolder, getMethodName, putMethodName, ObjType) \
311 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::createObject()\
313 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
315 OdString ClassPrefix _##PropName##_PropDesc::_name()\
317 static OdString sName(OD_T(#PropName));\
320 OdString ClassPrefix _##PropName##_PropDesc::name() const \
324 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::prop_get(const void* pThis) const\
326 return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
328 void ClassPrefix _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
330 static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
335 #endif // __PROPERTIES_H_INCLUDED_
Iterator(OdRxDictionary *pOwner, OdRxDictionaryIterator *pDescIter)
OdSmartPtr< OdRxDictionaryIterator > OdRxDictionaryIteratorPtr
virtual bool isCaseSensitive() const =0
virtual OdUInt32 id() const =0
PropDesc * descAt(OdUInt32 id) const
virtual bool has(const OdString &key) const =0
GLuint GLsizei GLsizei GLint GLenum * type
OdUInt32 numEntries() const
OdString keyAt(OdUInt32 id) const
OdRxDictionaryIteratorPtr newIterator(OdRx::DictIterType type=OdRx::kDictCollated)
virtual void prop_put(void *pThis, OdRxObject *pVal)=0
OdRxObjectPtr object() const
virtual OdUInt32 idAt(const OdString &key) const =0
bool resetKey(OdUInt32, const OdString &)
virtual OdRxObjectPtr getAt(const OdString &key) const =0
bool has(const OdString &entryName) const
OdUInt32 idAt(const OdString &key) const
virtual OdString name() const =0
OdRxObjectPtr remove(OdUInt32)
virtual OdString keyAt(OdUInt32 id) const =0
static OdSmartPtr< OdRxDictionaryIterator > createObject()
bool isCaseSensitive() const
static OdRxDictionaryIteratorPtr createObject(OdRxDictionary *pOwner, OdRxDictionaryIterator *pDescIter)
virtual bool done() const =0
OdRxObjectPtr remove(const OdString &)
OdRxObjectPtr getAt(OdUInt32 id) const
bool has(OdUInt32 id) const
bool atKeyAndIdPut(const OdString &, OdUInt32, OdRxObject *)
OdRxObjectPtr putAt(OdUInt32 id, OdRxObject *pObject)
virtual OdUInt32 numEntries() const =0
virtual OdRxDictionary * propertiesInfo() const =0
virtual OdRxObjectPtr prop_get(const void *pThis) const =0
OdRxObjectPtr getAt(const OdString &key) const
OdRxObjectPtr putAt(const OdString &key, OdRxObject *pObject, OdUInt32 *=0)