src/list.c

changeset 876
f4ce7df9cff0
parent 875
ee84ac776cbc
child 877
608b14deea18
--- a/src/list.c	Thu Aug 29 21:30:52 2024 +0200
+++ b/src/list.c	Sun Sep 01 14:48:43 2024 +0200
@@ -79,6 +79,17 @@
     return list->climpl->insert_array(list, index, array, n);
 }
 
+static size_t cx_pl_insert_sorted(
+        struct cx_list_s *list,
+        void const *array,
+        size_t n
+) {
+    cx_pl_hack_cmpfunc(list);
+    size_t result = list->climpl->insert_sorted(list, array, n);
+    cx_pl_unhack_cmpfunc(list);
+    return result;
+}
+
 static int cx_pl_insert_iter(
         struct cx_iterator_s *iter,
         void const *elem,
@@ -167,6 +178,7 @@
         cx_pl_destructor,
         cx_pl_insert_element,
         cx_pl_insert_array,
+        cx_pl_insert_sorted,
         cx_pl_insert_iter,
         cx_pl_remove,
         cx_pl_clear,
@@ -239,6 +251,7 @@
         NULL,
         NULL,
         NULL,
+        NULL,
         cx_emptyl_noop,
         NULL,
         cx_emptyl_at,
@@ -290,6 +303,21 @@
     return i;
 }
 
+size_t cx_list_default_insert_sorted(
+        struct cx_list_s *list,
+        void const *sorted_data,
+        size_t n
+) {
+    size_t elem_size = list->collection.elem_size;
+    cx_compare_func cmp = list->collection.cmpfunc;
+    char const *src = sorted_data;
+
+    size_t r = cx_list_default_insert_array(list, 0, src, n);
+    cx_list_default_sort(list);
+
+    return r;
+}
+
 void cx_list_default_sort(struct cx_list_s *list) {
     size_t elem_size = list->collection.elem_size;
     size_t list_size = list->collection.size;

mercurial