Box3D-0.1.0.0: upstream/src/block_allocator.h
// SPDX-FileCopyrightText: 2026 Erin Catto
// SPDX-License-Identifier: MIT
#pragma once
#include "container.h"
#include "box3d/base.h"
#define B3_BLOCK_EXPONENT 8
#define B3_BLOCK_SIZE ( 1 << B3_BLOCK_EXPONENT )
typedef struct b3Block
{
char* memory;
} b3Block;
b3DeclareArray( b3Block );
typedef struct b3BlockAllocator
{
b3Array( b3Block ) blocks;
void* freeList;
int elementSize;
int nextIndex;
int allocationCount;
} b3BlockAllocator;
// Element must be large enough to hold a pointer. The element size is rounded up to B3_ALIGNMENT.
b3BlockAllocator b3CreateBlockAllocator( int elementSize, int initialCount );
void b3DestroyBlockAllocator( b3BlockAllocator* allocator );
// Returns one element of elementSize contiguous bytes. Address is stable until freed.
void* b3AllocateElement( b3BlockAllocator* allocator );
void b3FreeElement( b3BlockAllocator* allocator, void* element );