29#define POOL_IDX_MAX UINT16_MAX
31#define POOL_TAG_INC ((uint64_t)(POOL_IDX_MAX) + 1)
56void pool_init(
pool_t* pool,
void* elements,
size_t capacity,
size_t elementSize,
size_t nextOffset);
pool_idx_t pool_alloc(pool_t *pool)
Allocate an element from the pool.
void pool_free(pool_t *pool, pool_idx_t idx)
Free an element back to the pool.
void pool_init(pool_t *pool, void *elements, size_t capacity, size_t elementSize, size_t nextOffset)
Initialize a pool.
uint16_t pool_idx_t
Pool index type.
atomic_uint64_t free
The tagged head of the free list.
size_t nextOffset
Offset of a pool_idx_t variable within each element used for the free list.
size_t capacity
Maximum number of elements.
atomic_size_t used
Number of used elements.
size_t elementSize
Size of each element.
void * elements
Pointer to the elements array.