5#if !defined(CXOBJECT_INCLUDE_H)
6#define CXOBJECT_INCLUDE_H
12BEGIN_MOOTOOLS_NAMESPACE
14 void ReleaseXRuntimeObject();
20 typedef const CXRuntimeClass * CXRuntimeClassPtr;
21 typedef const CXObject * CXObjectPtr;
22 struct DLL_TOOLSFUNCTION CXRuntimeClass
26 FLAGS_NOT_SERIALIZABLE = 0x10000000,
27 FLAGS_SUPPORT_OLD_VERSION = 0x20000000,
28 FLAGS_RESERVED_FLAGS = 0xFF000000,
33 const size_t classSizeof;
34 const unsigned int classVersion;
35 const CXRuntimeClassPtr baseClass;
36 CXObject* (*pfnCreateObject)();
43 CXObject *CreateObject()
const;
44 bool IsDerivedFrom(CXRuntimeClassPtr
pBaseClass)
const;
45 static bool DeclareRuntimeClass(CXRuntimeClassPtr
runtimeClass);
48#ifndef MOOTOOLS_NO_ARCHIVE_SUPPORT
49 bool IsSerializable()
const;
59 class DLL_TOOLSFUNCTION
NOVTABLE CXObject
61 friend CXRuntimeClass;
66 virtual CXRuntimeClassPtr GetRuntimeClassDescriptor()
const;
68 bool IsKindOf(
const CXRuntimeClassPtr
runtimeClass)
const;
71 virtual void Dump()
const;
74 static const CXRuntimeClass classCreatorCXObject;
75 static const CXRuntimeClassPtr GetThisRuntimeClassDescriptor();
82 void operator=(
const CXObject&
objectSrc);
86 inline CXObject::CXObject()
90 #define IS_XRUNTIMECLASS_FLAG_SET(version, flag, set) (!!(version & flag) == set)
91 #define GET_XRUNTIMECLASS_VERSION(version) (version & ~CXRuntimeClass::FLAGS_RESERVED_FLAGS)
92 #define XOBJECT_VERSIONABLE (CXRuntimeClass::FLAGS_SUPPORT_OLD_VERSION)
93 #define XASSERT_KINDOF(class_name, object) \
94 XASSERT((object)->IsKindOf(XRUNTIME_CLASS(class_name)))
97 #define XRUNTIME_CLASS(object) (object::GetThisRuntimeClassDescriptor())
98 #define DECLARE_XRUNTIMECLASS(object) \
100 static const CXRuntimeClass classCreator##object; \
101 static const CXRuntimeClassPtr GetThisRuntimeClassDescriptor(); \
102 virtual CXRuntimeClassPtr GetRuntimeClassDescriptor() const \
104 return XRUNTIME_CLASS(object); \
107 #define DECLARE_DYNCREATE_XRUNTIMECLASS(object) \
108 DECLARE_XRUNTIMECLASS(object) \
109 static CXObject *CreateObject();
110 #define DECLARE_SERIAL_XRUNTIMECLASS(object) \
111 DECLARE_XRUNTIMECLASS(object) \
112 static CXObject *CreateObject();
115 #define IMPLEMENT_XRUNTIMECLASS(object, baseObject, serializeVersion, createObject) \
116 const CXRuntimeClass object::classCreator##object = \
117 { #object, sizeof(object), serializeVersion, &baseObject::classCreator##baseObject, createObject}; \
118 const bool classDeclared##object = CXRuntimeClass::DeclareRuntimeClass(&object::classCreator##object);
120 #define IMPLEMENT_DYNAMIC_XOBJECT(object, baseObject) \
121 const CXRuntimeClassPtr object::GetThisRuntimeClassDescriptor() { return &object::classCreator##object; } \
122 IMPLEMENT_XRUNTIMECLASS(object, baseObject, CXRuntimeClass::FLAGS_NOT_SERIALIZABLE, NULL)
124 #define IMPLEMENT_DYNCREATE_XOBJECT(object, baseObject) \
125 CXObject *object::CreateObject() \
127 return xNew(object); \
129 const CXRuntimeClassPtr object::GetThisRuntimeClassDescriptor() { return &object::classCreator##object; } \
130 IMPLEMENT_XRUNTIMECLASS(object, baseObject, CXRuntimeClass::FLAGS_NOT_SERIALIZABLE, object::CreateObject)
132 #define IMPLEMENT_SERIAL_XOBJECT(object, baseObject, serializeVersion) \
133 CXObject *object::CreateObject() \
135 return xNew(object); \
137 const CXRuntimeClassPtr object::GetThisRuntimeClassDescriptor() { return &object::classCreator##object; } \
138 IMPLEMENT_XRUNTIMECLASS(object, baseObject, serializeVersion, object::CreateObject)
140 #define DECLARE_DYNAMIC_XOBJECT DECLARE_XRUNTIMECLASS
141 #define DECLARE_DYNCREATE_XOBJECT DECLARE_DYNCREATE_XRUNTIMECLASS
142 #define DECLARE_SERIAL_XOBJECT DECLARE_SERIAL_XRUNTIMECLASS
144END_MOOTOOLS_NAMESPACE
The class defines an x, y, z 3D point which can use int, float or double.
Definition 3DPoint.h:27