#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;
b3BlockAllocator b3CreateBlockAllocator( int elementSize, int initialCount );
void b3DestroyBlockAllocator( b3BlockAllocator* allocator );
void* b3AllocateElement( b3BlockAllocator* allocator );
void b3FreeElement( b3BlockAllocator* allocator, void* element );