diff -r b4b248a8b2d6 -r 14c227b28a96 docs/Writerside/topics/tree.h.md
--- a/docs/Writerside/topics/tree.h.md Mon Mar 17 21:06:55 2025 +0100
+++ b/docs/Writerside/topics/tree.h.md Tue Mar 18 19:03:18 2025 +0100
@@ -1,36 +1,221 @@
# Tree
-New Feature - will be documented soon!
+TODO: intro text
+
+
+```C
+#include
+
+typedef void *(*cx_tree_node_create_func)(
+ const void *data, void *context);
+
+typedef int (*cx_tree_search_data_func)(
+ const void *node, const void *data);
+
+typedef int (*cx_tree_search_func)(
+ const void *node, const void *new_node);
+
+typedef void (*cx_tree_relink_func)(
+ void *node, const void *old_parent, const void *new_parent);
+
+#define CX_TREE_NODE_BASE(type)
+
+#define cx_tree_node_base_layout
+```
+
+## Create
+
+```C
+#include
+
+CxTree *cxTreeCreate(const CxAllocator *allocator,
+ cx_tree_node_create_func create_func,
+ cx_tree_search_func search_func,
+ cx_tree_search_data_func search_data_func,
+ ptrdiff_t loc_parent,
+ ptrdiff_t loc_children, ptrdiff_t loc_last_child,
+ ptrdiff_t loc_prev, ptrdiff_t loc_next);
+
+CxTree *cxTreeCreateSimple(const CxAllocator *allocator,
+ cx_tree_node_create_func create_func,
+ cx_tree_search_func search_func,
+ cx_tree_search_data_func search_data_func);
+
+CxTree *cxTreeCreateWrapped(const CxAllocator *allocator,
+ void *root,
+ ptrdiff_t loc_parent,
+ ptrdiff_t loc_children, ptrdiff_t loc_last_child,
+ ptrdiff_t loc_prev, ptrdiff_t loc_next);
+```
+
+
+TODO: document
+
+
+## Add Nodes
+
+```C
+#include
+
+void cx_tree_link(void *parent, void *node, ptrdiff_t loc_parent,
+ ptrdiff_t loc_children, ptrdiff_t loc_last_child,
+ ptrdiff_t loc_prev, ptrdiff_t loc_next);
+
+extern unsigned int cx_tree_add_look_around_depth;
+
+size_t cx_tree_add_iter(struct cx_iterator_base_s *iter, size_t n,
+ cx_tree_search_func sfunc, cx_tree_node_create_func cfunc,
+ void *cdata, void **failed, void *root,
+ ptrdiff_t loc_parent,
+ ptrdiff_t loc_children, ptrdiff_t loc_last_child,
+ ptrdiff_t loc_prev, ptrdiff_t loc_next);
+
+size_t cx_tree_add_array(const void *src, size_t n, size_t elem_size,
+ cx_tree_search_func sfunc, cx_tree_node_create_func cfunc,
+ void *cdata, void **failed, void *root,
+ ptrdiff_t loc_parent,
+ ptrdiff_t loc_children, ptrdiff_t loc_last_child,
+ ptrdiff_t loc_prev, ptrdiff_t loc_next);
+
+int cx_tree_add(const void *src,
+ cx_tree_search_func sfunc, cx_tree_node_create_func cfunc,
+ void *cdata, void **cnode, void *root,
+ ptrdiff_t loc_parent,
+ ptrdiff_t loc_children, ptrdiff_t loc_last_child,
+ ptrdiff_t loc_prev, ptrdiff_t loc_next);
+
+
+int cxTreeAddChild(CxTree *tree, void *parent, const void *data);
+
+void cxTreeAddChildNode(CxTree *tree, void *parent, void *child);
+
+void cxTreeSetParent(CxTree *tree, void *parent, void *child);
+
+int cxTreeInsert(CxTree *tree, const void *data);
+
+size_t cxTreeInsertIter(CxTree *tree, CxIteratorBase *iter, size_t n);
+
+size_t cxTreeInsertArray(CxTree *tree, const void *data,
+ size_t elem_size, size_t n);
+```
+
+
+TODO: document
-
+void cxTreeIteratorDispose(CxTreeIterator *iter);
+
+
+CxTreeVisitor cx_tree_visitor(void *root,
+ ptrdiff_t loc_children, ptrdiff_t loc_next);
+
+CxTreeVisitor cxTreeVisit(CxTree *tree);
+
+CxTreeVisitor cxTreeVisitSubtree(CxTree *tree, void *node)
+
+#define cxTreeVisitorContinue(visitor)
+
+void cxTreeVisitorDispose(CxTreeVisitor *visitor);
+```
+
+
+TODO: document
+
+
+## Remove
+
+```C
+#include
+
+void cx_tree_unlink(void *node, ptrdiff_t loc_parent,
+ ptrdiff_t loc_children, ptrdiff_t loc_last_child,
+ ptrdiff_t loc_prev, ptrdiff_t loc_next);
+
+int cxTreeRemoveNode(CxTree *tree, void *node,
+ cx_tree_relink_func relink_func);
+
+void cxTreeRemoveSubtree(CxTree *tree, void *node);
+```
+
+
+TODO: document
+
+
+## Dispose
+
+```C
+#include
+
+int cxTreeDestroyNode(CxTree *tree, void *node,
+ cx_tree_relink_func relink_func);
+
+void cxTreeDestroySubtree(CxTree *tree, void *node);
+
+void cxTreeClear(CxTree *tree);
+
+void cxTreeFree(CxTree *tree);
+```
+
+
+TODO: document
+