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