summaryrefslogtreecommitdiffstats
path: root/include/arena.h
diff options
context:
space:
mode:
authorLibravatar bigfoot547 <bigfoot@figboot.dev>2026-01-16 16:54:39 -0600
committerLibravatar bigfoot547 <bigfoot@figboot.dev>2026-01-16 16:54:39 -0600
commit0566f0804b7e48a1070d0d3a5d0f6817b4003a05 (patch)
tree4a24ec6f813cde96295b981ba3f6e44a6c40b8c7 /include/arena.h
parentdownload jobs (diff)
move include directory
Diffstat (limited to 'include/arena.h')
-rw-r--r--include/arena.h28
1 files changed, 28 insertions, 0 deletions
diff --git a/include/arena.h b/include/arena.h
new file mode 100644
index 0000000..fa1674b
--- /dev/null
+++ b/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 */