Realized that if i want to use malloc and free i either have to make some sort of interface that lets you use a custom allocator and deallocator or just use them by default. Maybe later it would be cool to change it to that but for now is out of the scope of my project. # Tipos: # feat, fix, refactor, docs, style, test, chore
49 lines
896 B
C
49 lines
896 B
C
#ifndef ARENA_H
|
|
#define ARENA_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdlib.h>
|
|
#include <inttypes.h>
|
|
#include <stdbool.h>
|
|
|
|
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(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
|