From f6dda8af9998eba76ff377c91cb69593c086b8c0 Mon Sep 17 00:00:00 2001 From: Imogen Thoms Date: Thu, 30 Jan 2025 21:35:11 +0000 Subject: added mogi_arena allocator Signed-off-by: Imogen Thoms --- src/arena.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/arena.c (limited to 'src') 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 +#include + +#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; +} -- cgit 1.4.1-2-gfad0