29#ifndef PX_SERIAL_FRAMEWORK_H
30#define PX_SERIAL_FRAMEWORK_H
36#include "common/PxPhysXCommonConfig.h"
45class PxSerializationContext;
46class PxRepXSerializer;
52#define PX_SERIAL_ALIGN 16
55#define PX_SERIAL_FILE_ALIGN 128
58#define PX_SERIAL_OBJECT_ID_INVALID 0
64#define PX_SERIAL_REF_KIND_PTR_TYPE_BIT (1u<<31)
67#define PX_SERIAL_REF_KIND_PXBASE (0 | PX_SERIAL_REF_KIND_PTR_TYPE_BIT)
70#define PX_SERIAL_REF_KIND_MATERIAL_IDX (1)
73#define PX_MAKE_FOURCC(a, b, c, d) ( (a) | ((b)<<8) | ((c)<<16) | ((d)<<24) )
84 virtual void process(
PxBase&) = 0;
137 virtual void writeData(
const void* data, PxU32 size) = 0;
146 virtual void alignData(PxU32 alignment = PX_SERIAL_ALIGN) = 0;
214 PxU32 len = *
reinterpret_cast<PxU32*
>(mExtraDataAddress);
215 mExtraDataAddress +=
sizeof(len);
216 name = len ?
reinterpret_cast<const char*
>(mExtraDataAddress) : NULL;
217 mExtraDataAddress += len;
230 T* data =
reinterpret_cast<T*
>(mExtraDataAddress);
231 mExtraDataAddress +=
sizeof(T)*count;
242 template<
typename T, PxU32 alignment>
246 return readExtraData<T>(count);
258 size_t addr = size_t(mExtraDataAddress);
259 addr = (addr+alignment-1)&~
size_t(alignment-1);
260 mExtraDataAddress =
reinterpret_cast<PxU8*
>(addr);
266 virtual ~PxDeserializationContext() {}
268 PxU8* mExtraDataAddress;
Base class for objects that can be members of a PxCollection.
Definition PxBase.h:73
Collection class for serialization.
Definition PxCollection.h:104
Binary deserialization context class.
Definition PxSerialFramework.h:174
virtual PxBase * resolveReference(PxU32 kind, size_t reference) const =0
Retrieves a pointer to a deserialized PxBase object given a corresponding deserialized reference valu...
PX_INLINE T * readExtraData(PxU32 count=1)
Function to read extra data during deserialization optionally aligning the extra data stream before r...
Definition PxSerialFramework.h:243
PX_INLINE void alignExtraData(PxU32 alignment=PX_SERIAL_ALIGN)
Function to align the extra data stream to a power of 2 alignment.
Definition PxSerialFramework.h:256
PX_INLINE T * readExtraData(PxU32 count=1)
Function to read extra data during deserialization.
Definition PxSerialFramework.h:228
PX_INLINE void readName(const char *&name)
Helper function to read a name from the extra data during deserialization.
Definition PxSerialFramework.h:212
void translatePxBase(T *&base)
Helper function to update PxBase pointer on deserialization.
Definition PxSerialFramework.h:203
Output stream class for I/O.
Definition PxIO.h:114
Callback class used to process PxBase objects.
Definition PxSerialFramework.h:81
Serializer interface for RepX (Xml) serialization.
Definition PxRepXSerializer.h:67
Binary serialization context class.
Definition PxSerialFramework.h:99
virtual void alignData(PxU32 alignment=PX_SERIAL_ALIGN)=0
Aligns the serialized data.
virtual void writeData(const void *data, PxU32 size)=0
Serializes object data and object extra data.
virtual const PxCollection & getCollection() const =0
Returns the collection that is being serialized.
virtual void writeName(const char *name)=0
Helper function to write a name to the extraData if serialization is configured to save names.
virtual void registerReference(PxBase &base, PxU32 kind, size_t reference)=0
Registers a reference value corresponding to a PxBase object.
Class serving as a registry for XML (RepX) and binary serializable types.
Definition PxSerialFramework.h:292
virtual void registerRepXSerializer(PxType type, PxRepXSerializer &serializer)=0
Register a RepX serializer for a concrete type.
virtual PxSerializer * unregisterSerializer(PxType type)=0
Unregister a serializer for a concrete type, and retrieves the corresponding serializer object.
virtual PxRepXSerializer * unregisterRepXSerializer(PxType type)=0
Unregister a RepX serializer for a concrete type, and retrieves the corresponding serializer object.
virtual PxRepXSerializer * getRepXSerializer(const char *typeName) const =0
Returns RepX serializer given the corresponding type name.
virtual const PxSerializer * getSerializer(PxType type) const =0
Returns PxSerializer corresponding to type.
virtual void release()=0
Releases PxSerializationRegistry instance.
virtual PX_DEPRECATED void registerBinaryMetaDataCallback(PxBinaryMetaDataCallback callback)=0
Register binary meta data callback.
virtual void registerSerializer(PxType type, PxSerializer &serializer)=0
Register a serializer for a concrete type.
Serialization interface class.
Definition PxSerializer.h:63
#define PX_INLINE
Definition PxPreprocessor.h:320
#define PX_DEPRECATED
Definition PxPreprocessor.h:418
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
PxU64 PxSerialObjectId
ID type for PxBase objects in a PxCollection.
Definition PxSerialFramework.h:61
PX_DEPRECATED void(* PxBinaryMetaDataCallback)(PxOutputStream &stream)
Callback type for exporting binary meta data for a serializable type.
Definition PxSerialFramework.h:279