kit

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

vec.c (520B)


      1 /* See core/vec.h. Doubling growth, heap-backed. */
      2 
      3 #include "core/vec.h"
      4 
      5 #define VEC_INIT_CAP 8u
      6 
      7 int vec_grow_(Heap* h, void** ptr, u32* cap, u32 want, size_t elem_size,
      8               size_t elem_align) {
      9   void* p;
     10   u32 old_cap = *cap;
     11   u32 new_cap;
     12   if (want <= old_cap) return 0;
     13   new_cap = old_cap ? old_cap : VEC_INIT_CAP;
     14   while (new_cap < want) new_cap *= 2;
     15   p = h->realloc(h, *ptr, elem_size * old_cap, elem_size * new_cap, elem_align);
     16   if (!p) return 1;
     17   *ptr = p;
     18   *cap = new_cap;
     19   return 0;
     20 }