diff options
| author | WormHeamer | 2026-01-02 20:28:54 -0500 |
|---|---|---|
| committer | WormHeamer | 2026-01-02 20:28:54 -0500 |
| commit | f304d7c3c42daeee5884d07ad4c72c1b68bd4500 (patch) | |
| tree | dd1fc8e25966785eda700c9c164f5cf89b19fb28 | |
| parent | c118b375ec2d4d6d4b1810265953a0c0b8783169 (diff) | |
fix dynarrs being allocated on every single DA_*FIT call
| -rw-r--r-- | dynarr.h | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -15,8 +15,10 @@ /* malloc */ #define DA_FIT(da, n) do {\ - (da)->c_ = stdc_bit_ceil((u32)(n));\ - (da)->v = realloc((da)->v, DA_ELEM(da, (da)->c_));\ + if ((n) > (da)->c_) {\ + (da)->c_ = stdc_bit_ceil((u32)(n));\ + (da)->v = realloc((da)->v, DA_ELEM(da, (da)->c_));\ + }\ if (!(da)->v) FAIL_WITH_MSG("failed to realloc dynamic array");\ } while(0) #define DA_GROW(da, n_) DA_FIT(da, (da)->n + (n_)) @@ -26,17 +28,18 @@ } while(0) #define DA_PUSH_MULT(da, o, n_) do {\ DA_GROW(da, n_);\ - memcpy((da)->v + (da)->n, (o), (n_) * sizeof(*(da)->v));\ + memcpy((da)->v + (da)->n, (o), DA_ELEM(da, n_));\ (da)->n += (n_);\ } while(0) /* arena */ #define DA_AFIT(da, a, n) do {\ - u32 da_fit_c = stdc_bit_ceil((u32)(n));\ - (da)->v = arena_realloc(a, (da)->v, DA_ELEM(da, (da)->c_),\ - DA_ELEM(da, da_fit_c), _Alignof(TYPEOF(*(da)->v)));\ - (da)->c_ = da_fit_c;\ + if ((n) > (da)->c_) {\ + u32 da_fit_c = stdc_bit_ceil((u32)(n));\ + (da)->v = resize(a, (da)->v, (da)->c_, da_fit_c);\ + (da)->c_ = da_fit_c;\ + }\ } while(0) #define DA_AGROW(da, a, n_) DA_AFIT(da, a, (da)->n + (n_)) #define DA_APUSH(da, a, ...) do {\ |
