kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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 }