src/linked_list.c

changeset 1624
aab23807d562
parent 1618
ef7cab6eb131
equal deleted inserted replaced
1623:592aae491264 1624:aab23807d562
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,
407 *end = new_end; 394 *end = new_end;
408 } 395 }
409 return dup_begin; 396 return dup_begin;
410 } 397 }
411 398
399 void cx_linked_list_insert_sorted(
400 void **begin,
401 void **end,
402 ptrdiff_t loc_prev,
403 ptrdiff_t loc_next,
404 void *new_node,
405 cx_compare_func cmp_func
406 ) {
407 assert(ll_next(new_node) == NULL);
408 cx_linked_list_insert_sorted_chain(
409 begin, end, loc_prev, loc_next, new_node, cmp_func);
410 }
411
412 void cx_linked_list_insert_sorted_chain( 412 void cx_linked_list_insert_sorted_chain(
413 void **begin, 413 void **begin,
414 void **end, 414 void **end,
415 ptrdiff_t loc_prev, 415 ptrdiff_t loc_prev,
416 ptrdiff_t loc_next, 416 ptrdiff_t loc_next,
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,

mercurial