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 }