diff -r ee84ac776cbc -r f4ce7df9cff0 src/list.c --- 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;