src/tree.c

changeset 453
bb144d08cd44
parent 431
dcf01bb852f4
child 454
4b3219fab71c
--- a/src/tree.c	Sun Oct 03 13:07:48 2021 +0200
+++ b/src/tree.c	Sun Oct 03 14:06:57 2021 +0200
@@ -31,7 +31,7 @@
 
 #define CX_TR_PTR(cur, off) ((void**)(((char*)cur)+off))
 
-void* cx_tree_last(void *node, ptrdiff_t loc_next) {
+void *cx_tree_last(void *node, ptrdiff_t loc_next) {
     void *last;
     do {
         last = node;
@@ -39,40 +39,22 @@
     return last;
 }
 
-int cx_tree_add_node(void *node, ptrdiff_t loc_parent, ptrdiff_t loc_prev, ptrdiff_t loc_next, void *new_node) {
-    void *last = cx_tree_last(node, loc_next);
-    if(!last)
-        return 1;
-    
-    // next pointer must be present
-    *CX_TR_PTR(last, loc_next) = new_node;
-    
-    // optional fields
-    if(loc_parent >= 0) {
+void cx_tree_add_sibling(void *node, ptrdiff_t loc_prev, ptrdiff_t loc_next, ptrdiff_t loc_parent, void *new_node) {
+    cx_linked_list_add(&node, NULL, loc_prev, loc_next, new_node);
+
+    // optional parent link
+    if (loc_parent >= 0) {
         *CX_TR_PTR(new_node, loc_parent) = *CX_TR_PTR(node, loc_parent);
     }
-    if(loc_prev >= 0) {
-        *CX_TR_PTR(new_node, loc_prev) = last;
-    }
-    
-    return 0;
 }
 
-int cx_tree_add_child_node(
-        void *parent,
-        ptrdiff_t loc_parent,
-        ptrdiff_t loc_prev,
-        ptrdiff_t loc_next,
-        void **children_begin,
-        void **children_end,
-        void *new_node)
-{
-    if(cx_linked_list_add(children_begin, children_end, loc_prev, loc_next, new_node)) {
-        return 1;
-    }
-    // optional field
-    if(loc_parent >= 0) {
+void cx_tree_add_child(void **children_begin, void **children_end,
+                  ptrdiff_t loc_prev, ptrdiff_t loc_next, void *new_node,
+                  ptrdiff_t loc_parent, void *parent) {
+    cx_linked_list_add(children_begin, children_end, loc_prev, loc_next, new_node);
+
+    // optional parent link
+    if (loc_parent >= 0) {
         *CX_TR_PTR(new_node, loc_parent) = parent;
     }
-    return 0;
 }

mercurial