Vinicius Teshima 1 жил өмнө
parent
commit
653f35db51
1 өөрчлөгдсөн 18 нэмэгдсэн , 17 устгасан
  1. 18 17
      src/da.h

+ 18 - 17
src/da.h

@@ -22,10 +22,10 @@
 		size_t cap;			\
 	} name
 
-#define DA_CREATE(da, item_size)			\
-	do {						\
-		(da).cap = 16;				\
-		(da).size = 0;				\
+#define DA_CREATE(da, item_size)				\
+	do {							\
+		(da).cap = 16;					\
+		(da).size = 0;					\
 		(da).items = calloc((da).cap, item_size);	\
 	} while(0)
 
@@ -44,9 +44,8 @@
 		if ( index > (da).size ) {				\
 			break;						\
 		}							\
-		for ( size_t i = index; i < (da).size - 1; ++i ) {	\
-			(da).items[i] = (da).items[i+1];			\
-		}							\
+		memmove((da).items+index, (da).items+index+1,		\
+			(da).cap - (index+1));				\
 		--(da).size;						\
 	} while(0)
 
@@ -55,14 +54,16 @@
 
 #define _DA_INSERT(da, item, index, i)					\
 	do {								\
-		if ( (da).size+1 >= (da).cap ) {				\
-			(da).cap *= 2;					\
-			(da).items = realloc((da).items,			\
-					   (da).cap * sizeof(*(da).items)); \
+		if ( index > (da.size) ) {				\
+			break;						\
 		}							\
-		for ( size_t i = (da).cap; i > index; --i ) {		\
-			(da).items[i] = (da).items[i-1];			\
+		if ( (da).size+1 >= (da).cap ) {			\
+			(da).cap *= 2;					\
+			(da).items = realloc((da).items,		\
+					     (da).cap * sizeof(*(da).items)); \
 		}							\
+		memmove((da).items+index+1, (da).items+index,		\
+			(da).cap - index);				\
 		(da).items[index] = item;				\
 		(da).size++;						\
 	} while(0)
@@ -72,12 +73,12 @@
 
 #define DA_APPEND(da, item)						\
 	do {								\
-		if ( (da).size+1 >= (da).cap ) {				\
+		if ( (da).size+1 >= (da).cap ) {			\
 			(da).cap *= 2;					\
-			(da).items = realloc((da).items,			\
-					   (da).cap * sizeof(*(da).items)); \
+			(da).items = realloc((da).items,		\
+					     (da).cap * sizeof(*(da).items)); \
 		}							\
-		(da).items[(da).size++] = item;				\
+		(da).items[(da).size++] = item;			\
 	} while(0)
 
 #define DA_TAIL(da) (da).items[(da).size-1]