From 3913d1778318cd0c6bfb871148d38abb33ec7fd3 Mon Sep 17 00:00:00 2001 From: nasr Date: Wed, 28 Jan 2026 13:13:40 +0100 Subject: checkpoint --- base/base_arena.h | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 base/base_arena.h (limited to 'base/base_arena.h') diff --git a/base/base_arena.h b/base/base_arena.h new file mode 100644 index 0000000..19c4f3d --- /dev/null +++ b/base/base_arena.h @@ -0,0 +1,49 @@ +#ifndef ARENA_H +#define ARENA_H + +#include "base.h" + +/** + * Arena Helper macro's + * */ + +#define MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define MAX(a, b) (((a) > (b)) ? (a) : (b)) +#define ALIGN_UP_POW2(n, p) (((u64)(n) + ((u64)(p) - 1)) & (~((u64)(p) - 1))) + +#define PUSH_STRUCT(arena, T) (T *)arena_push((arena), sizeof(T), 0) +#define PUSH_STRUCT_NZ(arena, T) (T *)arena_push((arena), sizeof(T), 1) +#define PUSH_ARRAY(arena, T, n) (T *)arena_push((arena), sizeof(T) * (n), 0) +#define PUSH_ARRAY_NZ(arena, T, n) (T *)arena_push((arena), sizeof(T) * (n), 1) + +#define ARENA_BASE_POS (sizeof(mem_arena)) +#define ARENA_ALIGN (sizeof(void *)) + +typedef struct mem_arena mem_arena; + +struct mem_arena +{ + u64 capacity; + u64 pos; +}; + +local_internal mem_arena * +arena_create(u64 capacity); + +local_internal void +arena_destroy(mem_arena *arena); + +local_internal void * +arena_push(mem_arena *arena, u64 size, b32 non_zero); + +local_internal void +arena_pop(mem_arena *arena, u64 size); + +local_internal void +arena_pop_to(mem_arena *arena, u64 pos); + +local_internal void +arena_clear(mem_arena *arena); + + +#endif -- cgit v1.3