#include "arena.h" #include #include #include ArenaResult arena_init(size_t size) { void *buffer = malloc(size); if (buffer == NULL) { ArenaResult err = { .is_valid = false, .err = ARENA_BAD_ALLOC, }; return err; } if (size < 1) { ArenaResult err = { .is_valid = false, .err = ARENA_INVALID_SIZE, }; return err; } Arena new_arena = { .data = buffer, .size = size, .offset = 0, }; ArenaResult val = { .is_valid = true, .arena = new_arena, }; return val; } void arena_destroy(Arena *arena) { if (arena == NULL) { return; } arena->offset = 0; arena->size = 0; free(arena->data); } ArenaPointer arena_alloc(Arena *arena, size_t size, size_t alignment) { if (arena == NULL) { ArenaPointer err = { .is_valid = false, .err = ARENA_NULL_ARG, }; return err; } size_t new_offset = align_arena_offset(arena, alignment); if (new_offset + size >= arena->size) { ArenaPointer err = { .is_valid = false, .err = ARENA_OUT_OF_SPACE, }; return err; } arena->offset = new_offset; ArenaPointer val = { .is_valid = true, .pointer = arena->data + arena->offset, }; return val; }