2024-04-21 09:11:28 +00:00
|
|
|
internal Arena *
|
2024-04-25 17:34:00 +00:00
|
|
|
arena_initialize(u64 size, b8 growable)
|
2024-04-21 09:11:28 +00:00
|
|
|
{
|
|
|
|
Arena *result = 0;
|
2024-04-25 17:34:00 +00:00
|
|
|
void *backing_buffer = platform_memory_reserve(size);
|
2024-04-21 09:11:28 +00:00
|
|
|
|
|
|
|
if (backing_buffer != NULL)
|
|
|
|
{
|
2024-04-25 17:34:00 +00:00
|
|
|
platform_memory_commit(backing_buffer, ARENA_INITIAL_COMMIT_SIZE);
|
|
|
|
|
2024-04-21 09:11:28 +00:00
|
|
|
result = (Arena*) backing_buffer;
|
2024-04-25 17:34:00 +00:00
|
|
|
result->backing_buffer = backing_buffer;
|
2024-04-21 09:11:28 +00:00
|
|
|
|
2024-04-25 17:34:00 +00:00
|
|
|
// rhjr: immutable arena header
|
|
|
|
result->base_pos = sizeof(Arena);
|
|
|
|
result->commit_pos = sizeof(Arena);
|
|
|
|
|
|
|
|
result->growable = growable;
|
|
|
|
result->size = size;
|
2024-04-21 09:11:28 +00:00
|
|
|
}
|
|
|
|
|
2024-04-25 17:34:00 +00:00
|
|
|
// rhjr: arenas should be instantiated early on in the programs lifetime, that
|
|
|
|
// is why this assertion will also be used in production.
|
|
|
|
ASSERT(result != 0);
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
internal Arena *
|
|
|
|
arena_initialize_default()
|
|
|
|
{
|
|
|
|
Arena *result = arena_initialize(ARENA_DEFAULT_RESERVE_SIZE, 1);
|
2024-04-21 09:11:28 +00:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
internal void *
|
|
|
|
arena_allocate(Arena *arena, u64 size)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
internal void
|
|
|
|
arena_release(Arena *arena)
|
|
|
|
{
|
|
|
|
}
|