3void pool_init(
pool_t* pool,
void* elements,
size_t capacity,
size_t elementSize,
size_t nextOffset)
12 for (
size_t i = 0; i < capacity; i++)
14 void* element = (
void*)((
uintptr_t)elements + (i * elementSize));
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.
#define POOL_IDX_MAX
The maximum index value for pool.
void pool_init(pool_t *pool, void *elements, size_t capacity, size_t elementSize, size_t nextOffset)
Initialize a pool.
#define POOL_TAG_INC
The amount to increment the tag by in the tagged free list.
uint16_t pool_idx_t
Pool index type.
#define ASM(...)
Inline assembly macro.
#define atomic_fetch_add_explicit(object, operand, order)
#define atomic_load_explicit(object, order)
#define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure)
#define atomic_init(obj, value)
#define atomic_fetch_sub_explicit(object, operand, order)
__UINTPTR_TYPE__ uintptr_t
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.