Nebula
Loading...
Searching...
No Matches
idgenerationpool.h
Go to the documentation of this file.
1#pragma once
2//------------------------------------------------------------------------------
19#include "util/array.h"
20#include "id.h"
21#include "util/queue.h"
22
23const uint32_t ID_BITS = 24;
24const uint32_t GENERATION_BITS = 8;
25const uint32_t ID_MASK = (1<<ID_BITS) - 1;
26const uint32_t GENERATION_MASK = (1<<GENERATION_BITS) - 1;
27
28#if GENERATION_BITS <= 8
29typedef uint8_t generation_t;
30#elif GENERATION_BITS <= 16
31typedef uint16_t generation_t;
32#else
33typedef uint32_t generation_t;
34#endif
35#if ID_BITS + GENERATION_BITS > 32
36#error bits in game id generation exceeds 32
37#endif
38
39//------------------------------------------------------------------------------
40namespace Ids
41{
67
68//------------------------------------------------------------------------------
71constexpr static Id24
72Index(const Id32 id)
73{
74 return id & ID_MASK;
75}
76
77//------------------------------------------------------------------------------
80constexpr static generation_t
82{
83 return (id >> ID_BITS) & GENERATION_MASK;
84}
85
86//------------------------------------------------------------------------------
89static Id32
90CreateId(const Id24 index, generation_t generation)
91{
92 Id32 id;
93 id = (generation << ID_BITS) | index;
94 n_assert2(index < (1 << ID_BITS), "index overflow");
95 return id;
96}
97
98//------------------------------------------------------------------------------
101inline Util::Queue<Id32>&
103{
104 return this->freeIds;
105}
106
107} // namespace Ids
108//------------------------------------------------------------------------------
Provides a system for creating array friendly id numbers with reuse and generations.
Definition idgenerationpool.h:43
void Deallocate(Id32 id)
remove an id
Definition idgenerationpool.cc:54
bool IsValid(Id32 id) const
check if valid
Definition idgenerationpool.cc:66
Util::Queue< Id32 > freeIds
stores freed indices
Definition idgenerationpool.h:64
IdGenerationPool()
constructor
Definition idgenerationpool.cc:14
bool Allocate(Id32 &id)
allocate a new id, returns true if a new id was created, and false if an id was reused but with new g...
Definition idgenerationpool.cc:33
SizeT freeIdsSize
Definition idgenerationpool.h:65
Util::Queue< Id32 > & FreeIds()
Get free ids.
Definition idgenerationpool.h:102
Util::Array< generation_t > generations
array containing generation value for every index
Definition idgenerationpool.h:61
~IdGenerationPool()
destructor
Definition idgenerationpool.cc:24
Nebula's dynamic array class.
Definition array.h:60
Nebula's queue class (a FIFO container).
Definition queue.h:28
#define n_assert2(exp, msg)
Definition debug.h:51
const uint32_t GENERATION_MASK
Definition idgenerationpool.h:26
uint8_t generation_t
Definition idgenerationpool.h:29
const uint32_t ID_BITS
Definition idgenerationpool.h:23
const uint32_t GENERATION_BITS
Definition idgenerationpool.h:24
const uint32_t ID_MASK
Definition idgenerationpool.h:25
This simple Id pool implements a set of free and used consecutive integers.
Definition id.h:135
uint32_t Id24
Definition id.h:139
static constexpr Id24 Index(const Id32 id)
Definition idgenerationpool.h:72
static Id32 CreateId(const Id24 index, generation_t generation)
Definition idgenerationpool.h:90
uint32_t Id32
Definition id.h:138
static constexpr generation_t Generation(const Id32 id)
Definition idgenerationpool.h:81
int SizeT
Definition types.h:49