#ifndef ARENA_H #define ARENA_H #include #include #include #include typedef struct { uint8_t *buffer; size_t capacity; size_t offset; } Arena; typedef enum { ARENA_OK = 0, ARENA_BAD_ALLOC, ARENA_OUT_OF_SPACE, ARENA_NULL_ARG, ARENA_INVALID_SIZE, ARENA_INVALID_ALIGN, ARENA_CAPACITY_OVERFLOW, } ArenaErr; typedef struct { bool is_valid; union { ArenaErr err; uint8_t *address; }; } ArenaPointer; typedef struct { bool is_valid; union { ArenaErr err; Arena arena; }; } ArenaResult; typedef struct { bool is_valid; union { ArenaErr err; size_t val; }; } SizeResult; ArenaResult arena_init(size_t capacity); 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, size_t alignment); ArenaErr arena_realloc(Arena *arena, size_t new_capacity); SizeResult align_arena_offset(Arena *arena, size_t alignment); // Should be moved to something like general utilities, // i should make one for all my c projects bool mul_size_t_safe(size_t a, size_t b, size_t *out); #endif // !ARENA_H