ciabatta/include/cia-mem.h

40 lines
1.3 KiB
C

#pragma once
void *cia_ptr_alignf(void *ptr, u64 alignment);
void *cia_ptr_alignb(void *ptr, u64 alignment);
#define CIA_MEM_OP_ALLOC 1
#define CIA_MEM_OP_FREE 2
#define CIA_MEM_OP_FREE_ALL 3
#define CIA_MEM_OP_RESIZE 4
struct Cia_Allocator typedef Cia_Allocator;
struct Cia_Allocator {
void *ctx;
void *(*proc)(void *ctx, int optype, void *old_ptr, u64 old_size, u64 size, u64 alignment);
};
Cia_Allocator cia_allocator_null();
Cia_Allocator cia_allocator_pages();
void *allocator_alloc(Cia_Allocator *alloc, u64 size, u64 alignment);
void allocator_free_size(Cia_Allocator *alloc, void *region_ptr, u64 region_size);
void allocator_free(Cia_Allocator *alloc, void *region_ptr);
void allocator_free_all(Cia_Allocator *alloc);
void *allocator_resize(Cia_Allocator *alloc, void *old_ptr, u64 old_size, u64 new_size, u64 alignment);
struct Cia_Arena typedef Cia_Arena;
struct Cia_Arena {
Cia_Allocator allocator;
u64 buffer_size;
u64 used;
u8* buffer;
};
void cia_arena_create(Cia_Arena *arena, Cia_Allocator backing_allocator, u64 max_size);
void *cia_arena_alloc(Cia_Arena *arena, u64 size);
void *cia_arena_alloc_aligned(Cia_Arena *arena, u64 size, u64 align);
void cia_arena_free_all(Cia_Arena *arena);
void cia_arena_destroy(Cia_Arena *arena);