summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dynarr.h11
1 files changed, 7 insertions, 4 deletions
diff --git a/dynarr.h b/dynarr.h
index f8e5f20..46a77f9 100644
--- a/dynarr.h
+++ b/dynarr.h
@@ -13,14 +13,17 @@ typedef struct { size_t count, capacity; } DynArrHeader;
#define DYNARR(type) type *
#define DA_HEADER(da) ((DynArrHeader*)(da) - 1)
-#define DA_INIT_CAP 16
-#define DA_INIT(da) do {\
- char *da_init_ptr = ((char*)malloc(sizeof(DynArrHeader) + DA_INIT_CAP * sizeof(*da)));\
+#define DA_DEFAULT_INIT_SIZE 16
+
+#define DA_INIT_SIZE(da, sz) do {\
+ char *da_init_ptr = ((char*)malloc(sizeof(DynArrHeader) + sz * sizeof(*da)));\
if (!da_init_ptr) err(1, "dynamic array allocation failed");\
da = (void *)(da_init_ptr + sizeof(DynArrHeader));\
- *DA_HEADER(da) = (DynArrHeader) { 0, DA_INIT_CAP };\
+ *DA_HEADER(da) = (DynArrHeader) { 0, sz };\
} while(0)
+#define DA_INIT(da) DA_INIT_SIZE(da, DA_DEFAULT_INIT_SIZE)
+
#define DA_FREE(da)\
free(DA_HEADER(da))