support_arena.c (1063B)
1 /* Public arena support API bridge. */ 2 3 #include <kit/support/arena.h> 4 5 #include "core/arena.h" 6 #include "core/core.h" 7 8 struct KitArena { 9 Arena inner; 10 }; 11 12 KitStatus kit_arena_new(KitHeap* h, size_t block_size, KitArena** out) { 13 KitArena* a; 14 if (!out) return KIT_INVALID; 15 if (!h) return KIT_INVALID; 16 a = (KitArena*)h->alloc(h, sizeof(*a), _Alignof(KitArena)); 17 if (!a) return KIT_NOMEM; 18 arena_init(&a->inner, (Heap*)h, block_size); 19 *out = a; 20 return KIT_OK; 21 } 22 23 void kit_arena_free(KitArena* a) { 24 KitHeap* h; 25 if (!a) return; 26 h = a->inner.heap; 27 arena_fini(&a->inner); 28 h->free(h, a, sizeof(*a)); 29 } 30 31 void kit_arena_reset(KitArena* a) { 32 if (a) arena_reset(&a->inner); 33 } 34 35 void* kit_arena_alloc(KitArena* a, size_t size, size_t align) { 36 return a ? arena_alloc(&a->inner, size, align) : NULL; 37 } 38 39 void* kit_arena_zalloc(KitArena* a, size_t size, size_t align) { 40 return a ? arena_zalloc(&a->inner, size, align) : NULL; 41 } 42 43 char* kit_arena_strdup(KitArena* a, const char* s, size_t len) { 44 return a ? arena_strdup(&a->inner, s, len) : NULL; 45 }