|
@@ -13,51 +13,51 @@ JPH_NAMESPACE_BEGIN
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// JPH_DECLARE_SERIALIZATION_FUNCTIONS
|
|
|
-#define JPH_DECLARE_SERIALIZATION_FUNCTIONS(prefix, class_name) \
|
|
|
- prefix bool OSReadData(IObjectStreamIn &ioStream, class_name &inInstance); \
|
|
|
- prefix bool OSReadData(IObjectStreamIn &ioStream, class_name *&inPointer); \
|
|
|
- prefix bool OSIsType(class_name *, int inArrayDepth, EOSDataType inDataType, const char *inClassName); \
|
|
|
- prefix bool OSIsType(class_name **, int inArrayDepth, EOSDataType inDataType, const char *inClassName); \
|
|
|
- prefix void OSWriteData(IObjectStreamOut &ioStream, const class_name &inInstance); \
|
|
|
- prefix void OSWriteData(IObjectStreamOut &ioStream, class_name *const &inPointer); \
|
|
|
- prefix void OSWriteDataType(IObjectStreamOut &ioStream, class_name *); \
|
|
|
- prefix void OSWriteDataType(IObjectStreamOut &ioStream, class_name **);
|
|
|
+#define JPH_DECLARE_SERIALIZATION_FUNCTIONS(linkage, prefix, class_name) \
|
|
|
+ linkage prefix bool OSReadData(IObjectStreamIn &ioStream, class_name &inInstance); \
|
|
|
+ linkage prefix bool OSReadData(IObjectStreamIn &ioStream, class_name *&inPointer); \
|
|
|
+ linkage prefix bool OSIsType(class_name *, int inArrayDepth, EOSDataType inDataType, const char *inClassName); \
|
|
|
+ linkage prefix bool OSIsType(class_name **, int inArrayDepth, EOSDataType inDataType, const char *inClassName); \
|
|
|
+ linkage prefix void OSWriteData(IObjectStreamOut &ioStream, const class_name &inInstance); \
|
|
|
+ linkage prefix void OSWriteData(IObjectStreamOut &ioStream, class_name *const &inPointer); \
|
|
|
+ linkage prefix void OSWriteDataType(IObjectStreamOut &ioStream, class_name *); \
|
|
|
+ linkage prefix void OSWriteDataType(IObjectStreamOut &ioStream, class_name **);
|
|
|
|
|
|
// JPH_IMPLEMENT_SERIALIZATION_FUNCTIONS
|
|
|
#define JPH_IMPLEMENT_SERIALIZATION_FUNCTIONS(class_name) \
|
|
|
- bool OSReadData(IObjectStreamIn &ioStream, class_name &inInstance) \
|
|
|
+ bool OSReadData(IObjectStreamIn &ioStream, class_name &inInstance) \
|
|
|
{ \
|
|
|
return ioStream.ReadClassData(#class_name, (void *)&inInstance); \
|
|
|
} \
|
|
|
- bool OSReadData(IObjectStreamIn &ioStream, class_name *&inPointer) \
|
|
|
+ bool OSReadData(IObjectStreamIn &ioStream, class_name *&inPointer) \
|
|
|
{ \
|
|
|
return ioStream.ReadPointerData(JPH_RTTI(class_name), (void **)&inPointer); \
|
|
|
} \
|
|
|
- bool OSIsType(class_name *, int inArrayDepth, EOSDataType inDataType, const char *inClassName) \
|
|
|
+ bool OSIsType(class_name *, int inArrayDepth, EOSDataType inDataType, const char *inClassName) \
|
|
|
{ \
|
|
|
return inArrayDepth == 0 && inDataType == EOSDataType::Instance && strcmp(inClassName, #class_name) == 0; \
|
|
|
} \
|
|
|
- bool OSIsType(class_name **, int inArrayDepth, EOSDataType inDataType, const char *inClassName) \
|
|
|
+ bool OSIsType(class_name **, int inArrayDepth, EOSDataType inDataType, const char *inClassName) \
|
|
|
{ \
|
|
|
return inArrayDepth == 0 && inDataType == EOSDataType::Pointer && strcmp(inClassName, #class_name) == 0; \
|
|
|
} \
|
|
|
- void OSWriteData(IObjectStreamOut &ioStream, const class_name &inInstance) \
|
|
|
+ void OSWriteData(IObjectStreamOut &ioStream, const class_name &inInstance) \
|
|
|
{ \
|
|
|
ioStream.WriteClassData(JPH_RTTI(class_name), (void *)&inInstance); \
|
|
|
} \
|
|
|
- void OSWriteData(IObjectStreamOut &ioStream, class_name *const &inPointer) \
|
|
|
+ void OSWriteData(IObjectStreamOut &ioStream, class_name *const &inPointer) \
|
|
|
{ \
|
|
|
if (inPointer) \
|
|
|
ioStream.WritePointerData(GetRTTI(inPointer), (void *)inPointer); \
|
|
|
else \
|
|
|
ioStream.WritePointerData(nullptr, nullptr); \
|
|
|
} \
|
|
|
- void OSWriteDataType(IObjectStreamOut &ioStream, class_name *) \
|
|
|
+ void OSWriteDataType(IObjectStreamOut &ioStream, class_name *) \
|
|
|
{ \
|
|
|
ioStream.WriteDataType(EOSDataType::Instance); \
|
|
|
ioStream.WriteName(#class_name); \
|
|
|
} \
|
|
|
- void OSWriteDataType(IObjectStreamOut &ioStream, class_name **) \
|
|
|
+ void OSWriteDataType(IObjectStreamOut &ioStream, class_name **) \
|
|
|
{ \
|
|
|
ioStream.WriteDataType(EOSDataType::Pointer); \
|
|
|
ioStream.WriteName(#class_name); \
|
|
@@ -68,10 +68,10 @@ JPH_NAMESPACE_BEGIN
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// JPH_DECLARE_SERIALIZABLE_NON_VIRTUAL
|
|
|
-#define JPH_DECLARE_SERIALIZABLE_NON_VIRTUAL(class_name) \
|
|
|
+#define JPH_DECLARE_SERIALIZABLE_NON_VIRTUAL(linkage, class_name) \
|
|
|
public: \
|
|
|
- JPH_DECLARE_RTTI_NON_VIRTUAL(class_name) \
|
|
|
- JPH_DECLARE_SERIALIZATION_FUNCTIONS(friend, class_name) \
|
|
|
+ JPH_DECLARE_RTTI_NON_VIRTUAL(linkage, class_name) \
|
|
|
+ JPH_DECLARE_SERIALIZATION_FUNCTIONS(linkage, friend, class_name) \
|
|
|
|
|
|
// JPH_IMPLEMENT_SERIALIZABLE_NON_VIRTUAL
|
|
|
#define JPH_IMPLEMENT_SERIALIZABLE_NON_VIRTUAL(class_name) \
|
|
@@ -83,9 +83,9 @@ public: \
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// JPH_DECLARE_SERIALIZABLE_OUTSIDE_CLASS
|
|
|
-#define JPH_DECLARE_SERIALIZABLE_OUTSIDE_CLASS(class_name) \
|
|
|
- JPH_DECLARE_RTTI_OUTSIDE_CLASS(class_name) \
|
|
|
- JPH_DECLARE_SERIALIZATION_FUNCTIONS(extern, class_name) \
|
|
|
+#define JPH_DECLARE_SERIALIZABLE_OUTSIDE_CLASS(linkage, class_name) \
|
|
|
+ JPH_DECLARE_RTTI_OUTSIDE_CLASS(linkage, class_name) \
|
|
|
+ JPH_DECLARE_SERIALIZATION_FUNCTIONS(linkage, extern, class_name) \
|
|
|
|
|
|
// JPH_IMPLEMENT_SERIALIZABLE_OUTSIDE_CLASS
|
|
|
#define JPH_IMPLEMENT_SERIALIZABLE_OUTSIDE_CLASS(class_name) \
|
|
@@ -97,10 +97,10 @@ public: \
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
// JPH_DECLARE_SERIALIZABLE_VIRTUAL - Use for concrete, non-base classes
|
|
|
-#define JPH_DECLARE_SERIALIZABLE_VIRTUAL(class_name) \
|
|
|
+#define JPH_DECLARE_SERIALIZABLE_VIRTUAL(linkage, class_name) \
|
|
|
public: \
|
|
|
- JPH_DECLARE_RTTI_VIRTUAL(class_name) \
|
|
|
- JPH_DECLARE_SERIALIZATION_FUNCTIONS(friend, class_name) \
|
|
|
+ JPH_DECLARE_RTTI_VIRTUAL(linkage, class_name) \
|
|
|
+ JPH_DECLARE_SERIALIZATION_FUNCTIONS(linkage, friend, class_name) \
|
|
|
|
|
|
// JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL
|
|
|
#define JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL(class_name) \
|
|
@@ -108,10 +108,10 @@ public: \
|
|
|
JPH_IMPLEMENT_RTTI_VIRTUAL(class_name) \
|
|
|
|
|
|
// JPH_DECLARE_SERIALIZABLE_ABSTRACT - Use for abstract, non-base classes
|
|
|
-#define JPH_DECLARE_SERIALIZABLE_ABSTRACT(class_name) \
|
|
|
+#define JPH_DECLARE_SERIALIZABLE_ABSTRACT(linkage, class_name) \
|
|
|
public: \
|
|
|
- JPH_DECLARE_RTTI_ABSTRACT(class_name) \
|
|
|
- JPH_DECLARE_SERIALIZATION_FUNCTIONS(friend, class_name) \
|
|
|
+ JPH_DECLARE_RTTI_ABSTRACT(linkage, class_name) \
|
|
|
+ JPH_DECLARE_SERIALIZATION_FUNCTIONS(linkage, friend, class_name) \
|
|
|
|
|
|
// JPH_IMPLEMENT_SERIALIZABLE_ABSTRACT
|
|
|
#define JPH_IMPLEMENT_SERIALIZABLE_ABSTRACT(class_name) \
|
|
@@ -119,10 +119,10 @@ public: \
|
|
|
JPH_IMPLEMENT_RTTI_ABSTRACT(class_name) \
|
|
|
|
|
|
// JPH_DECLARE_SERIALIZABLE_VIRTUAL_BASE - Use for concrete base classes
|
|
|
-#define JPH_DECLARE_SERIALIZABLE_VIRTUAL_BASE(class_name) \
|
|
|
+#define JPH_DECLARE_SERIALIZABLE_VIRTUAL_BASE(linkage, class_name) \
|
|
|
public: \
|
|
|
- JPH_DECLARE_RTTI_VIRTUAL_BASE(class_name) \
|
|
|
- JPH_DECLARE_SERIALIZATION_FUNCTIONS(friend, class_name) \
|
|
|
+ JPH_DECLARE_RTTI_VIRTUAL_BASE(linkage, class_name) \
|
|
|
+ JPH_DECLARE_SERIALIZATION_FUNCTIONS(linkage, friend, class_name) \
|
|
|
|
|
|
// JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL_BASE
|
|
|
#define JPH_IMPLEMENT_SERIALIZABLE_VIRTUAL_BASE(class_name) \
|
|
@@ -130,10 +130,10 @@ public: \
|
|
|
JPH_IMPLEMENT_RTTI_VIRTUAL_BASE(class_name) \
|
|
|
|
|
|
// JPH_DECLARE_SERIALIZABLE_ABSTRACT_BASE - Use for abstract base class
|
|
|
-#define JPH_DECLARE_SERIALIZABLE_ABSTRACT_BASE(class_name) \
|
|
|
+#define JPH_DECLARE_SERIALIZABLE_ABSTRACT_BASE(linkage, class_name) \
|
|
|
public: \
|
|
|
- JPH_DECLARE_RTTI_ABSTRACT_BASE(class_name) \
|
|
|
- JPH_DECLARE_SERIALIZATION_FUNCTIONS(friend, class_name) \
|
|
|
+ JPH_DECLARE_RTTI_ABSTRACT_BASE(linkage, class_name) \
|
|
|
+ JPH_DECLARE_SERIALIZATION_FUNCTIONS(linkage, friend, class_name) \
|
|
|
|
|
|
// JPH_IMPLEMENT_SERIALIZABLE_ABSTRACT_BASE
|
|
|
#define JPH_IMPLEMENT_SERIALIZABLE_ABSTRACT_BASE(class_name) \
|
|
@@ -143,9 +143,9 @@ public: \
|
|
|
/// Classes must be derived from SerializableObject if you want to be able to save pointers or
|
|
|
/// reference counting pointers to objects of this or derived classes. The type will automatically
|
|
|
/// be determined during serialization and upon deserialization it will be restored correctly.
|
|
|
-class SerializableObject
|
|
|
+class JPH_EXPORT SerializableObject
|
|
|
{
|
|
|
- JPH_DECLARE_SERIALIZABLE_ABSTRACT_BASE(SerializableObject)
|
|
|
+ JPH_DECLARE_SERIALIZABLE_ABSTRACT_BASE(JPH_EXPORT, SerializableObject)
|
|
|
|
|
|
public:
|
|
|
/// Constructor
|