From 471eb472dbd3462b6a5ab21f85621e16c411709b Mon Sep 17 00:00:00 2001 From: comex Date: Sun, 1 Mar 2015 13:20:08 -0500 Subject: add vec --- lib/cbit/vec.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 lib/cbit/vec.c (limited to 'lib/cbit/vec.c') diff --git a/lib/cbit/vec.c b/lib/cbit/vec.c new file mode 100644 index 0000000..21038a2 --- /dev/null +++ b/lib/cbit/vec.c @@ -0,0 +1,23 @@ +#include "cbit/vec.h" +#include + +void vec_realloc_internal(struct vec_internal *vi, size_t new_capacity, + size_t esize) { + size_t new_size = safe_mul(new_capacity, esize); + if (vi->els == vi->storage) { + void *new = malloc(new_size); + memcpy(new, vi->els, vi->capacity * esize); + vi->els = new; + } else { + vi->els = realloc(vi->els, new_size); + } + vi->capacity = new_capacity; +} +void vec_realloc_internal_as_necessary(struct vec_internal *vi, + size_t min_capacity, + size_t esize) { + if (min_capacity > vi->capacity) + vec_realloc_internal(vi, safe_mul(vi->capacity, 2), esize); + else if (min_capacity < vi->capacity / 3) + vec_realloc_internal(vi, vi->capacity / 3, esize); +} -- cgit v1.2.3