|
@@ -0,0 +1,43 @@
|
|
|
|
|
+#ifndef DA_H
|
|
|
|
|
+#define DA_H
|
|
|
|
|
+
|
|
|
|
|
+#include <stdlib.h>
|
|
|
|
|
+
|
|
|
|
|
+#define DA_CREATE(da, item_size) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ da.cap = 16; \
|
|
|
|
|
+ da.size = 0; \
|
|
|
|
|
+ da.items = calloc(da.cap, item_size); \
|
|
|
|
|
+ } while(0)
|
|
|
|
|
+
|
|
|
|
|
+#define DA_DESTROY(da) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ free(da.items); \
|
|
|
|
|
+ } while(0)
|
|
|
|
|
+
|
|
|
|
|
+#define DA_CLEAR(da) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ da.size = 0; \
|
|
|
|
|
+ } while(0)
|
|
|
|
|
+
|
|
|
|
|
+#define DA_DELETE(da, index) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ if ( index > da.size ) { \
|
|
|
|
|
+ break; \
|
|
|
|
|
+ } \
|
|
|
|
|
+ for ( size_t i = index; i < da.size - 1; ++i ) { \
|
|
|
|
|
+ da.items[i] = da.items[i+1]; \
|
|
|
|
|
+ } \
|
|
|
|
|
+ --da.size; \
|
|
|
|
|
+ } while(0)
|
|
|
|
|
+
|
|
|
|
|
+#define DA_APPEND(da, item) \
|
|
|
|
|
+ do { \
|
|
|
|
|
+ if ( da.size == da.cap ) { \
|
|
|
|
|
+ da.cap <<= 2; \
|
|
|
|
|
+ da.items = realloc(da.items, da.cap * sizeof(*da.items)); \
|
|
|
|
|
+ } \
|
|
|
|
|
+ da.items[da.size++] = item; \
|
|
|
|
|
+ } while(0)
|
|
|
|
|
+
|
|
|
|
|
+#endif
|