From 2050c0e0576f05156f192aa4caf48834d2f28b14 Mon Sep 17 00:00:00 2001 From: fschildt Date: Fri, 22 Aug 2025 15:23:11 +0200 Subject: first commit --- src/basic/arena.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/basic/arena.c (limited to 'src/basic/arena.c') diff --git a/src/basic/arena.c b/src/basic/arena.c new file mode 100644 index 0000000..8f2e17e --- /dev/null +++ b/src/basic/arena.c @@ -0,0 +1,76 @@ +#include +#include +#include +#include + +void +arena_init(Arena *arena, u64 size) +{ + arena->size_used = 0; + arena->size_max = size; + arena->memory = malloc(size); +} + +void +arena_deinit(Arena *arena) +{ + arena->size_used = 0; + arena->size_max = 0; + free(arena->memory); +} + +void +arena_align(Arena *arena, u64 alignment) +{ + // @Incomplete +} + +void* +arena_push(Arena *arena, u64 size) +{ + void *result = arena->memory + arena->size_used; + arena->size_used += size; + assert(arena->size_used <= arena->size_max); + return result; +} + +void +arena_pop_to(Arena *arena, u64 pos) +{ + arena->size_used = pos; +} + +void +arena_pop_size(Arena *arena, u64 size) +{ + arena->size_used -= size; +} + +void +arena_zero(Arena *arena) +{ + memset(arena->memory, 0, arena->size_used); +} + +void +arena_clear(Arena *arena) +{ + arena->size_used = 0; +} + + +ArenaTmp +arena_tmp_begin(Arena *arena) +{ + ArenaTmp tmp; + tmp.arena = arena; + tmp.pos = arena->size_used; + return tmp; +} + +void +arena_tmp_end(ArenaTmp tmp) +{ + tmp.arena->size_used = tmp.pos; +} + -- cgit v1.2.3