diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/arena.c | 38 |
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; +} |