diff -r 16e2a3391e88 -r d4baf4dd55c3 src/linked_list.c --- a/src/linked_list.c Thu May 23 18:21:36 2024 +0200 +++ b/src/linked_list.c Thu May 23 19:29:14 2024 +0200 @@ -816,12 +816,11 @@ } static void cx_ll_iter_next(void *it) { - struct cx_iterator_base_s *itbase = it; - if (itbase->remove) { - itbase->remove = false; - struct cx_mut_iterator_s *iter = it; - struct cx_list_s *list = iter->src_handle; - cx_linked_list *ll = iter->src_handle; + struct cx_iterator_s *iter = it; + if (iter->remove) { + iter->remove = false; + struct cx_list_s *list = iter->src_handle.m; + cx_linked_list *ll = iter->src_handle.m; cx_linked_list_node *node = iter->elem_handle; iter->elem_handle = node->next; cx_invoke_destructor(list, node->payload); @@ -830,7 +829,6 @@ list->size--; cxFree(list->allocator, node); } else { - struct cx_iterator_s *iter = it; iter->index++; cx_linked_list_node *node = iter->elem_handle; iter->elem_handle = node->next; @@ -838,12 +836,11 @@ } static void cx_ll_iter_prev(void *it) { - struct cx_iterator_base_s *itbase = it; - if (itbase->remove) { - itbase->remove = false; - struct cx_mut_iterator_s *iter = it; - struct cx_list_s *list = iter->src_handle; - cx_linked_list *ll = iter->src_handle; + struct cx_iterator_s *iter = it; + if (iter->remove) { + iter->remove = false; + struct cx_list_s *list = iter->src_handle.m; + cx_linked_list *ll = iter->src_handle.m; cx_linked_list_node *node = iter->elem_handle; iter->elem_handle = node->prev; iter->index--; @@ -853,7 +850,6 @@ list->size--; cxFree(list->allocator, node); } else { - struct cx_iterator_s *iter = it; iter->index--; cx_linked_list_node *node = iter->elem_handle; iter->elem_handle = node->prev; @@ -873,24 +869,24 @@ ) { CxIterator iter; iter.index = index; - iter.src_handle = list; + iter.src_handle.c = list; iter.elem_handle = cx_ll_node_at((cx_linked_list const *) list, index); iter.elem_size = list->item_size; iter.elem_count = list->size; - iter.base.valid = cx_ll_iter_valid; - iter.base.current = cx_ll_iter_current; - iter.base.next = backwards ? cx_ll_iter_prev : cx_ll_iter_next; - iter.base.mutating = false; - iter.base.remove = false; + iter.valid = cx_ll_iter_valid; + iter.current = cx_ll_iter_current; + iter.next = backwards ? cx_ll_iter_prev : cx_ll_iter_next; + iter.mutating = false; + iter.remove = false; return iter; } static int cx_ll_insert_iter( - CxMutIterator *iter, + CxIterator *iter, void const *elem, int prepend ) { - struct cx_list_s *list = iter->src_handle; + struct cx_list_s *list = iter->src_handle.m; cx_linked_list_node *node = iter->elem_handle; if (node != NULL) { assert(prepend >= 0 && prepend <= 1);