| 250 *end = insert_end; |
250 *end = insert_end; |
| 251 } |
251 } |
| 252 } else { |
252 } else { |
| 253 cx_linked_list_link(insert_end, successor, loc_prev, loc_next); |
253 cx_linked_list_link(insert_end, successor, loc_prev, loc_next); |
| 254 } |
254 } |
| 255 } |
|
| 256 |
|
| 257 void cx_linked_list_insert_sorted( |
|
| 258 void **begin, |
|
| 259 void **end, |
|
| 260 ptrdiff_t loc_prev, |
|
| 261 ptrdiff_t loc_next, |
|
| 262 void *new_node, |
|
| 263 cx_compare_func cmp_func |
|
| 264 ) { |
|
| 265 assert(ll_next(new_node) == NULL); |
|
| 266 cx_linked_list_insert_sorted_chain( |
|
| 267 begin, end, loc_prev, loc_next, new_node, cmp_func); |
|
| 268 } |
255 } |
| 269 |
256 |
| 270 static void *cx_linked_list_insert_sorted_chain_impl( |
257 static void *cx_linked_list_insert_sorted_chain_impl( |
| 271 void **begin, |
258 void **begin, |
| 272 void **end, |
259 void **end, |
| 446 ) { |
446 ) { |
| 447 cx_compare_func_wrapper wrapper = {cmp_func}; |
447 cx_compare_func_wrapper wrapper = {cmp_func}; |
| 448 return cx_linked_list_insert_sorted_chain_impl( |
448 return cx_linked_list_insert_sorted_chain_impl( |
| 449 begin, end, loc_prev, loc_next, |
449 begin, end, loc_prev, loc_next, |
| 450 insert_begin, cx_acmp_wrap, &wrapper, false); |
450 insert_begin, cx_acmp_wrap, &wrapper, false); |
| |
451 } |
| |
452 |
| |
453 void cx_linked_list_insert_sorted_c( |
| |
454 void **begin, |
| |
455 void **end, |
| |
456 ptrdiff_t loc_prev, |
| |
457 ptrdiff_t loc_next, |
| |
458 void *new_node, |
| |
459 cx_compare_func2 cmp_func, |
| |
460 void *context |
| |
461 ) { |
| |
462 assert(ll_next(new_node) == NULL); |
| |
463 cx_linked_list_insert_sorted_chain_c( |
| |
464 begin, end, loc_prev, loc_next, new_node, cmp_func, context); |
| |
465 } |
| |
466 |
| |
467 void cx_linked_list_insert_sorted_chain_c( |
| |
468 void **begin, |
| |
469 void **end, |
| |
470 ptrdiff_t loc_prev, |
| |
471 ptrdiff_t loc_next, |
| |
472 void *insert_begin, |
| |
473 cx_compare_func2 cmp_func, |
| |
474 void *context |
| |
475 ) { |
| |
476 cx_linked_list_insert_sorted_chain_impl( |
| |
477 begin, end, loc_prev, loc_next, |
| |
478 insert_begin, cmp_func, context, true); |
| |
479 } |
| |
480 |
| |
481 int cx_linked_list_insert_unique_c( |
| |
482 void **begin, |
| |
483 void **end, |
| |
484 ptrdiff_t loc_prev, |
| |
485 ptrdiff_t loc_next, |
| |
486 void *new_node, |
| |
487 cx_compare_func2 cmp_func, |
| |
488 void *context |
| |
489 ) { |
| |
490 assert(ll_next(new_node) == NULL); |
| |
491 return NULL != cx_linked_list_insert_unique_chain_c( |
| |
492 begin, end, loc_prev, loc_next, new_node, cmp_func, context); |
| |
493 } |
| |
494 |
| |
495 void *cx_linked_list_insert_unique_chain_c( |
| |
496 void **begin, |
| |
497 void **end, |
| |
498 ptrdiff_t loc_prev, |
| |
499 ptrdiff_t loc_next, |
| |
500 void *insert_begin, |
| |
501 cx_compare_func2 cmp_func, |
| |
502 void *context |
| |
503 ) { |
| |
504 return cx_linked_list_insert_sorted_chain_impl( |
| |
505 begin, end, loc_prev, loc_next, |
| |
506 insert_begin, cmp_func, context, false); |
| 451 } |
507 } |
| 452 |
508 |
| 453 size_t cx_linked_list_remove_chain( |
509 size_t cx_linked_list_remove_chain( |
| 454 void **begin, |
510 void **begin, |
| 455 void **end, |
511 void **end, |