[Mesa-dev] [PATCH 3/9] u_dynarray: add util_dynarray_enlarge
Qiang Yu
yuq825 at gmail.com
Sat Mar 16 01:28:48 UTC 2019
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.
Signed-off-by: Qiang Yu <yuq825 at gmail.com>
---
src/util/u_dynarray.h | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/src/util/u_dynarray.h b/src/util/u_dynarray.h
index 9bed2b9c25c..c5217082b7f 100644
--- a/src/util/u_dynarray.h
+++ b/src/util/u_dynarray.h
@@ -77,11 +77,9 @@ 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 newsize)
{
- void *p;
if (newsize > buf->capacity) {
if (buf->capacity == 0)
buf->capacity = DYN_ARRAY_INITIAL_SIZE;
@@ -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_enlarge(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;
--
2.17.1
More information about the mesa-dev
mailing list