#include "arena.h" #include "macros.h" #include "sys.h" struct arena alloc_arena(u64 capacity) { /* TODO(pryazha): Find reasonable maximum capacity through testing */ assert(capacity <= (u64)gigabytes(16)); if (!capacity) capacity = kilobytes(4); void *memory = sys_alloc(capacity); assert(memory); return (struct arena){memory, capacity, 0}; } void release_arena(struct arena *arena) { assert(arena); sys_free(arena->memory, arena->capacity); arena->memory = 0; arena->capacity = 0; arena->used = 0; } void *push_arena(struct arena *arena, u64 size) { assert(arena); assert(arena->used + size <= arena->capacity); void *memory = arena->memory + arena->used; arena->used += size; return memory; } void pop_arena(struct arena *arena, u64 size) { assert(arena); arena->used -= min(size, arena->used); }