summaryrefslogtreecommitdiff
path: root/src/smrt_arena.h
diff options
context:
space:
mode:
authorsteven-na <noreply.github@stvnc.dev>2026-07-28 02:12:54 -0700
committersteven-na <noreply.github@stvnc.dev>2026-07-28 02:12:54 -0700
commit8bec6205ae1631dc0896fe25795b2946ed414df0 (patch)
treea40734bf042ab2236c65254bed08fac23bccc3e5 /src/smrt_arena.h
parentacea02e9b90a83167d15e62741c8e8bb9f0d4b7c (diff)
Arenas and start work on strings
Diffstat (limited to 'src/smrt_arena.h')
-rw-r--r--src/smrt_arena.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/smrt_arena.h b/src/smrt_arena.h
new file mode 100644
index 0000000..4e6f592
--- /dev/null
+++ b/src/smrt_arena.h
@@ -0,0 +1,35 @@
+#pragma once
+
+#include "common.h"
+
+#define SMRT_ARENA_BASE_POS (sizeof(smrt_arena_t))
+
+typedef struct {
+ u64 reserve_size;
+ u64 commit_size;
+
+ u64 mark_pos;
+
+ u64 pos;
+ u64 commit_pos;
+
+ b32 auto_decommit;
+} smrt_arena_t;
+
+smrt_arena_t *smrt_arena_create(u64 reserve_size, u64 commit_size, b32 auto_decommit);
+ void *smrt_arena_push(smrt_arena_t *arena, u64 alloc_amount, b32 zero_out);
+ void *smrt_arena_mark_push(smrt_arena_t *arena, u64 alloc_amount, b32 zero_out);
+ void smrt_arena_pop(smrt_arena_t *arena, u64 pop_amount);
+ void smrt_arena_pop_to(smrt_arena_t *arena, u64 location);
+ b32 smrt_arena_pop_to_mark(smrt_arena_t *arena);
+ void smrt_arena_clear(smrt_arena_t *arena, b32 zero_out);
+ void smrt_arena_destroy(smrt_arena_t *arena);
+
+#define SMRTA_ALLOC_ARRAY(arena, T, n) (T*)smrt_arena_push(arena, sizeof(T) * (n), true)
+
+u32 plat_get_pagesize(void);
+
+void *plat_mem_reserve(u64 size);
+ b32 plat_mem_commit(void *ptr, u64 size);
+ b32 plat_mem_decommit(void *ptr, u64 size);
+ b32 plat_mem_release(void *ptr, u64 size);