kit

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

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