OK, so evrything was a fucknig mess, it still kinda is, AI helped me to clean my own mess, it really sucks but the fucking debugger and address sanitizer were not working, also, there were small small errors so no big deal but still, a bit sad, also changed a the way i cast from uint8_t to double and int in the tests, may change that i guess, verything else i might say is good :)
64 lines
1.3 KiB
C
64 lines
1.3 KiB
C
#ifndef ARENA_H
|
|
#define ARENA_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include <inttypes.h>
|
|
#include <stdbool.h>
|
|
|
|
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);
|
|
ArenaPointer arena_push(Arena *arena, void *data, size_t size, size_t alignment);
|
|
ArenaErr arena_realloc(Arena *arena, size_t new_capacity);
|
|
|
|
SizeResult get_arena_align_padding(Arena *arena, size_t alignment);
|
|
ArenaErr arena_ensure_capacity(Arena *arena, size_t size, 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
|