src/list.c

changeset 876
f4ce7df9cff0
parent 875
ee84ac776cbc
child 877
608b14deea18
equal deleted inserted replaced
875:ee84ac776cbc 876:f4ce7df9cff0
77 size_t n 77 size_t n
78 ) { 78 ) {
79 return list->climpl->insert_array(list, index, array, n); 79 return list->climpl->insert_array(list, index, array, n);
80 } 80 }
81 81
82 static size_t cx_pl_insert_sorted(
83 struct cx_list_s *list,
84 void const *array,
85 size_t n
86 ) {
87 cx_pl_hack_cmpfunc(list);
88 size_t result = list->climpl->insert_sorted(list, array, n);
89 cx_pl_unhack_cmpfunc(list);
90 return result;
91 }
92
82 static int cx_pl_insert_iter( 93 static int cx_pl_insert_iter(
83 struct cx_iterator_s *iter, 94 struct cx_iterator_s *iter,
84 void const *elem, 95 void const *elem,
85 int prepend 96 int prepend
86 ) { 97 ) {
165 176
166 static cx_list_class cx_pointer_list_class = { 177 static cx_list_class cx_pointer_list_class = {
167 cx_pl_destructor, 178 cx_pl_destructor,
168 cx_pl_insert_element, 179 cx_pl_insert_element,
169 cx_pl_insert_array, 180 cx_pl_insert_array,
181 cx_pl_insert_sorted,
170 cx_pl_insert_iter, 182 cx_pl_insert_iter,
171 cx_pl_remove, 183 cx_pl_remove,
172 cx_pl_clear, 184 cx_pl_clear,
173 cx_pl_swap, 185 cx_pl_swap,
174 cx_pl_at, 186 cx_pl_at,
233 return iter; 245 return iter;
234 } 246 }
235 247
236 static cx_list_class cx_empty_list_class = { 248 static cx_list_class cx_empty_list_class = {
237 cx_emptyl_noop, 249 cx_emptyl_noop,
250 NULL,
238 NULL, 251 NULL,
239 NULL, 252 NULL,
240 NULL, 253 NULL,
241 NULL, 254 NULL,
242 cx_emptyl_noop, 255 cx_emptyl_noop,
286 list, index + i, src + (i * elem_size))) { 299 list, index + i, src + (i * elem_size))) {
287 return i; 300 return i;
288 } 301 }
289 } 302 }
290 return i; 303 return i;
304 }
305
306 size_t cx_list_default_insert_sorted(
307 struct cx_list_s *list,
308 void const *sorted_data,
309 size_t n
310 ) {
311 size_t elem_size = list->collection.elem_size;
312 cx_compare_func cmp = list->collection.cmpfunc;
313 char const *src = sorted_data;
314
315 size_t r = cx_list_default_insert_array(list, 0, src, n);
316 cx_list_default_sort(list);
317
318 return r;
291 } 319 }
292 320
293 void cx_list_default_sort(struct cx_list_s *list) { 321 void cx_list_default_sort(struct cx_list_s *list) {
294 size_t elem_size = list->collection.elem_size; 322 size_t elem_size = list->collection.elem_size;
295 size_t list_size = list->collection.size; 323 size_t list_size = list->collection.size;

mercurial