arena.h (917B)
1 #ifndef KIT_ARENA_H 2 #define KIT_ARENA_H 3 4 #include "core/core.h" 5 #include "core/heap.h" 6 7 typedef struct ArenaBlock ArenaBlock; 8 9 struct Arena { 10 Heap* heap; 11 ArenaBlock* head; 12 u8* cur; /* points into head's buffer */ 13 u8* end; /* end of head's buffer */ 14 size_t block_size; 15 }; 16 17 void arena_init(Arena*, Heap*, size_t block_size); 18 void arena_fini(Arena*); 19 void arena_reset(Arena*); 20 void* arena_alloc(Arena*, size_t size, size_t align); 21 void* arena_zalloc(Arena*, size_t size, size_t align); /* zeroed; NULL on OOM */ 22 char* arena_strdup(Arena*, const char* s, size_t len); 23 24 #define arena_new(a, T) ((T*)arena_alloc((a), sizeof(T), _Alignof(T))) 25 #define arena_znew(a, T) ((T*)arena_zalloc((a), sizeof(T), _Alignof(T))) 26 #define arena_array(a, T, n) \ 27 ((T*)arena_alloc((a), sizeof(T) * (size_t)(n), _Alignof(T))) 28 #define arena_zarray(a, T, n) \ 29 ((T*)arena_zalloc((a), sizeof(T) * (size_t)(n), _Alignof(T))) 30 31 #endif