src/linked_list.c

changeset 641
d402fead3386
parent 640
55cc3b373c5e
child 647
2e6e9d9f2159
child 650
77021e06b1a8
equal deleted inserted replaced
640:55cc3b373c5e 641:d402fead3386
544 node = node->next; 544 node = node->next;
545 } 545 }
546 return n; 546 return n;
547 } 547 }
548 548
549 static int cx_ll_insert_element(
550 struct cx_list_s *list,
551 size_t index,
552 void const *element
553 ) {
554 return 1 != cx_ll_insert_array(list, index, element, 1);
555 }
556
549 static int cx_ll_remove( 557 static int cx_ll_remove(
550 struct cx_list_s *list, 558 struct cx_list_s *list,
551 size_t index 559 size_t index
552 ) { 560 ) {
553 cx_linked_list *ll = (cx_linked_list *) list; 561 cx_linked_list *ll = (cx_linked_list *) list;
680 cx_linked_list_node *choice[2] = {node, node->prev}; 688 cx_linked_list_node *choice[2] = {node, node->prev};
681 int result = cx_ll_insert_at(list, choice[prepend], elem); 689 int result = cx_ll_insert_at(list, choice[prepend], elem);
682 iter->index += prepend * (0 == result); 690 iter->index += prepend * (0 == result);
683 return result; 691 return result;
684 } else { 692 } else {
685 int result = cx_ll_insert_array(list, list->size, elem, 1) != 1; 693 int result = cx_ll_insert_element(list, list->size, elem);
686 iter->index = list->size; 694 iter->index = list->size;
687 return result; 695 return result;
688 } 696 }
689 } 697 }
690 698
700 // do not free the list pointer, this is just a destructor! 708 // do not free the list pointer, this is just a destructor!
701 } 709 }
702 710
703 static cx_list_class cx_linked_list_class = { 711 static cx_list_class cx_linked_list_class = {
704 cx_ll_destructor, 712 cx_ll_destructor,
713 cx_ll_insert_element,
705 cx_ll_insert_array, 714 cx_ll_insert_array,
706 cx_ll_insert_iter, 715 cx_ll_insert_iter,
707 cx_ll_remove, 716 cx_ll_remove,
708 cx_ll_at, 717 cx_ll_at,
709 cx_ll_find, 718 cx_ll_find,

mercurial