#include "arena.h" #include #include #include void arena_init(Arena* a) { a->data = NULL; a->size = 0; a->capacity = 0; } void* arena_alloc(Arena* a, size_t size) { // simple alignment to 8 bytes size = (size + 7) & ~((size_t)7); if (a->size + size > a->capacity) { size_t new_cap = a->capacity ? a->capacity * 2 : 1024; while (new_cap < a->size + size) new_cap *= 2; uint8_t* new_data = realloc(a->data, new_cap); if (!new_data) return NULL; a->data = new_data; a->capacity = new_cap; } void* ptr = a->data + a->size; a->size += size; return ptr; } void arena_free(Arena* a) { free(a->data); a->data = NULL; a->size = 0; a->capacity = 0; }