#include "arena_allocator.h" #include #include #include #include Arena arena_init(size_t capacity) { Arena result = {.capacity = capacity, .size = 0, .data = malloc(capacity)}; assert(result.data != NULL); return result; } void arena_deinit(Arena *arena) { free(arena->data); *arena = (Arena){.capacity = NAN, .size = 0, .data = NULL}; } void *arena_alloc(Arena *arena, size_t size) { assert(arena->size + size <= arena->capacity); void *result = &arena->data[arena->size]; arena->size += size; return result; } void *arena_clear(Arena *arena) { arena->size = 0; return arena->data; }