summaryrefslogtreecommitdiff
path: root/src/vector.h
diff options
context:
space:
mode:
authorGlenn Strauss <gstrauss@gluelogic.com>2022-12-10 15:18:26 -0500
committerGlenn Strauss <gstrauss@gluelogic.com>2022-12-10 15:25:28 -0500
commit5fe8322e167d4e8360c9076a7119329a25f85f27 (patch)
treeb8f647ef974f4001ddd7fb8ef8baa4f52542d760 /src/vector.h
parent5e14db43b7212b52f1cfcd2b0fce41df7fc419eb (diff)
downloadlighttpd-git-5fe8322e167d4e8360c9076a7119329a25f85f27.tar.gz
[core] create non-inlined vector_resize()
reduce inlined code generated by use of vector_*_push() when calling vector_*_reserve() derived from local vector.[ch]
Diffstat (limited to 'src/vector.h')
-rw-r--r--src/vector.h14
1 files changed, 3 insertions, 11 deletions
diff --git a/src/vector.h b/src/vector.h
index 49b300fc..ec5ece44 100644
--- a/src/vector.h
+++ b/src/vector.h
@@ -4,15 +4,10 @@
#include "ck.h" /* ck_assert() ck_calloc() */
-static inline size_t vector_align_size(size_t s) {
- size_t a = (s + 15) & ~(size_t)15uL;
- return (a < s) ? s : a;
-}
-
void vector_free(void *data);
__attribute_returns_nonnull__
-void *vector_realloc(void *data, size_t elem_size, size_t size, size_t used);
+void *vector_resize(void *data, size_t elem_size, size_t *size, size_t used, size_t x);
#define DEFINE_TYPED_VECTOR(name, entry, release) \
typedef struct vector_ ## name { \
@@ -41,11 +36,8 @@ void *vector_realloc(void *data, size_t elem_size, size_t size, size_t used);
} \
} \
static inline void vector_ ## name ## _reserve(vector_ ## name *v, size_t p) { \
- if (v->size - v->used < p) { \
- ck_assert(v->used < SIZE_MAX - p); \
- v->size = vector_align_size(v->used + p); \
- v->data = vector_realloc(v->data, sizeof(entry), v->size, v->used); \
- } \
+ if (v->size - v->used < p) \
+ v->data = vector_resize(v->data, sizeof(entry), &v->size, v->used, p); \
} \
static inline void vector_ ## name ## _push(vector_ ## name *v, entry e) { \
vector_ ## name ## _reserve(v, 1); \