소스 검색

Adding macros for dynamic arrays

Vinicius Teshima 1 년 전
부모
커밋
d202786e10
1개의 변경된 파일43개의 추가작업 그리고 0개의 파일을 삭제
  1. 43 0
      include/toolbox/da.h

+ 43 - 0
include/toolbox/da.h

@@ -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