diff --git a/m-array.h b/m-array.h index 317be56f..3e5f469a 100644 --- a/m-array.h +++ b/m-array.h @@ -311,6 +311,23 @@ } \ \ static inline void \ + M_C3(array_, name, _reserve)(M_C3(array_, name, _t) v, size_t alloc) \ + { \ + assert (v != NULL && v->size <= v->alloc); \ + if (v->size > alloc) { \ + alloc = v->size; \ + } \ + type *ptr = M_GET_REALLOC oplist (type, v->ptr, alloc); \ + if (M_UNLIKELY (ptr == NULL) ) { \ + M_MEMORY_FULL(sizeof (type) * alloc); \ + return; \ + } \ + v->ptr = ptr; \ + v->alloc = alloc; \ + assert (v != NULL && v->size <= v->alloc); \ + } \ + \ + static inline void \ M_C3(array_, name, _set_at2)(M_C3(array_, name,_t) v, size_t idx, type x) \ { \ assert (v != NULL && v->size <= v->alloc); \ diff --git a/tests/test-marray.c b/tests/test-marray.c index 4ae8bd2a..e0fec809 100644 --- a/tests/test-marray.c +++ b/tests/test-marray.c @@ -146,6 +146,13 @@ static void test_uint(void) array_uint_swap(v,v2); assert(array_uint_size(v) == 1005); assert(array_uint_size(v2) == 0); + + array_uint_reserve(v, 100); + assert(array_uint_size(v) == 1005); + assert(array_uint_capacity(v) == 1005); + array_uint_reserve(v, 10000); + assert(array_uint_size(v) == 1005); + assert(array_uint_capacity(v) == 10000); array_uint_clear(v); array_uint_clear(v2);