ucx/tree.c

changeset 1016
ccde46662db7
parent 992
f421aef8f865
--- a/ucx/tree.c	Wed Dec 17 18:31:20 2025 +0100
+++ b/ucx/tree.c	Thu Dec 18 17:50:15 2025 +0100
@@ -28,8 +28,6 @@
 
 #include "cx/tree.h"
 
-#include "cx/array_list.h"
-
 #include <assert.h>
 
 #define CX_TREE_PTR(cur, off) (*(void**)(((char*)(cur))+(off)))
@@ -352,7 +350,16 @@
         }
     } else {
         // node has children, push the first child onto the stack and enter it
-        cx_array_simple_add(iter->stack, children);
+        if (iter->stack_size >= iter->stack_capacity) {
+            const size_t newcap = iter->stack_capacity + 8;
+            if (cxReallocArrayDefault(&iter->stack, newcap, sizeof(void*))) {
+                // we cannot return an error in this function
+                abort(); // LCOV_EXCL_LINE
+            }
+            iter->stack_capacity = newcap;
+        }
+        iter->stack[iter->stack_size] = children;
+        iter->stack_size++;
         iter->node = children;
         iter->counter++;
     }
@@ -717,7 +724,7 @@
     }
 
     // otherwise, create iterator and hand over to other function
-    CxIterator iter = cxIterator(src, elem_size, num, false);
+    CxIterator iter = cxIterator(src, elem_size, num);
     return cx_tree_add_iter(cxIteratorRef(iter), num, sfunc,
                             cfunc, cdata, failed, root,
                             loc_parent, loc_children, loc_last_child,
@@ -902,7 +909,7 @@
 size_t cxTreeInsertArray(CxTree *tree, const void *data, size_t elem_size, size_t n) {
     if (n == 0) return 0;
     if (n == 1) return 0 == cxTreeInsert(tree, data) ? 1 : 0;
-    CxIterator iter = cxIterator(data, elem_size, n, false);
+    CxIterator iter = cxIterator(data, elem_size, n);
     return cxTreeInsertIter(tree, cxIteratorRef(iter), n);
 }
 

mercurial