aboutsummaryrefslogtreecommitdiff
path: root/src/basic/arena.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/basic/arena.h')
-rw-r--r--src/basic/arena.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/basic/arena.h b/src/basic/arena.h
new file mode 100644
index 0000000..f13ccfa
--- /dev/null
+++ b/src/basic/arena.h
@@ -0,0 +1,36 @@
+#ifndef ARENA_H
+#define ARENA_H
+
+
+#include <basic/basic.h>
+
+typedef struct {
+ size_t size_used;
+ size_t size_max;
+ u8 *memory;
+} Arena;
+
+
+typedef struct {
+ Arena *arena;
+ u64 pos;
+} ArenaTmp;
+
+
+void arena_init(Arena *arena, u64 size);
+void arena_deinit(Arena *arena);
+
+void arena_align(Arena *arena, u64 alignment);
+void* arena_push(Arena *arena, u64 size);
+void arena_pop_to(Arena *arena, u64 pos);
+void arena_pop_size(Arena *arena, u64 size);
+
+void arena_zero(Arena *arena);
+void arena_clear(Arena *arena);
+
+
+ArenaTmp arena_tmp_begin(Arena *arena);
+void arena_tmp_end(ArenaTmp tmp);
+
+
+#endif // MEM_ARENA_H