u_dynarray: add util_dynarray_grow_cap

This is for the case that user only know a max size
it wants to append to the array and enlarge the array
capacity before writing into it.

v2:
- rename newsize to newcap
- rename util_dynarray_enlarge to util_dynarray_grow_cap

Signed-off-by: Qiang Yu <yuq825@gmail.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
This commit is contained in:
Qiang Yu 2018-02-19 21:44:44 +08:00
parent 509dd6e20b
commit dc37942c4e

View file

@ -77,16 +77,14 @@ util_dynarray_clear(struct util_dynarray *buf)
#define DYN_ARRAY_INITIAL_SIZE 64
/* use util_dynarray_trim to reduce the allocated storage */
static inline void *
util_dynarray_resize(struct util_dynarray *buf, unsigned newsize)
util_dynarray_ensure_cap(struct util_dynarray *buf, unsigned newcap)
{
void *p;
if (newsize > buf->capacity) {
if (newcap > buf->capacity) {
if (buf->capacity == 0)
buf->capacity = DYN_ARRAY_INITIAL_SIZE;
while (newsize > buf->capacity)
while (newcap > buf->capacity)
buf->capacity *= 2;
if (buf->mem_ctx) {
@ -96,7 +94,20 @@ util_dynarray_resize(struct util_dynarray *buf, unsigned newsize)
}
}
p = (void *)((char *)buf->data + buf->size);
return (void *)((char *)buf->data + buf->size);
}
static inline void *
util_dynarray_grow_cap(struct util_dynarray *buf, int diff)
{
return util_dynarray_ensure_cap(buf, buf->size + diff);
}
/* use util_dynarray_trim to reduce the allocated storage */
static inline void *
util_dynarray_resize(struct util_dynarray *buf, unsigned newsize)
{
void *p = util_dynarray_ensure_cap(buf, newsize);
buf->size = newsize;
return p;