src/tree.c

branch
feature/tree_add
changeset 864
7d3061f212cb
parent 863
4a220afebad0
child 866
1f636de4a63f
--- a/src/tree.c	Sat Aug 17 11:14:39 2024 +0200
+++ b/src/tree.c	Sun Aug 18 11:26:34 2024 +0200
@@ -429,10 +429,12 @@
 void *cx_tree_add(
         void const *src,
         cx_tree_search_func sfunc,
-        cx_tree_node_create_fun cfunc,
+        cx_tree_node_create_func cfunc,
+        void *cdata,
         void **root,
         ptrdiff_t loc_parent,
         ptrdiff_t loc_children,
+        ptrdiff_t loc_last_child,
         ptrdiff_t loc_prev,
         ptrdiff_t loc_next
 ) {
@@ -440,13 +442,17 @@
     return NULL;
 }
 
+unsigned int cx_tree_add_look_around_depth = 3;
+
 size_t cx_tree_add_iter(
         struct cx_iterator_base_s *iter,
         cx_tree_search_func sfunc,
-        cx_tree_node_create_fun cfunc,
+        cx_tree_node_create_func cfunc,
+        void *cdata,
         void **root,
         ptrdiff_t loc_parent,
         ptrdiff_t loc_children,
+        ptrdiff_t loc_last_child,
         ptrdiff_t loc_prev,
         ptrdiff_t loc_next
 ) {
@@ -459,10 +465,12 @@
         size_t num,
         size_t elem_size,
         cx_tree_search_func sfunc,
-        cx_tree_node_create_fun cfunc,
+        cx_tree_node_create_func cfunc,
+        void *cdata,
         void **root,
         ptrdiff_t loc_parent,
         ptrdiff_t loc_children,
+        ptrdiff_t loc_last_child,
         ptrdiff_t loc_prev,
         ptrdiff_t loc_next
 ) {
@@ -474,8 +482,9 @@
     // special case: one element does not need an iterator
     if (num == 1) {
         if (NULL != cx_tree_add(
-                src, sfunc, cfunc, root,
-                loc_parent, loc_children, loc_prev, loc_next)) {
+                src, sfunc, cfunc, cdata, root,
+                loc_parent, loc_children, loc_last_child,
+                loc_prev, loc_next)) {
             return 1;
         } else {
             return 0;
@@ -484,7 +493,8 @@
 
     // otherwise, create iterator and hand over to other function
     CxIterator iter = cxIterator(src, elem_size, num);
-    return cx_tree_add_iter(cxIteratorRef(iter), sfunc, cfunc, root,
-                            loc_parent, loc_children, loc_prev, loc_next);
+    return cx_tree_add_iter(cxIteratorRef(iter), sfunc, cfunc, cdata, root,
+                            loc_parent, loc_children, loc_last_child,
+                            loc_prev, loc_next);
 }
 

mercurial