diff options
author | WormHeamer | 2025-02-28 14:54:00 -0500 |
---|---|---|
committer | WormHeamer | 2025-02-28 14:54:00 -0500 |
commit | 93608e2f90689c0eddd4714debcab9892f1dc7d7 (patch) | |
tree | dc82450cb45ea5df205257e84ca299cd0fc95077 /dynarr.h | |
parent | 528460889a2ea771e5ee81d6573a0e17d584ab6e (diff) | |
parent | 22ee6c213cc0058ca833b88f67cb938c20bfc740 (diff) |
Merge remote-tracking branch 'refs/remotes/origin/master'
Diffstat (limited to 'dynarr.h')
-rw-r--r-- | dynarr.h | 27 |
1 files changed, 12 insertions, 15 deletions
diff --git a/dynarr.h b/dynarr.h index 6feea5a..9fe8701 100644 --- a/dynarr.h +++ b/dynarr.h @@ -4,7 +4,6 @@ #include <stdlib.h> #include <stdint.h> #include <string.h> -#include <err.h> #include "stdwrm.h" @@ -13,28 +12,26 @@ typedef struct { size_t count, capacity; } DynArrHeader; #define DYNARR(type) type * #define DA_HEADER(da) ((DynArrHeader*)(da) - 1) -#define DA_DEFAULT_INIT_SIZE 16 - -#define DA_INIT_SIZE(da, sz) do {\ - char *stdwrm__da_init_ptr = ((char*)malloc(sizeof(DynArrHeader) + sz * sizeof(*da)));\ - if (!stdwrm__da_init_ptr) err(1, "dynamic array allocation failed");\ - da = (void *)(stdwrm__da_init_ptr + sizeof(DynArrHeader));\ - *DA_HEADER(da) = (DynArrHeader) { 0, sz };\ +#define DA_INIT_CAP 16 +#define DA_INIT_SZ(da, cap) do {\ + char *da_init_ptr = ((char*)malloc(sizeof(DynArrHeader) + cap * sizeof(*da)));\ + if (!da_init_ptr) { fprintf(stderr, "dynamic array allocation failed\n"); abort(); }\ + da = (void *)(da_init_ptr + sizeof(DynArrHeader));\ + *DA_HEADER(da) = (DynArrHeader) { 0, cap };\ } while(0) -#define DA_INIT(da) DA_INIT_SIZE(da, DA_DEFAULT_INIT_SIZE) +#define DA_INIT(da) DA_INIT_SZ(da, DA_INIT_CAP) #define DA_FREE(da)\ free(DA_HEADER(da)) #define DA_LEN(da) (DA_HEADER(da)->count) #define DA_FIT(da, count) do {\ - size_t stdwrm__da_fit_count = count;\ - if (stdwrm__da_fit_count >= DA_HEADER(da)->capacity) {\ - while (stdwrm__da_fit_count >= DA_HEADER(da)->capacity) DA_HEADER(da)->capacity <<= 1;\ - char *stdwrm__da_fit_ptr = realloc(DA_HEADER(da), sizeof(DynArrHeader) + DA_HEADER(da)->capacity * sizeof(*da));\ - if (!stdwrm__da_fit_ptr) err(1, "dynamic array reallocation failed");\ - (da) = (void *)(stdwrm__da_fit_ptr + sizeof(DynArrHeader));\ + if (count >= DA_HEADER(da)->capacity) {\ + while (count >= DA_HEADER(da)->capacity) DA_HEADER(da)->capacity <<= 1;\ + char *da_fit_ptr = realloc(DA_HEADER(da), sizeof(DynArrHeader) + DA_HEADER(da)->capacity * sizeof(*da));\ + if (!da_fit_ptr) { fprintf(stderr, "dynamic array reallocation failed\n"); abort(); }\ + (da) = (void *)(da_fit_ptr + sizeof(DynArrHeader));\ }\ } while(0) |