|
|
@@ -26,6 +26,7 @@
|
|
|
SCDARRAY_EXPANDER(SCDARRAY_PUSH_BACK_MULTIPLE, type, type_name, push_back_multiple) \
|
|
|
SCDARRAY_EXPANDER(SCDARRAY_AT, type, type_name, at) \
|
|
|
SCDARRAY_EXPANDER(SCDARRAY_RESIZE, type, type_name, resize) \
|
|
|
+ SCDARRAY_EXPANDER(SCDARRAY_REMOVE_NO_RESIZE, type, type_name, remove_no_resize) \
|
|
|
SCDARRAY_EXPANDER(SCDARRAY_REMOVE, type, type_name, remove) \
|
|
|
SCDARRAY_EXPANDER(SCDARRAY_CLEAR_NO_RESIZE, type, type_name, clear_no_resize) \
|
|
|
SCDARRAY_EXPANDER(SCDARRAY_CLEAR, type, type_name, clear)
|
|
|
@@ -58,7 +59,7 @@
|
|
|
|
|
|
// SCDARRAY_STRUCT(int);
|
|
|
|
|
|
-#define SCDARRAY_ALLOC_SIG(type, type_name, func_name) ScufContResult func_name(type_name *darr)
|
|
|
+#define SCDARRAY_ALLOC_SIG(type, type_name, func_name) ScufContResult func_name(type_name *const darr)
|
|
|
|
|
|
#define SCDARRAY_ALLOC(type, type_name, func_name) \
|
|
|
SCDARRAY_ALLOC_SIG(type, type_name, func_name) { \
|
|
|
@@ -71,14 +72,14 @@
|
|
|
return SCUFCONT_SUCCESS; \
|
|
|
}
|
|
|
|
|
|
-#define SCDARRAY_FREE_SIG(type, type_name, func_name) void func_name(type_name *darr)
|
|
|
+#define SCDARRAY_FREE_SIG(type, type_name, func_name) void func_name(type_name *const darr)
|
|
|
|
|
|
#define SCDARRAY_FREE(type, type_name, func_name) \
|
|
|
SCDARRAY_FREE_SIG(type, type_name, func_name) { \
|
|
|
free(darr->data); \
|
|
|
}
|
|
|
|
|
|
-#define SCDARRAY_IS_NULL_SIG(type, type_name, func_name) bool func_name(const type_name *darr)
|
|
|
+#define SCDARRAY_IS_NULL_SIG(type, type_name, func_name) bool func_name(const type_name *const darr)
|
|
|
|
|
|
#define SCDARRAY_IS_NULL(type, type_name, func_name) \
|
|
|
SCDARRAY_IS_NULL_SIG(type, type_name, func_name) { \
|
|
|
@@ -87,7 +88,7 @@
|
|
|
|
|
|
// SCDARRAY_ALLOC(int, SCDArray_int, SCDArray_int_alloc);
|
|
|
|
|
|
-#define SCDARRAY_PUSH_BACK_SIG(type, type_name, func_name) ScufContResult func_name(type_name *darr, const type *const new_elem)
|
|
|
+#define SCDARRAY_PUSH_BACK_SIG(type, type_name, func_name) ScufContResult func_name(type_name *const darr, const type *const new_elem)
|
|
|
|
|
|
#define SCDARRAY_PUSH_BACK(type, type_name, func_name) \
|
|
|
SCDARRAY_PUSH_BACK_SIG(type, type_name, func_name) { \
|
|
|
@@ -148,7 +149,7 @@
|
|
|
|
|
|
// SCDARRAY_AT(char*, SCDArray_charp, SCDArray_charp_at)
|
|
|
|
|
|
-#define SCDARRAY_RESIZE_SIG(type, type_name, func_name) void func_name(type_name *darr)
|
|
|
+#define SCDARRAY_RESIZE_SIG(type, type_name, func_name) void func_name(type_name *const darr)
|
|
|
|
|
|
#define SCDARRAY_RESIZE(type, type_name, func_name) \
|
|
|
SCDARRAY_RESIZE_SIG(type, type_name, func_name) { \
|
|
|
@@ -159,18 +160,29 @@
|
|
|
} \
|
|
|
}
|
|
|
|
|
|
-#define SCDARRAY_REMOVE_SIG(type, type_name, func_name) void func_name(type_name *darr, const size_t i)
|
|
|
+#define SCDARRAY_REMOVE_NO_RESIZE_SIG(type, type_name, func_name) void func_name(type_name *const darr, const size_t i)
|
|
|
|
|
|
-#define SCDARRAY_REMOVE(type, type_name, func_name) \
|
|
|
- SCDARRAY_REMOVE_SIG(type, type_name, func_name) { \
|
|
|
- memmove(darr->data + i, darr->data + i + 1, (darr->len - i) * sizeof(type)); \
|
|
|
- darr->len--; \
|
|
|
- type_name##_resize(darr); \
|
|
|
+#define SCDARRAY_REMOVE_NO_RESIZE(type, type_name, func_name) \
|
|
|
+ SCDARRAY_REMOVE_SIG(type, type_name, func_name) { \
|
|
|
+ if (i != darr->len - 1) { \
|
|
|
+ memmove(darr->data + i, darr->data + i + 1, (darr->len - (i + 1)) * sizeof(type)); \
|
|
|
+ } \
|
|
|
+ darr->len--; \
|
|
|
+ }
|
|
|
+
|
|
|
+// SCDARRAY_EXPANDER(SCDARRAY_REMOVE_NO_RESIZE, char*, charp, remove_no_resize)
|
|
|
+
|
|
|
+#define SCDARRAY_REMOVE_SIG(type, type_name, func_name) void func_name(type_name *const darr, const size_t i)
|
|
|
+
|
|
|
+#define SCDARRAY_REMOVE(type, type_name, func_name) \
|
|
|
+ SCDARRAY_REMOVE_SIG(type, type_name, func_name) { \
|
|
|
+ type_name##_remove_no_resize(darr, i); \
|
|
|
+ type_name##_resize(darr); \
|
|
|
}
|
|
|
|
|
|
// SCDARRAY_EXPANDER(SCDARRAY_REMOVE, char*, charp, remove)
|
|
|
|
|
|
-#define SCDARRAY_CLEAR_NO_RESIZE_SIG(type, type_name, func_name) void func_name(type_name *darr)
|
|
|
+#define SCDARRAY_CLEAR_NO_RESIZE_SIG(type, type_name, func_name) void func_name(type_name *const darr)
|
|
|
|
|
|
#define SCDARRAY_CLEAR_NO_RESIZE(type, type_name, func_name) \
|
|
|
SCDARRAY_CLEAR_NO_RESIZE_SIG(type, type_name, func_name) { \
|
|
|
@@ -179,12 +191,12 @@
|
|
|
|
|
|
// SCDARRAY_CLEAR_NO_RESIZE(char*, SCDArray_charp, SCDArray_charp_clear_no_resize)
|
|
|
|
|
|
-#define SCDARRAY_CLEAR_SIG(type, type_name, func_name) void func_name(type_name *darr)
|
|
|
+#define SCDARRAY_CLEAR_SIG(type, type_name, func_name) void func_name(type_name *const darr)
|
|
|
|
|
|
#define SCDARRAY_CLEAR(type, type_name, func_name) \
|
|
|
SCDARRAY_CLEAR_SIG(type, type_name, func_name) { \
|
|
|
- type_name##_clear_no_resize(darr); \
|
|
|
- type_name##_resize(darr); \
|
|
|
+ type_name##_clear_no_resize(darr); \
|
|
|
+ type_name##_resize(darr); \
|
|
|
}
|
|
|
|
|
|
// SCDARRAY_EXPANDER(SCDARRAY_CLEAR, char*, charp, clear)
|