From 7e73843ac5873833c707687cd0ada0a3034e600c Mon Sep 17 00:00:00 2001 From: pryazha Date: Thu, 11 Sep 2025 19:25:30 +0500 Subject: add new files --- arena.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 arena.c (limited to 'arena.c') diff --git a/arena.c b/arena.c new file mode 100644 index 0000000..03a1c1c --- /dev/null +++ b/arena.c @@ -0,0 +1,38 @@ +#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); +} -- cgit v1.2.3-70-g09d2