#ifndef ARENA_H #define ARENA_H #include #include #include #include typedef struct { void *data; size_t size; size_t offset; } Arena; typedef enum { ARENA_OK, ARENA_BAD_ALLOC, ARENA_OUT_OF_SPACE, ARENA_NULL_ARG, ARENA_INVALID_SIZE, } ArenaErr; typedef struct { bool is_valid; union { ArenaErr err; void *pointer; }; } ArenaPointer; typedef struct { bool is_valid; union { ArenaErr err; Arena arena; }; } ArenaResult; ArenaResult arena_init(void *buffer, size_t size); void arena_destroy(Arena *arena); ArenaPointer arena_alloc(Arena *arena, size_t size, size_t alignment); ArenaErr arena_push(Arena *arena, void *data, size_t size); ArenaErr arena_realloc(Arena *arena, size_t new_size); size_t align_arena_offset(Arena *arena, size_t alignment); #endif // !ARENA_H