src/linked_list.c

changeset 829
7d4e31d295af
parent 807
c8d692131b1e
equal deleted inserted replaced
828:88fa3381206d 829:7d4e31d295af
864 struct cx_iterator_s const *iter = it; 864 struct cx_iterator_s const *iter = it;
865 cx_linked_list_node *node = iter->elem_handle; 865 cx_linked_list_node *node = iter->elem_handle;
866 return node->payload; 866 return node->payload;
867 } 867 }
868 868
869 static bool cx_ll_iter_flag_rm(void *it) {
870 struct cx_iterator_base_s *iter = it;
871 if (iter->mutating) {
872 iter->remove = true;
873 return true;
874 } else {
875 return false;
876 }
877 }
878
879 static CxIterator cx_ll_iterator( 869 static CxIterator cx_ll_iterator(
880 struct cx_list_s const *list, 870 struct cx_list_s const *list,
881 size_t index, 871 size_t index,
882 bool backwards 872 bool backwards
883 ) { 873 ) {
886 iter.src_handle = list; 876 iter.src_handle = list;
887 iter.elem_handle = cx_ll_node_at((cx_linked_list const *) list, index); 877 iter.elem_handle = cx_ll_node_at((cx_linked_list const *) list, index);
888 iter.base.valid = cx_ll_iter_valid; 878 iter.base.valid = cx_ll_iter_valid;
889 iter.base.current = cx_ll_iter_current; 879 iter.base.current = cx_ll_iter_current;
890 iter.base.next = backwards ? cx_ll_iter_prev : cx_ll_iter_next; 880 iter.base.next = backwards ? cx_ll_iter_prev : cx_ll_iter_next;
891 iter.base.flag_removal = cx_ll_iter_flag_rm;
892 iter.base.mutating = false; 881 iter.base.mutating = false;
893 iter.base.remove = false; 882 iter.base.remove = false;
894 return iter; 883 return iter;
895 } 884 }
896 885

mercurial