|
|
@@ -45,34 +45,34 @@
|
|
|
|
|
|
#define SCDARRAY_STRUCT(type, type_name) \
|
|
|
typedef struct { \
|
|
|
- type* data; \
|
|
|
+ type *data; \
|
|
|
size_t len; \
|
|
|
size_t capacity; \
|
|
|
} SCDArray_##type_name;
|
|
|
|
|
|
// SCDARRAY_STRUCT(int);
|
|
|
|
|
|
-#define SCDARRAY_ALLOC_SIG(type, type_name, func_name) ScufContResult func_name(type_name* darr)
|
|
|
-
|
|
|
-#define SCDARRAY_ALLOC(type, type_name, func_name) \
|
|
|
- SCDARRAY_ALLOC_SIG(type, type_name, func_name) { \
|
|
|
- darr->data = (type*) calloc(1, sizeof(type)); \
|
|
|
- if (darr->data == NULL) { \
|
|
|
- return SCUFCONT_OUT_OF_MEMORY; \
|
|
|
- } \
|
|
|
- darr->len = 0; \
|
|
|
- darr->capacity = 1; \
|
|
|
- return SCUFCONT_SUCCESS; \
|
|
|
+#define SCDARRAY_ALLOC_SIG(type, type_name, func_name) ScufContResult func_name(type_name *darr)
|
|
|
+
|
|
|
+#define SCDARRAY_ALLOC(type, type_name, func_name) \
|
|
|
+ SCDARRAY_ALLOC_SIG(type, type_name, func_name) { \
|
|
|
+ darr->data = (type *) calloc(1, sizeof(type)); \
|
|
|
+ if (darr->data == NULL) { \
|
|
|
+ return SCUFCONT_OUT_OF_MEMORY; \
|
|
|
+ } \
|
|
|
+ darr->len = 0; \
|
|
|
+ darr->capacity = 1; \
|
|
|
+ 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 *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 *darr)
|
|
|
|
|
|
#define SCDARRAY_IS_NULL(type, type_name, func_name) \
|
|
|
SCDARRAY_IS_NULL_SIG(type, type_name, func_name) { \
|
|
|
@@ -81,41 +81,41 @@
|
|
|
|
|
|
// 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* new_elem)
|
|
|
-
|
|
|
-#define SCDARRAY_PUSH_BACK(type, type_name, func_name) \
|
|
|
- SCDARRAY_PUSH_BACK_SIG(type, type_name, func_name) { \
|
|
|
- if (darr->len + 1 > darr->capacity) { \
|
|
|
- darr->capacity *= 2; \
|
|
|
- darr->data = (type*) realloc(darr->data, darr->capacity * sizeof(*new_elem)); \
|
|
|
- if (darr->data == NULL) { \
|
|
|
- return SCUFCONT_OUT_OF_MEMORY; \
|
|
|
- } \
|
|
|
- } \
|
|
|
- memcpy(darr->data + darr->len, new_elem, sizeof(*new_elem)); \
|
|
|
- darr->len++; \
|
|
|
- return SCUFCONT_SUCCESS; \
|
|
|
+#define SCDARRAY_PUSH_BACK_SIG(type, type_name, func_name) ScufContResult func_name(type_name *darr, const type *new_elem)
|
|
|
+
|
|
|
+#define SCDARRAY_PUSH_BACK(type, type_name, func_name) \
|
|
|
+ SCDARRAY_PUSH_BACK_SIG(type, type_name, func_name) { \
|
|
|
+ if (darr->len + 1 > darr->capacity) { \
|
|
|
+ darr->capacity *= 2; \
|
|
|
+ darr->data = (type *) realloc(darr->data, darr->capacity * sizeof(*new_elem)); \
|
|
|
+ if (darr->data == NULL) { \
|
|
|
+ return SCUFCONT_OUT_OF_MEMORY; \
|
|
|
+ } \
|
|
|
+ } \
|
|
|
+ memcpy(darr->data + darr->len, new_elem, sizeof(*new_elem)); \
|
|
|
+ darr->len++; \
|
|
|
+ return SCUFCONT_SUCCESS; \
|
|
|
}
|
|
|
|
|
|
-#define SCDARRAY_PUSH_BACK_MULTIPLE_SIG(type, type_name, func_name) ScufContResult func_name(type_name* const darr, const type* const new_elems, const size_t new_elems_n)
|
|
|
-
|
|
|
-#define SCDARRAY_PUSH_BACK_MULTIPLE(type, type_name, func_name) \
|
|
|
- SCDARRAY_PUSH_BACK_MULTIPLE_SIG(type, type_name, func_name) { \
|
|
|
- if (darr->len + new_elems_n > darr->capacity) { \
|
|
|
- darr->data = (type*) realloc(darr->data, (darr->capacity + new_elems_n) * sizeof(type)); \
|
|
|
- if (darr->data == NULL) { \
|
|
|
- return SCUFCONT_OUT_OF_MEMORY; \
|
|
|
- } \
|
|
|
- darr->capacity += new_elems_n; \
|
|
|
- } \
|
|
|
- memcpy(darr->data + darr->len, new_elems, sizeof(type) * new_elems_n); \
|
|
|
- darr->len += new_elems_n; \
|
|
|
- return SCUFCONT_SUCCESS; \
|
|
|
+#define SCDARRAY_PUSH_BACK_MULTIPLE_SIG(type, type_name, func_name) ScufContResult func_name(type_name *const darr, const type *const new_elems, const size_t new_elems_n)
|
|
|
+
|
|
|
+#define SCDARRAY_PUSH_BACK_MULTIPLE(type, type_name, func_name) \
|
|
|
+ SCDARRAY_PUSH_BACK_MULTIPLE_SIG(type, type_name, func_name) { \
|
|
|
+ if (darr->len + new_elems_n > darr->capacity) { \
|
|
|
+ darr->data = (type *) realloc(darr->data, (darr->capacity + new_elems_n) * sizeof(type)); \
|
|
|
+ if (darr->data == NULL) { \
|
|
|
+ return SCUFCONT_OUT_OF_MEMORY; \
|
|
|
+ } \
|
|
|
+ darr->capacity += new_elems_n; \
|
|
|
+ } \
|
|
|
+ memcpy(darr->data + darr->len, new_elems, sizeof(type) * new_elems_n); \
|
|
|
+ darr->len += new_elems_n; \
|
|
|
+ return SCUFCONT_SUCCESS; \
|
|
|
}
|
|
|
|
|
|
// SCDARRAY_PUSH_BACK_MULTIPLE(int, SCDArray_int, SCDArray_int_push_back_multiple)
|
|
|
|
|
|
-#define SCDARRAY_AT_SIG(type, type_name, func_name) type* func_name(const type_name* const darr, const size_t i)
|
|
|
+#define SCDARRAY_AT_SIG(type, type_name, func_name) type *func_name(const type_name *const darr, const size_t i)
|
|
|
|
|
|
// SCDARRAY_PUSH_BACK(int, SCDArray_int, SCDArray_int_push_back);
|
|
|
|
|
|
@@ -142,12 +142,13 @@
|
|
|
|
|
|
// SCDARRAY_AT(char*, SCDArray_charp, SCDArray_charp_at)
|
|
|
|
|
|
-#define SCDARRAY_REMOVE_SIG(type, type_name, func_name) void func_name(type_name* darr, const size_t i)
|
|
|
+#define SCDARRAY_REMOVE_SIG(type, type_name, func_name) void func_name(type_name *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--; \
|
|
|
+ darr->data = realloc(darr->data, sizeof(type) * darr->len); \
|
|
|
}
|
|
|
|
|
|
// SCDARRAY_REMOVE(char*, SCDArray_charp, SCDArray_charp_remove)
|