summaryrefslogtreecommitdiffstats
path: root/lib/include/arena.h
diff options
context:
space:
mode:
authorLibravatar bigfoot547 <bigfoot@figboot.dev>2026-01-06 03:27:12 -0600
committerLibravatar bigfoot547 <bigfoot@figboot.dev>2026-01-06 03:27:12 -0600
commit4cf8b35097a131abcfc8e0d04d35294be13943ac (patch)
treebb384a58c53d7b4ab9faf45e84677ae5cdb42ac1 /lib/include/arena.h
initial commit
Diffstat (limited to 'lib/include/arena.h')
-rw-r--r--lib/include/arena.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/include/arena.h b/lib/include/arena.h
new file mode 100644
index 0000000..fa1674b
--- /dev/null
+++ b/lib/include/arena.h
@@ -0,0 +1,28 @@
+#ifndef VL_ARENA_H_INCLUDED
+#define VL_ARENA_H_INCLUDED
+
+/* implements a basic arena allocator */
+
+#include <stddef.h>
+#include <stdarg.h>
+
+typedef struct vl__arena_tag vl_arena;
+
+/* returns NULL if an arena could not be allocated */
+vl_arena *vl_arena_new(size_t cap);
+
+/* aborts if the arena is overflowing */
+void *vl_arena_push(vl_arena *parena, size_t len);
+
+/* resets the arena (but does not free it) */
+void vl_arena_reset(vl_arena *parena);
+
+/* frees the arena */
+void vl_arena_free(vl_arena *parena);
+
+char *vl_arena_strdup(vl_arena *parena, const char *str);
+
+char *vl_arena_sprintf(vl_arena *parena, const char *fmt, ...);
+char *vl_arena_vsprintf(vl_arena *parena, const char *fmt, va_list ap);
+
+#endif /* include guard */