mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-17 21:30:39 +01:00
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:
parent
509dd6e20b
commit
dc37942c4e
1 changed files with 17 additions and 6 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue