27#ifndef __PROPERTIES_H_INCLUDED_
28#define __PROPERTIES_H_INCLUDED_
38#pragma warning ( disable : 4702 )
56template <
class TBase = OdRxDictionary>
67 : m_pOwner(pOwner), m_pDescIter(pDescIter) {}
75 bool done()
const {
return m_pDescIter->
done(); }
108 pDesc->
prop_put((TBase*)
this, pObject);
146#define ODRX_DECLARE_DYNAMIC_PROPERTY_MAP(CLASS) \
147 virtual void generatePropMap(OdRxDictionary*) const;\
148 virtual OdRxDictionary* propertiesInfo() const
150#define ODRX_BEGIN_DYNAMIC_PROPERTY_MAP(CLASS) \
151void CLASS::generatePropMap(OdRxDictionary* pInfo) const {
153#if (defined(_MSC_VER) && (_MSC_VER > 1800)) || (defined(__cplusplus) && (__cplusplus > 199711L))
155#define ODRX_END_DYNAMIC_PROPERTY_MAP(CLASS) }\
156OdRxDictionary* CLASS::propertiesInfo() const\
158 static OdRxDictionaryPtr pInfo = createPropMap();\
164#define ODRX_END_DYNAMIC_PROPERTY_MAP(CLASS) }\
165static OdMutex _##CLASS##PropMapMutex;\
166OdRxDictionary* CLASS::propertiesInfo() const\
168 TD_AUTOLOCK(_##CLASS##PropMapMutex);\
169 static OdRxDictionaryPtr pInfo = createPropMap();\
175#define ODRX_INHERIT_PROPERTIES(BASE_CLASS) \
176 BASE_CLASS::generatePropMap(pInfo);
179#define ODRX_DECLARE_PROPERTY(PropName) \
180 class _##PropName##_PropDesc : public OdRxObjectImpl<OdRxPropDesc>\
183 static OdRxObjectPtr createObject();\
184 static inline OdString _name();\
185 OdString name() const;\
186 OdRxObjectPtr prop_get(const void* pThis) const;\
187 void prop_put(void* pThis, OdRxObject* pVal);\
190#define ODRX_DECLARE_PROPERTY2(PropName, SrcFileName) \
191 class _##PropName##_##SrcFileName##_PropDesc : public OdRxObjectImpl<OdRxPropDesc>\
194 static OdRxObjectPtr createObject();\
195 static inline OdString _name();\
196 OdString name() const;\
197 OdRxObjectPtr prop_get(const void* pThis) const;\
198 void prop_put(void* pThis, OdRxObject* pVal);\
201#define ODRX_DEFINE_PROPERTY_METHODS(PropName, PropHolder, getMethodName, putMethodName, accessFn) \
202 OdRxObjectPtr _##PropName##_PropDesc::createObject()\
204 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
206 inline OdString _##PropName##_PropDesc::_name()\
208 static OdString sName(OD_T(#PropName));\
211 OdString _##PropName##_PropDesc::name() const \
215 OdRxObjectPtr _##PropName##_PropDesc::prop_get(const void* pThis) const\
217 return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
219 void _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
221 (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
224#define ODRX_DEFINE_PROPERTY_METHODS2(PropName, SrcFileName, PropHolder, getMethodName, putMethodName, accessFn) \
225 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::createObject()\
227 return OdRxObjectPtr(new _##PropName##_##SrcFileName##_PropDesc, kOdRxObjAttach);\
229 inline OdString _##PropName##_##SrcFileName##_PropDesc::_name()\
231 static OdString sName(OD_T(#PropName));\
234 OdString _##PropName##_##SrcFileName##_PropDesc::name() const \
238 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::prop_get(const void* pThis) const\
240 return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
242 void _##PropName##_##SrcFileName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
244 (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
247#define ODRX_DEFINE_PROPERTY_METHODS_PREFIX(ClassPrefix, PropName, PropHolder, getMethodName, putMethodName, accessFn) \
248 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::createObject()\
250 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
252 inline OdString ClassPrefix _##PropName##_PropDesc::_name()\
254 static OdString sName(OD_T(#PropName));\
257 OdString ClassPrefix _##PropName##_PropDesc::name() const \
261 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::prop_get(const void* pThis) const\
263 return (OdRxObject*)OdRxVariantValue((static_cast<PropHolder*>((OdRxDictionary*)pThis))->getMethodName());\
265 void ClassPrefix _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
267 (static_cast<PropHolder*>((OdRxDictionary*)pThis))->putMethodName(OdRxVariantValue(pVal)->accessFn());\
270#define ODRX_GENERATE_PROPERTY(PropName) \
271 pInfo->putAt(_##PropName##_PropDesc::_name(), _##PropName##_PropDesc::createObject());
273#define ODRX_GENERATE_PROPERTY2(PropName, SrcFileName) \
274 pInfo->putAt(_##PropName##_##SrcFileName##_PropDesc::_name(), _##PropName##_##SrcFileName##_PropDesc::createObject());
276#define ODRX_DEFINE_PROPERTY(PropName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS(PropName, PropHolder, get_##PropName, put_##PropName, accessFn)
278#define ODRX_DEFINE_PROPERTY2(PropName, SrcFileName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS2(PropName, SrcFileName, PropHolder, get_##PropName, put_##PropName, accessFn)
280#define ODRX_DEFINE_PROPERTY_PREFIX(ClassPrefix, PropName, PropHolder, accessFn) ODRX_DEFINE_PROPERTY_METHODS_PREFIX(ClassPrefix, PropName, PropHolder, get_##PropName, put_##PropName, accessFn)
284#define ODRX_DEFINE_PROPERTY_OBJECT(PropName, PropHolder, getMethodName, putMethodName, ObjType) \
285 OdRxObjectPtr _##PropName##_PropDesc::createObject()\
287 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
289 OdString _##PropName##_PropDesc::_name()\
291 static OdString sName(OD_T(#PropName));\
294 OdString _##PropName##_PropDesc::name() const \
298 OdRxObjectPtr _##PropName##_PropDesc::prop_get(const void* pThis) const\
300 return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
302 void _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
304 static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
307#define ODRX_DEFINE_PROPERTY_OBJECT2(PropName, SrcFileName, PropHolder, getMethodName, putMethodName, ObjType) \
308 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::createObject()\
310 return OdRxObjectPtr(new _##PropName##_##SrcFileName##_PropDesc, kOdRxObjAttach);\
312 OdString _##PropName##_##SrcFileName##_PropDesc::_name()\
314 static OdString sName(OD_T(#PropName));\
317 OdString _##PropName##_##SrcFileName##_PropDesc::name() const \
321 OdRxObjectPtr _##PropName##_##SrcFileName##_PropDesc::prop_get(const void* pThis) const\
323 return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
325 void _##PropName##_##SrcFileName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
327 static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
330#define ODRX_DEFINE_PROPERTY_OBJECT_PREFIX(ClassPrefix, PropName, PropHolder, getMethodName, putMethodName, ObjType) \
331 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::createObject()\
333 return OdRxObjectPtr(new _##PropName##_PropDesc, kOdRxObjAttach);\
335 OdString ClassPrefix _##PropName##_PropDesc::_name()\
337 static OdString sName(OD_T(#PropName));\
340 OdString ClassPrefix _##PropName##_PropDesc::name() const \
344 OdRxObjectPtr ClassPrefix _##PropName##_PropDesc::prop_get(const void* pThis) const\
346 return static_cast<PropHolder*>((OdRxDictionary*)pThis)->getMethodName();\
348 void ClassPrefix _##PropName##_PropDesc::prop_put(void* pThis, OdRxObject* pVal)\
350 static_cast<PropHolder*>((OdRxDictionary*)pThis)->putMethodName(OdSmartPtr<ObjType>(pVal));\
375 operator const Type&()
const
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
virtual 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 &)
OdRxObjectPtr putAt(const OdString &key, OdRxObject *pObject, OdUInt32 *=0)
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
virtual bool done() const =0
static OdSmartPtr< OdRxDictionaryIterator > createObject()
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