# HG changeset patch
# User Mike Becker <universe@uap-core.de>
# Date 1724957295 -7200
# Node ID cdce47f34d489a7f0dfbb110b93fd3fc8887b9e0
# Parent  d607a184925a81737bc1f93c8fb3280bdcff1c30
fix inserting via iterator correctly increases element count

fixes #423

diff -r d607a184925a -r cdce47f34d48 src/array_list.c
--- a/src/array_list.c	Tue Aug 20 18:02:39 2024 +0200
+++ b/src/array_list.c	Thu Aug 29 20:48:15 2024 +0200
@@ -284,14 +284,20 @@
                 iter->index + 1 - prepend,
                 elem
         );
-        if (result == 0 && prepend != 0) {
-            iter->index++;
-            iter->elem_handle = ((char *) iter->elem_handle) + list->collection.elem_size;
+        if (result == 0) {
+            iter->elem_count++;
+            if (prepend != 0) {
+                iter->index++;
+                iter->elem_handle = ((char *) iter->elem_handle) + list->collection.elem_size;
+            }
         }
         return result;
     } else {
         int result = cx_arl_insert_element(list, list->collection.size, elem);
-        iter->index = list->collection.size;
+        if (result == 0) {
+            iter->elem_count++;
+            iter->index = list->collection.size;
+        }
         return result;
     }
 }
diff -r d607a184925a -r cdce47f34d48 src/linked_list.c
--- a/src/linked_list.c	Tue Aug 20 18:02:39 2024 +0200
+++ b/src/linked_list.c	Thu Aug 29 20:48:15 2024 +0200
@@ -892,11 +892,19 @@
         assert(prepend >= 0 && prepend <= 1);
         cx_linked_list_node *choice[2] = {node, node->prev};
         int result = cx_ll_insert_at(list, choice[prepend], elem);
-        iter->index += prepend * (0 == result);
+        if (result == 0) {
+            iter->elem_count++;
+            if (prepend) {
+                iter->index++;
+            }
+        }
         return result;
     } else {
         int result = cx_ll_insert_element(list, list->collection.size, elem);
-        iter->index = list->collection.size;
+        if (result == 0) {
+            iter->elem_count++;
+            iter->index = list->collection.size;
+        }
         return result;
     }
 }