80 #define B3_ID_INLINE inline
83 #define B3_NULL_ID { 0 }
86 #define B3_ID_INLINE static inline
99#define B3_IS_NULL( id ) ( id.index1 == 0 )
102#define B3_IS_NON_NULL( id ) ( id.index1 != 0 )
105#define B3_ID_EQUALS( id1, id2 ) ( id1.index1 == id2.index1 && id1.world0 == id2.world0 && id1.generation == id2.generation )
110 return ( (uint32_t)
id.index1 << 16 ) | (uint32_t)
id.generation;
116 b3WorldId id = { (uint16_t)( x >> 16 ), (uint16_t)( x ) };
123 return ( (uint64_t)
id.index1 << 32 ) | ( (uint64_t)
id.world0 ) << 16 | (uint64_t)
id.generation;
129 b3BodyId id = { (int32_t)( x >> 32 ), (uint16_t)( x >> 16 ), (uint16_t)( x ) };
136 return ( (uint64_t)
id.index1 << 32 ) | ( (uint64_t)
id.world0 ) << 16 | (uint64_t)
id.generation;
142 b3ShapeId id = { (int32_t)( x >> 32 ), (uint16_t)( x >> 16 ), (uint16_t)( x ) };
149 return ( (uint64_t)
id.index1 << 32 ) | ( (uint64_t)
id.world0 ) << 16 | (uint64_t)
id.generation;
155 b3JointId id = { (int32_t)( x >> 32 ), (uint16_t)( x >> 16 ), (uint16_t)( x ) };
162 values[0] = (uint32_t)
id.index1;
163 values[1] = (uint32_t)
id.world0;
164 values[2] = (uint32_t)
id.generation;
171 id.index1 = (int32_t)values[0];
172 id.world0 = (uint16_t)values[1];
174 id.generation = (uint32_t)values[2];
B3_ID_INLINE b3WorldId b3LoadWorldId(uint32_t x)
Load a uint32_t into a world id.
Definition id.h:114
B3_ID_INLINE uint32_t b3StoreWorldId(b3WorldId id)
Store a world id into a uint32_t.
Definition id.h:108
B3_ID_INLINE b3ShapeId b3LoadShapeId(uint64_t x)
Load a uint64_t into a shape id.
Definition id.h:140
B3_ID_INLINE b3ContactId b3LoadContactId(uint32_t values[3])
Load a contact id from three uint32 values.
Definition id.h:168
B3_ID_INLINE uint64_t b3StoreJointId(b3JointId id)
Store a joint id into a uint64_t.
Definition id.h:147
#define B3_ID_INLINE
This macro bridges C and C++ inline functions. C++ has the one definition rule that C lacks.
Definition id.h:86
B3_ID_INLINE uint64_t b3StoreShapeId(b3ShapeId id)
Store a shape id into a uint64_t.
Definition id.h:134
B3_ID_INLINE uint64_t b3StoreBodyId(b3BodyId id)
Store a body id into a uint64_t.
Definition id.h:121
B3_ID_INLINE b3JointId b3LoadJointId(uint64_t x)
Load a uint64_t into a joint id.
Definition id.h:153
B3_ID_INLINE b3BodyId b3LoadBodyId(uint64_t x)
Load a uint64_t into a body id.
Definition id.h:127
#define B3_NULL_ID
A null id. Works for any id type.
Definition id.h:83
B3_ID_INLINE void b3StoreContactId(b3ContactId id, uint32_t values[3])
Store a contact id into three uint32 values.
Definition id.h:160
Body id references a body instance. This should be treated as an opaque handle.
Definition id.h:45
Joint id references a joint instance. This should be treated as an opaque handle.
Definition id.h:61
Shape id references a shape instance. This should be treated as an opaque handle.
Definition id.h:53
World id references a world instance. This should be treated as an opaque handle.
Definition id.h:38