35#include "foundation/Px.h"
36#include "foundation/PxIO.h"
37#include "PxMetaDataFlags.h"
62 #define PX_STORE_METADATA(stream, metaData) stream.write(&metaData, sizeof(PxMetaDataEntry))
64 #define PX_SIZE_OF(Class, Member) sizeof((reinterpret_cast<Class*>(0))->Member)
69 #define PX_DEF_BIN_METADATA_ITEM(stream, Class, type, name, flags) \
71 PxMetaDataEntry tmp = { #type, #name, PxU32(PX_OFFSET_OF_RT(Class, name)), PX_SIZE_OF(Class, name), \
73 PX_STORE_METADATA(stream, tmp); \
80 #define PX_DEF_BIN_METADATA_ITEMS(stream, Class, type, name, flags, count) \
82 PxMetaDataEntry tmp = { #type, #name, PxU32(PX_OFFSET_OF_RT(Class, name)), PX_SIZE_OF(Class, name), \
83 count, 0, flags, 0}; \
84 PX_STORE_METADATA(stream, tmp); \
92 #define PX_DEF_BIN_METADATA_ITEMS_AUTO(stream, Class, type, name, flags) \
94 PxMetaDataEntry tmp = { #type, #name, PxU32(PX_OFFSET_OF_RT(Class, name)), PX_SIZE_OF(Class, name), \
95 sizeof((reinterpret_cast<Class*>(0))->name)/sizeof(type), 0, flags, 0}; \
96 PX_STORE_METADATA(stream, tmp); \
102 #define PX_DEF_BIN_METADATA_CLASS(stream, Class) \
104 PxMetaDataEntry tmp = { #Class, 0, 0, sizeof(Class), 0, 0, PxMetaDataFlag::eCLASS, 0 }; \
105 PX_STORE_METADATA(stream, tmp); \
111 #define PX_DEF_BIN_METADATA_VCLASS(stream, Class) \
113 PxMetaDataEntry tmp = { #Class, 0, 0, sizeof(Class), 0, 0, PxMetaDataFlag::eCLASS|PxMetaDataFlag::eVIRTUAL, 0}; \
114 PX_STORE_METADATA(stream, tmp); \
120 #define PX_DEF_BIN_METADATA_TYPEDEF(stream, newType, oldType) \
122 PxMetaDataEntry tmp = { #newType, #oldType, 0, 0, 0, 0, PxMetaDataFlag::eTYPEDEF, 0 }; \
123 PX_STORE_METADATA(stream, tmp); \
129 #define PX_DEF_BIN_METADATA_BASE_CLASS(stream, Class, BaseClass) \
131 Class* myClass = reinterpret_cast<Class*>(42); \
132 BaseClass* s = static_cast<BaseClass*>(myClass); \
133 const PxU32 offset = PxU32(size_t(s) - size_t(myClass)); \
134 PxMetaDataEntry tmp = { #Class, #BaseClass, offset, sizeof(Class), 0, 0, PxMetaDataFlag::eCLASS, 0 }; \
135 PX_STORE_METADATA(stream, tmp); \
141 #define PX_DEF_BIN_METADATA_UNION(stream, Class, name) \
143 PxMetaDataEntry tmp = { #Class, 0, PxU32(PX_OFFSET_OF_RT(Class, name)), PX_SIZE_OF(Class, name), \
144 1, 0, PxMetaDataFlag::eUNION, 0 }; \
145 PX_STORE_METADATA(stream, tmp); \
151 #define PX_DEF_BIN_METADATA_UNION_TYPE(stream, Class, type, enumValue) \
153 PxMetaDataEntry tmp = { #Class, #type, enumValue, 0, 0, 0, PxMetaDataFlag::eUNION, 0 }; \
154 PX_STORE_METADATA(stream, tmp); \
160 #define PX_DEF_BIN_METADATA_EXTRA_ITEM(stream, Class, type, control, align) \
162 PxMetaDataEntry tmp = { #type, 0, PxU32(PX_OFFSET_OF_RT(Class, control)), sizeof(type), 0, PxU32(PX_SIZE_OF(Class, control)), \
163 PxMetaDataFlag::eEXTRA_DATA|PxMetaDataFlag::eEXTRA_ITEM, align }; \
164 PX_STORE_METADATA(stream, tmp); \
170 #define PX_DEF_BIN_METADATA_EXTRA_ITEMS(stream, Class, type, control, count, flags, align) \
172 PxMetaDataEntry tmp = { #type, 0, PxU32(PX_OFFSET_OF_RT(Class, control)), PxU32(PX_SIZE_OF(Class, control)), \
173 PxU32(PX_OFFSET_OF_RT(Class, count)), PxU32(PX_SIZE_OF(Class, count)), \
174 PxMetaDataFlag::eEXTRA_DATA|PxMetaDataFlag::eEXTRA_ITEMS|flags, align }; \
175 PX_STORE_METADATA(stream, tmp); \
183 #define PX_DEF_BIN_METADATA_EXTRA_ITEMS_MASKED_CONTROL(stream, Class, type, control, controlMask ,count, flags, align) \
185 PxMetaDataEntry tmp = { #type, 0, PxU32(PX_OFFSET_OF_RT(Class, control)), PxU32(PX_SIZE_OF(Class, control)), \
186 PxU32(PX_OFFSET_OF_RT(Class, count)), PxU32(PX_SIZE_OF(Class, count)), \
187 PxMetaDataFlag::eCONTROL_MASK|PxMetaDataFlag::eEXTRA_DATA|PxMetaDataFlag::eEXTRA_ITEMS|flags|(controlMask & PxMetaDataFlag::eCONTROL_MASK_RANGE) << 16, \
189 PX_STORE_METADATA(stream, tmp); \
196 #define PX_DEF_BIN_METADATA_EXTRA_ARRAY(stream, Class, type, dyn_count, align, flags) \
198 PxMetaDataEntry tmp = { #type, 0, PxU32(PX_OFFSET_OF_RT(Class, dyn_count)), PX_SIZE_OF(Class, dyn_count), align, 0, \
199 PxMetaDataFlag::eEXTRA_DATA|flags, align }; \
200 PX_STORE_METADATA(stream, tmp); \
206 #define PX_DEF_BIN_METADATA_EXTRA_NAME(stream, Class, control, align) \
208 PxMetaDataEntry tmp = { "char", "string", 0, 0, 0, 0, PxMetaDataFlag::eEXTRA_DATA|PxMetaDataFlag::eEXTRA_NAME, align }; \
209 PX_STORE_METADATA(stream, tmp); \
215 #define PX_DEF_BIN_METADATA_EXTRA_ALIGN(stream, Class, align) \
217 PxMetaDataEntry tmp = { "PxU8", "Alignment", 0, 0, 0, 0, PxMetaDataFlag::eEXTRA_DATA|PxMetaDataFlag::eALIGNMENT, align}; \
218 PX_STORE_METADATA(stream, tmp); \
Sorts an array of objects in ascending order, assuming that the predicate implements the < operator:
Definition PxBoxController.h:39
Struct to store meta data definitions.
Definition PxMetaData.h:51
PxU32 flags
Field parameters.
Definition PxMetaData.h:58
PxU32 count
Number of items of type Type (0 for dynamic sizes)
Definition PxMetaData.h:56
const char * type
Field type (bool, byte, quaternion, etc)
Definition PxMetaData.h:52
PxU32 offsetSize
Offset of dynamic size param, for dynamic arrays.
Definition PxMetaData.h:57
PxU32 size
sizeof(Type)
Definition PxMetaData.h:55
PxU32 offset
Offset from the start of the class (ie from "this", field is located at "this"+Offset)
Definition PxMetaData.h:54
PxU32 alignment
Explicit alignment.
Definition PxMetaData.h:59
const char * name
Field name (appears exactly as in the source file)
Definition PxMetaData.h:53