about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/arena.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/arena.c b/src/arena.c
new file mode 100644
index 0000000..e38ad20
--- /dev/null
+++ b/src/arena.c
@@ -0,0 +1,38 @@
+/*

+ * arena.c

+ * arena allocator i wrote during a meeting in 30 mins

+ * imogen sorindeia thoms 2025

+ * */

+

+#include <stdlib.h>

+#include <stdint.h>

+

+#include "arena.h"

+

+/* initialize an arena with given capacity */

+mogi_arena_t mogi_arena_init(size_t size) {

+	mogi_arena_t a = {

+			.buffer = calloc(size, 1),

+			.capacity = size

+	};

+	return a;

+}

+

+/* get rid of entire arena */

+void mogi_arena_dispose(mogi_arena_t *a) {

+	if(NULL != a->buffer) {

+		free(a->buffer);

+	}

+}

+

+/* allocate space on arena

+ * TODO: alignment l m f a o

+ */

+uintptr_t mogi_arena_allocate(mogi_arena_t *a, size_t size) {

+	if((NULL == a->buffer) || ((a->posn + size) > a->capacity)) {

+		return (uintptr_t)0;

+	}

+	uintptr_t p = (uintptr_t)(a->buffer + a->posn);

+	a->posn += (uintptr_t)size;

+	return p;

+}