Explorar el Código

SCDArray_remove_no_resize. Made some pointer parameters const

Aaro Saila hace 1 mes
padre
commit
8d17e40bc2
Se han modificado 1 ficheros con 27 adiciones y 15 borrados
  1. 27 15
      include/scufcont/DArray.h

+ 27 - 15
include/scufcont/DArray.h

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