27#ifndef __PROPERTIES_H_INCLUDED_
28#define __PROPERTIES_H_INCLUDED_
45 virtual void prop_put(
void* pThis, OdRxObject* pVal) = 0;
52template <
class TBase = OdRxDictionary>
57 class Iterator :
public OdRxObjectImpl<OdRxDictionaryIterator>
63 : m_pOwner(pOwner), m_pDescIter(pDescIter) {}
71 bool done()
const {
return m_pDescIter->done(); }
72 bool next() {
return m_pDescIter->next(); }
102 PropDesc* pd =
descAt(
id);
112 PropDesc* pDesc =
descAt(
id);
114 pDesc->
prop_put((TBase*)
this, pObject);
152#define ODRX_DECLARE_DYNAMIC_PROPERTY_MAP(CLASS) \
153 virtual void generatePropMap(OdRxDictionary*) const;\
154 virtual OdRxDictionary* propertiesInfo() const
156#define ODRX_BEGIN_DYNAMIC_PROPERTY_MAP(CLASS) \
157void CLASS::generatePropMap(OdRxDictionary* pInfo) const {
159#if (defined(_MSC_VER) && (_MSC_VER > 1800)) || (defined(__cplusplus) && (__cplusplus > 199711L))
161#define ODRX_END_DYNAMIC_PROPERTY_MAP(CLASS) }\
162OdRxDictionary* CLASS::propertiesInfo() const\
164 static OdRxDictionaryPtr pInfo = createPropMap();\
170#define ODRX_END_DYNAMIC_PROPERTY_MAP(CLASS) }\
171static OdMutex _##CLASS##PropMapMutex;\
172OdRxDictionary* CLASS::propertiesInfo() const\
174 TD_AUTOLOCK(_##CLASS##PropMapMutex);\
175 static OdRxDictionaryPtr pInfo = createPropMap();\
181#define ODRX_INHERIT_PROPERTIES(BASE_CLASS) \
182 BASE_CLASS::generatePropMap(pInfo);
185#define ODRX_DECLARE_PROPERTY(PropName) \
186 class _##PropName##_PropDesc : public OdRxObjectImpl<OdRxPropDesc>\
189 static OdRxObjectPtr createObject();\
190 static inline OdString _name();\
191 OdString name() const;\
192 OdRxObjectPtr prop_get(const void* pThis) const;\
193 void prop_put(void* pThis, OdRxObject* pVal);\
196#define ODRX_DECLARE_PROPERTY2(PropName, SrcFileName) \
197 class _##PropName##_##SrcFileName##_PropDesc : public OdRxObjectImpl<OdRxPropDesc>\
200 static OdRxObjectPtr createObject();\
201 static inline OdString _name();\
202 OdString name() const;\
203 OdRxObjectPtr prop_get(const void* pThis) const;\
204 void prop_put(void* pThis, OdRxObject* pVal);\
207#define ODRX_DEFINE_PROPERTY_METHODS(PropName, PropHolder, getMethodName, putMethodName, accessFn) \
208 OdRxObjectPtr _##PropName##_PropDesc::createObject()\
210 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
212 inline OdString _##PropName##_PropDesc::_name()\
214 static OdString sName(OD_T(#PropName));\
217 OdString _##PropName##_PropDesc::name() const \
221 OdRxObjectPtr _##PropName##_PropDesc::prop_get(const void* pThis) const\
223 return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
225 void _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
227 (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
230#define ODRX_DEFINE_PROPERTY_METHODS2(PropName, SrcFileName, PropHolder, getMethodName, putMethodName, accessFn) \
231 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::createObject()\
233 return OdRxObjectPtr(new _##PropName##_##SrcFileName##_PropDesc, kOdRxObjAttach);\
235 inline OdString _##PropName##_##SrcFileName##_PropDesc::_name()\
237 static OdString sName(OD_T(#PropName));\
240 OdString _##PropName##_##SrcFileName##_PropDesc::name() const \
244 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::prop_get(const void* pThis) const\
246 return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
248 void _##PropName##_##SrcFileName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
250 (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
253#define ODRX_DEFINE_PROPERTY_METHODS_PREFIX(ClassPrefix, PropName, PropHolder, getMethodName, putMethodName, accessFn) \
254 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::createObject()\
256 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
258 inline OdString ClassPrefix _##PropName##_PropDesc::_name()\
260 static OdString sName(OD_T(#PropName));\
263 OdString ClassPrefix _##PropName##_PropDesc::name() const \
267 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::prop_get(const void* pThis) const\
269 return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
271 void ClassPrefix _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
273 (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
276#define ODRX_GENERATE_PROPERTY(PropName) \
277 pInfo->putAt(_##PropName##_PropDesc::_name(), _##PropName##_PropDesc::createObject());
279#define ODRX_GENERATE_PROPERTY2(PropName, SrcFileName) \
280 pInfo->putAt(_##PropName##_##SrcFileName##_PropDesc::_name(), _##PropName##_##SrcFileName##_PropDesc::createObject());
282#define ODRX_DEFINE_PROPERTY(PropName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS(PropName, PropHolder, get_##PropName, put_##PropName, accessFn)
284#define ODRX_DEFINE_PROPERTY2(PropName, SrcFileName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS2(PropName, SrcFileName, PropHolder, get_##PropName, put_##PropName, accessFn)
286#define ODRX_DEFINE_PROPERTY_PREFIX(ClassPrefix, PropName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS_PREFIX(ClassPrefix, PropName, PropHolder, get_##PropName, put_##PropName, accessFn)
290#define ODRX_DEFINE_PROPERTY_OBJECT(PropName, PropHolder, getMethodName, putMethodName, ObjType) \
291 OdRxObjectPtr _##PropName##_PropDesc::createObject()\
293 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
295 OdString _##PropName##_PropDesc::_name()\
297 static OdString sName(OD_T(#PropName));\
300 OdString _##PropName##_PropDesc::name() const \
304 OdRxObjectPtr _##PropName##_PropDesc::prop_get(const void* pThis) const\
306 return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
308 void _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
310 static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
313#define ODRX_DEFINE_PROPERTY_OBJECT2(PropName, SrcFileName, PropHolder, getMethodName, putMethodName, ObjType) \
314 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::createObject()\
316 return OdRxObjectPtr(new _##PropName##_##SrcFileName##_PropDesc, kOdRxObjAttach);\
318 OdString _##PropName##_##SrcFileName##_PropDesc::_name()\
320 static OdString sName(OD_T(#PropName));\
323 OdString _##PropName##_##SrcFileName##_PropDesc::name() const \
327 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::prop_get(const void* pThis) const\
329 return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
331 void _##PropName##_##SrcFileName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
333 static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
336#define ODRX_DEFINE_PROPERTY_OBJECT_PREFIX(ClassPrefix, PropName, PropHolder, getMethodName, putMethodName, ObjType) \
337 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::createObject()\
339 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
341 OdString ClassPrefix _##PropName##_PropDesc::_name()\
343 static OdString sName(OD_T(#PropName));\
346 OdString ClassPrefix _##PropName##_PropDesc::name() const \
350 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::prop_get(const void* pThis) const\
352 return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
354 void ClassPrefix _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
356 static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
381 operator const Type&()
const
OdSmartPtr< OdRxDictionary > OdRxDictionaryPtr
OdSmartPtr< OdRxDictionaryIterator > OdRxDictionaryIteratorPtr
FIRSTDLL_EXPORT OdRxDictionaryPtr odrxCreateRxDictionary()
OdRxWrapperValue< T > createRxWrapper(const T &val)
virtual OdUInt32 idAt(const OdString &key) const =0
virtual OdRxObjectPtr getAt(const OdString &key) const =0
virtual bool isCaseSensitive() const =0
virtual OdUInt32 numEntries() const =0
virtual bool has(const OdString &key) const =0
virtual OdString keyAt(OdUInt32 id) const =0
static OdRxDictionaryIteratorPtr createObject(OdRxDictionary *pOwner, OdRxDictionaryIterator *pDescIter)
Iterator(OdRxDictionary *pOwner, OdRxDictionaryIterator *pDescIter)
OdRxObjectPtr object() const
OdRxObjectPtr getAt(const OdString &key) const
OdRxDictionaryIteratorPtr newIterator(OdRx::DictIterType type=OdRx::kDictCollated)
OdUInt32 numEntries() const
OdRxDictionaryPtr createPropMap() const
OdRxObjectPtr remove(const OdString &)
bool resetKey(OdUInt32, const OdString &)
bool atKeyAndIdPut(const OdString &, OdUInt32, OdRxObject *)
virtual void generatePropMap(OdRxDictionary *) const =0
bool has(OdUInt32 id) const
OdRxObjectPtr getAt(OdUInt32 id) const
bool has(const OdString &entryName) const
OdRxObjectPtr remove(OdUInt32)
bool isCaseSensitive() const
OdUInt32 idAt(const OdString &key) const
virtual OdRxDictionary * propertiesInfo() const =0
OdRxObjectPtr putAt(OdUInt32 id, OdRxObject *pObject)
OdString keyAt(OdUInt32 id) const
PropDesc * descAt(OdUInt32 id) const
OdRxObjectPtr putAt(const OdString &key, OdRxObject *pObject, OdUInt32 *pId=0)
virtual void prop_put(void *pThis, OdRxObject *pVal)=0
virtual OdString name() const =0
virtual OdRxObjectPtr prop_get(const void *pThis) const =0
OdRxWrapperValue(const Type &val)
OdRxWrapperValue(const OdRxObjectPtr &pObject)
const OdRxWrapper< Type > * get() const
GLuint GLsizei GLsizei GLint GLenum * type