00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef PX_REPX_SERIALIZER_H
00030 #define PX_REPX_SERIALIZER_H
00031
00035 #include "common/PxBase.h"
00036 #include "extensions/PxRepXSimpleType.h"
00037
00038 #if !PX_DOXYGEN
00039 namespace physx
00040 {
00041 #endif
00042
00043 class XmlMemoryAllocator;
00044 class XmlWriter;
00045 class XmlReader;
00046 class MemoryBuffer;
00047
00066 class PxRepXSerializer
00067 {
00068 protected:
00069 virtual ~PxRepXSerializer(){}
00070 public:
00071
00076 virtual const char* getTypeName() = 0;
00077
00087 virtual void objectToFile( const PxRepXObject& inLiveObject, PxCollection* inCollection, XmlWriter& inWriter, MemoryBuffer& inTempBuffer, PxRepXInstantiationArgs& inArgs ) = 0;
00088
00099 virtual PxRepXObject fileToObject( XmlReader& inReader, XmlMemoryAllocator& inAllocator, PxRepXInstantiationArgs& inArgs, PxCollection* inCollection ) = 0;
00100
00101 };
00102
00103 #if !PX_DOXYGEN
00104 }
00105 #endif
00106
00110 template<typename TDataType>
00111 PX_INLINE physx::PxRepXObject PxCreateRepXObject(const TDataType* inType, const physx::PxSerialObjectId inId)
00112 {
00113 return physx::PxRepXObject(physx::PxTypeInfo<TDataType>::name(), inType, inId);
00114 }
00115
00119 PX_INLINE physx::PxRepXObject PxCreateRepXObject(const physx::PxBase* inType, const physx::PxSerialObjectId inId)
00120 {
00121 PX_ASSERT(inType);
00122 return physx::PxRepXObject(inType->getConcreteTypeName(), inType, inId);
00123 }
00124
00128 template<typename TDataType>
00129 PX_INLINE physx::PxRepXObject PxCreateRepXObject(const TDataType* inType)
00130 {
00131 return PxCreateRepXObject(inType, static_cast<physx::PxSerialObjectId>(reinterpret_cast<size_t>(inType)));
00132 }
00133
00137 #define PX_NEW_REPX_SERIALIZER(T) \
00138 *PX_PLACEMENT_NEW(PxGetFoundation().getAllocatorCallback().allocate(sizeof(T), "PxRepXSerializer", __FILE__, __LINE__ ), T)(PxGetFoundation().getAllocatorCallback())
00139
00143 #define PX_DELETE_REPX_SERIALIZER(x) \
00144 { PxRepXSerializer* s = x; if (s) { PxGetFoundation().getAllocatorCallback().deallocate(s); } }
00145
00146
00148 #endif // PX_REPX_SERIALIZER_H