Box2D 3.1.0
A 2D physics engine for games
 
Loading...
Searching...
No Matches
id.h
1// SPDX-FileCopyrightText: 2023 Erin Catto
2// SPDX-License-Identifier: MIT
3
4#pragma once
5
6#include "base.h"
7
8#include <stdint.h>
9
35
37typedef struct b2WorldId
38{
39 uint16_t index1;
40 uint16_t generation;
41} b2WorldId;
42
44typedef struct b2BodyId
45{
46 int32_t index1;
47 uint16_t world0;
48 uint16_t generation;
49} b2BodyId;
50
52typedef struct b2ShapeId
53{
54 int32_t index1;
55 uint16_t world0;
56 uint16_t generation;
57} b2ShapeId;
58
60typedef struct b2ChainId
61{
62 int32_t index1;
63 uint16_t world0;
64 uint16_t generation;
65} b2ChainId;
66
68typedef struct b2JointId
69{
70 int32_t index1;
71 uint16_t world0;
72 uint16_t generation;
73} b2JointId;
74
77static const b2WorldId b2_nullWorldId = B2_ZERO_INIT;
78static const b2BodyId b2_nullBodyId = B2_ZERO_INIT;
79static const b2ShapeId b2_nullShapeId = B2_ZERO_INIT;
80static const b2ChainId b2_nullChainId = B2_ZERO_INIT;
81static const b2JointId b2_nullJointId = B2_ZERO_INIT;
82
84#define B2_IS_NULL( id ) ( id.index1 == 0 )
85
87#define B2_IS_NON_NULL( id ) ( id.index1 != 0 )
88
90#define B2_ID_EQUALS( id1, id2 ) ( id1.index1 == id2.index1 && id1.world0 == id2.world0 && id1.generation == id2.generation )
91
93B2_INLINE uint64_t b2StoreBodyId( b2BodyId id )
94{
95 return ( (uint64_t)id.index1 << 32 ) | ( (uint64_t)id.world0 ) << 16 | (uint64_t)id.generation;
96}
97
99B2_INLINE b2BodyId b2LoadBodyId( uint64_t x )
100{
101 b2BodyId id = { (int32_t)( x >> 32 ), (uint16_t)( x >> 16 ), (uint16_t)( x ) };
102 return id;
103}
104
106B2_INLINE uint64_t b2StoreShapeId( b2ShapeId id )
107{
108 return ( (uint64_t)id.index1 << 32 ) | ( (uint64_t)id.world0 ) << 16 | (uint64_t)id.generation;
109}
110
112B2_INLINE b2ShapeId b2LoadShapeId( uint64_t x )
113{
114 b2ShapeId id = { (int32_t)( x >> 32 ), (uint16_t)( x >> 16 ), (uint16_t)( x ) };
115 return id;
116}
117
119B2_INLINE uint64_t b2StoreChainId( b2ChainId id )
120{
121 return ( (uint64_t)id.index1 << 32 ) | ( (uint64_t)id.world0 ) << 16 | (uint64_t)id.generation;
122}
123
125B2_INLINE b2ChainId b2LoadChainId( uint64_t x )
126{
127 b2ChainId id = { (int32_t)( x >> 32 ), (uint16_t)( x >> 16 ), (uint16_t)( x ) };
128 return id;
129}
130
132B2_INLINE uint64_t b2StoreJointId( b2JointId id )
133{
134 return ( (uint64_t)id.index1 << 32 ) | ( (uint64_t)id.world0 ) << 16 | (uint64_t)id.generation;
135}
136
138B2_INLINE b2JointId b2LoadJointId( uint64_t x )
139{
140 b2JointId id = { (int32_t)( x >> 32 ), (uint16_t)( x >> 16 ), (uint16_t)( x ) };
141 return id;
142}
143
uint64_t b2StoreShapeId(b2ShapeId id)
Store a shape id into a uint64_t.
Definition id.h:106
uint64_t b2StoreJointId(b2JointId id)
Store a joint id into a uint64_t.
Definition id.h:132
uint64_t b2StoreChainId(b2ChainId id)
Store a chain id into a uint64_t.
Definition id.h:119
uint64_t b2StoreBodyId(b2BodyId id)
Store a body id into a uint64_t.
Definition id.h:93
b2ChainId b2LoadChainId(uint64_t x)
Load a uint64_t into a chain id.
Definition id.h:125
b2JointId b2LoadJointId(uint64_t x)
Load a uint64_t into a joint id.
Definition id.h:138
b2BodyId b2LoadBodyId(uint64_t x)
Load a uint64_t into a body id.
Definition id.h:99
b2ShapeId b2LoadShapeId(uint64_t x)
Load a uint64_t into a shape id.
Definition id.h:112
Body id references a body instance. This should be treated as an opaque handle.
Definition id.h:45
Chain id references a chain instances. This should be treated as an opaque handle.
Definition id.h:61
Joint id references a joint instance. This should be treated as an opaque handle.
Definition id.h:69
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