src/linked_list.c

changeset 1429
6e0c3a8a914a
parent 1426
3a89b31f0724
--- a/src/linked_list.c	Fri Oct 17 15:04:56 2025 +0200
+++ b/src/linked_list.c	Fri Oct 17 16:53:24 2025 +0200
@@ -1126,10 +1126,10 @@
 
 static void cx_ll_iter_next(void *it) {
     struct cx_iterator_s *iter = it;
+    cx_linked_list *ll = iter->src_handle;
     if (iter->base.remove) {
         iter->base.remove = false;
-        struct cx_list_s *list = iter->src_handle.m;
-        cx_linked_list *ll = iter->src_handle.m;
+        struct cx_list_s *list = iter->src_handle;
         char *node = iter->elem_handle;
         iter->elem_handle = CX_LL_PTR(node, ll->loc_next);
         cx_invoke_destructor(list, node + ll->loc_data);
@@ -1139,7 +1139,6 @@
         iter->elem_count--;
         cxFree(list->collection.allocator, node);
     } else {
-        const cx_linked_list *ll = iter->src_handle.c;
         iter->index++;
         void *node = iter->elem_handle;
         iter->elem_handle = CX_LL_PTR(node, ll->loc_next);
@@ -1148,10 +1147,10 @@
 
 static void cx_ll_iter_prev(void *it) {
     struct cx_iterator_s *iter = it;
+    cx_linked_list *ll = iter->src_handle;
     if (iter->base.remove) {
         iter->base.remove = false;
-        struct cx_list_s *list = iter->src_handle.m;
-        cx_linked_list *ll = iter->src_handle.m;
+        struct cx_list_s *list = iter->src_handle;
         char *node = iter->elem_handle;
         iter->elem_handle = CX_LL_PTR(node, ll->loc_prev);
         iter->index--;
@@ -1162,7 +1161,6 @@
         iter->elem_count--;
         cxFree(list->collection.allocator, node);
     } else {
-        const cx_linked_list *ll = iter->src_handle.c;
         iter->index--;
         char *node = iter->elem_handle;
         iter->elem_handle = CX_LL_PTR(node, ll->loc_prev);
@@ -1171,7 +1169,7 @@
 
 static void *cx_ll_iter_current(const void *it) {
     const struct cx_iterator_s *iter = it;
-    const cx_linked_list *ll = iter->src_handle.c;
+    const cx_linked_list *ll = iter->src_handle;
     char *node = iter->elem_handle;
     return node + ll->loc_data;
 }
@@ -1183,14 +1181,14 @@
 ) {
     CxIterator iter;
     iter.index = index;
-    iter.src_handle.c = list;
+    iter.src_handle = (void*)list;
     iter.elem_handle = cx_ll_node_at((const cx_linked_list *) list, index);
     iter.elem_size = list->collection.elem_size;
     iter.elem_count = list->collection.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.allow_remove = true;
     iter.base.remove = false;
     return iter;
 }
@@ -1200,8 +1198,8 @@
         const void *elem,
         int prepend
 ) {
-    struct cx_list_s *list = iter->src_handle.m;
-    cx_linked_list *ll = iter->src_handle.m;
+    struct cx_list_s *list = iter->src_handle;
+    cx_linked_list *ll = iter->src_handle;
     void *node = iter->elem_handle;
     if (node != NULL) {
         assert(prepend >= 0 && prepend <= 1);

mercurial