docs/Writerside/topics/tree.h.md

Fri, 28 Mar 2025 21:51:31 +0100

author
Mike Becker <universe@uap-core.de>
date
Fri, 28 Mar 2025 21:51:31 +0100
changeset 1265
07d67421092a
parent 1255
a9d730c8b94a
child 1266
a34373b17e58
permissions
-rw-r--r--

document remove and dispose for tree.h

relates to #451

1143
0559812df10c assign proper names to the documentation topics
Mike Becker <universe@uap-core.de>
parents: 1142
diff changeset
1 # Tree
1142
9437530176bc add symbols that need documentation as TODOs
Mike Becker <universe@uap-core.de>
parents: 1141
diff changeset
2
1254
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
3 UCX provides several low-level function for working with arbitrary tree structures,
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
4 as well as some high-level functions for trees that induce a certain order on the data they store.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
5
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
6 The following convenience macros allow you to declare and use simple tree structures.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
7
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
8 ```C
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
9 #define CX_TREE_NODE_BASE(Type)
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
10
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
11 #define cx_tree_node_base_layout
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
12 ```
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
13
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
14 The `CX_TREE_NODE_BASE` macro declares four pointers of type `Type*`:
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
15 `parent`, `children`, `last_child`, `prev`, and `next`,
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
16 which must be placed as first member into your struct.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
17
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
18 You can use it for example like this:
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
19 ```C
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
20 typedef struct my_tree_node_s {
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
21 CX_TREE_NODE_BASE(struct my_tree_node_s);
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
22 int value;
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
23 char *desc;
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
24 } MyTreeNode;
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
25 ```
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
26
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
27 The macro `cx_tree_node_base_layout` expands to the offsets of the above-mentioned pointers.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
28 It will become handy when calling the low-level tree functions which expect all offsets to be passed as arguments.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
29
1265
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
30 <warning>
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
31 TODO: forgot to mention that loc_last_child and loc_prev are optional in all functions.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
32 </warning>
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
33
1254
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
34 Before diving into the function definitions, there are four function pointer declarations you should know.
1252
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
35
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
36 ```C
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
37 #include <cx/tree.h>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
38
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
39 typedef void *(*cx_tree_node_create_func)(
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
40 const void *data, void *context);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
41
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
42 typedef int (*cx_tree_search_data_func)(
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
43 const void *node, const void *data);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
44
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
45 typedef int (*cx_tree_search_func)(
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
46 const void *node, const void *new_node);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
47
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
48 typedef void (*cx_tree_relink_func)(
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
49 void *node, const void *old_parent, const void *new_parent);
1254
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
50 ```
1252
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
51
1254
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
52 A `cx_tree_node_create_func` takes a pointer to the `data` the new node shall contain, and a `context` (which might be an allocator, for example).
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
53 It shall allocate and return the created node, or `NULL` when node creation is not possible.
1252
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
54
1254
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
55 A `cx_tree_search_data_func` shall check if the `node` contains the `data`, or if a child node might contain the data.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
56 It shall return zero, when `node` contains the `data`.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
57 When a child node _might_ contain the data, the returned positive number shall indicate how close the match is.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
58 It is _not_ relevant if the data can actually be found in the subtree - the positive number also indicates that the data could be inserted in that subtree.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
59 Only when the entire subtree starting with `node` cannot contain the `data`, a negative number is supposed to be returned.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
60
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
61 A `cx_tree_search_func` behaves exactly the same, except that it does expect a pointer to the `data` but a pointer to a node structure.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
62 In combination with the `cx_tree_node_create_func`, when inserting nodes with the high-level functions, a `new_node` is created first,
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
63 and then an appropriate insertion point is searched with the `cx_tree_search_func`.
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
64
1265
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
65 A `cx_tree_relink_func` is called when an intermediate node was removed from the tree and it's children need to be detached from
1254
6a342294499b add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents: 1252
diff changeset
66 the removed `old_parent` and attached to a `new_parent`.
1265
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
67 The function is called for every child of the removed node and can be used, for example, to update the contents of the node when needed.
1252
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
68
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
69 ## Create
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
70
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
71 ```C
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
72 #include <cx/tree.h>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
73
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
74 CxTree *cxTreeCreate(const CxAllocator *allocator,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
75 cx_tree_node_create_func create_func,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
76 cx_tree_search_func search_func,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
77 cx_tree_search_data_func search_data_func,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
78 ptrdiff_t loc_parent,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
79 ptrdiff_t loc_children, ptrdiff_t loc_last_child,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
80 ptrdiff_t loc_prev, ptrdiff_t loc_next);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
81
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
82 CxTree *cxTreeCreateSimple(const CxAllocator *allocator,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
83 cx_tree_node_create_func create_func,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
84 cx_tree_search_func search_func,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
85 cx_tree_search_data_func search_data_func);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
86
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
87 CxTree *cxTreeCreateWrapped(const CxAllocator *allocator,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
88 void *root,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
89 ptrdiff_t loc_parent,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
90 ptrdiff_t loc_children, ptrdiff_t loc_last_child,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
91 ptrdiff_t loc_prev, ptrdiff_t loc_next);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
92 ```
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
93
1255
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
94 The function `cxTreeCreate()` creates a `CxTree` structure
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
95 where each node created by the `create_func` has the layout specified by the offset arguments.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
96 The function `cxTreeCreateSimple()` is exactly the same, except that it assumes the `cx_tree_node_base_layout`.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
97
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
98 In both cases the tree will be created empty, that is with no nodes, not even a root node.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
99 On the other hand, `cxTreeCreateWrapped()` creates a `CxTree` structure with the specified layout and `root` node
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
100 where `root` may already be the root of a larger tree.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
101
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
102 Note, that a wrapped tree by default has no create or search functions assigned.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
103 Therefore, if you wish to use one of the functions below that needs those function pointers set,
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
104 you will have to set them manually by assigning to the respective fields in the `CxTree` structure.
1252
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
105
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
106 ## Add Nodes
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
107
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
108 ```C
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
109 #include <cx/tree.h>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
110
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
111 void cx_tree_link(void *parent, void *node, ptrdiff_t loc_parent,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
112 ptrdiff_t loc_children, ptrdiff_t loc_last_child,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
113 ptrdiff_t loc_prev, ptrdiff_t loc_next);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
114
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
115 extern unsigned int cx_tree_add_look_around_depth;
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
116
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
117 size_t cx_tree_add_iter(struct cx_iterator_base_s *iter, size_t n,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
118 cx_tree_search_func sfunc, cx_tree_node_create_func cfunc,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
119 void *cdata, void **failed, void *root,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
120 ptrdiff_t loc_parent,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
121 ptrdiff_t loc_children, ptrdiff_t loc_last_child,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
122 ptrdiff_t loc_prev, ptrdiff_t loc_next);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
123
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
124 size_t cx_tree_add_array(const void *src, size_t n, size_t elem_size,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
125 cx_tree_search_func sfunc, cx_tree_node_create_func cfunc,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
126 void *cdata, void **failed, void *root,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
127 ptrdiff_t loc_parent,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
128 ptrdiff_t loc_children, ptrdiff_t loc_last_child,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
129 ptrdiff_t loc_prev, ptrdiff_t loc_next);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
130
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
131 int cx_tree_add(const void *src,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
132 cx_tree_search_func sfunc, cx_tree_node_create_func cfunc,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
133 void *cdata, void **cnode, void *root,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
134 ptrdiff_t loc_parent,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
135 ptrdiff_t loc_children, ptrdiff_t loc_last_child,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
136 ptrdiff_t loc_prev, ptrdiff_t loc_next);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
137
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
138
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
139 int cxTreeAddChild(CxTree *tree, void *parent, const void *data);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
140
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
141 void cxTreeAddChildNode(CxTree *tree, void *parent, void *child);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
142
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
143 void cxTreeSetParent(CxTree *tree, void *parent, void *child);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
144
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
145 int cxTreeInsert(CxTree *tree, const void *data);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
146
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
147 size_t cxTreeInsertIter(CxTree *tree, CxIteratorBase *iter, size_t n);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
148
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
149 size_t cxTreeInsertArray(CxTree *tree, const void *data,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
150 size_t elem_size, size_t n);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
151 ```
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
152
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
153 <warning>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
154 TODO: document
1190
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
155 </warning>
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
156
1252
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
157 ## Size and Depth
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
158
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
159 ```C
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
160 #include <cx/tree.h>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
161
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
162 size_t cxTreeSubtreeSize(CxTree *tree, void *subtree_root);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
163
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
164 size_t cxTreeSubtreeDepth(CxTree *tree, void *subtree_root);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
165
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
166 size_t cxTreeDepth(CxTree *tree);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
167 ```
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
168
1255
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
169 The function `cxTreeSubtreeSize()` counts all nodes belonging to the subtree starting with `subtree_root`.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
170
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
171 The function `cxTreeSubtreeDepth()` reports the maximum depth of the subtree starting with `subtree_root`.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
172 If the `subtree_root` does not have any children, this results in a depth of one.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
173
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
174 The function `cxTreeDepth()` is equivalent to `cxTreeSubtreeDepth()` where `subtree_root` is the root node of the entire tree.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
175
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
176 > Passing a `NULL` pointer as `subtree_root` makes those functions return zero.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
177
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
178 > In the current UCX version there is no separate function `cxTreeSize()`, because
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
179 > the size attribute can be directly accessed in the `CxTree` structure.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
180 > The next UCX version is planned to have also a function for accessing that attribute.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
181 >{style="note"}
1252
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
182
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
183 ## Search
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
184
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
185 ```C
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
186 #include <cx/tree.h>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
187
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
188 #define CX_TREE_SEARCH_INFINITE_DEPTH
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
189
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
190 int cx_tree_search_data(const void *root, size_t depth,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
191 const void *data, cx_tree_search_data_func sfunc,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
192 void **result, ptrdiff_t loc_children, ptrdiff_t loc_next);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
193
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
194 int cx_tree_search(const void *root, size_t depth,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
195 const void *node, cx_tree_search_func sfunc,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
196 void **result, ptrdiff_t loc_children, ptrdiff_t loc_next);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
197
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
198 void *cxTreeFind(CxTree *tree, const void *data);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
199
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
200 void *cxTreeFindInSubtree(CxTree *tree, const void *data,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
201 void *subtree_root, size_t max_depth);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
202 ```
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
203
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
204 <warning>
1255
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
205 TODO: document low level functions
1252
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
206 </warning>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
207
1255
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
208 The function `cxTreeFind()` uses the `search_data_func` of the `CxTree`
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
209 to find the `data` in the tree, and returns a pointer to the node when the data was found (or `NULL`, otherwise).
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
210
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
211 The function `cxTreeFindInSubtree()` is equivalent, except that it restricts the search to nodes
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
212 in the subtree starting with (and including) `subtree_root`, and skipping all nodes below the `max_depth`.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
213 Note, that the `max_depth` is specified in relation to the `subtree_root` and not in relation to the entire tree.
a9d730c8b94a add some tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1254
diff changeset
214
1252
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
215 ## Iterator and Visitor
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
216
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
217 ```C
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
218 #include <cx/tree.h>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
219
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
220 CxTreeIterator cx_tree_iterator(void *root, bool visit_on_exit,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
221 ptrdiff_t loc_children, ptrdiff_t loc_next);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
222
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
223 CxTreeIterator cxTreeIterate(CxTree *tree, bool visit_on_exit);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
224
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
225 CxTreeIterator cxTreeIterateSubtree(CxTree *tree,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
226 void *node, bool visit_on_exit);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
227
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
228 #define cxTreeIteratorContinue(iter)
1142
9437530176bc add symbols that need documentation as TODOs
Mike Becker <universe@uap-core.de>
parents: 1141
diff changeset
229
1252
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
230 void cxTreeIteratorDispose(CxTreeIterator *iter);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
231
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
232
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
233 CxTreeVisitor cx_tree_visitor(void *root,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
234 ptrdiff_t loc_children, ptrdiff_t loc_next);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
235
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
236 CxTreeVisitor cxTreeVisit(CxTree *tree);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
237
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
238 CxTreeVisitor cxTreeVisitSubtree(CxTree *tree, void *node)
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
239
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
240 #define cxTreeVisitorContinue(visitor)
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
241
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
242 void cxTreeVisitorDispose(CxTreeVisitor *visitor);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
243 ```
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
244
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
245 <warning>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
246 TODO: document
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
247 </warning>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
248
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
249 ## Remove
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
250
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
251 ```C
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
252 #include <cx/tree.h>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
253
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
254 void cx_tree_unlink(void *node, ptrdiff_t loc_parent,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
255 ptrdiff_t loc_children, ptrdiff_t loc_last_child,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
256 ptrdiff_t loc_prev, ptrdiff_t loc_next);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
257
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
258 int cxTreeRemoveNode(CxTree *tree, void *node,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
259 cx_tree_relink_func relink_func);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
260
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
261 void cxTreeRemoveSubtree(CxTree *tree, void *node);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
262 ```
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
263
1265
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
264 The low-level function `cx_tree_unlink()` removes the specified `node`,
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
265 as well as the entire subtree beneath that node, from its parent.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
266 The high-level counterpart is `cxTreeRemoveSubtree()`.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
267
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
268 The function `cxTreeRemoveNode()`, on the other hand, _only_ removes the `node` from the tree,
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
269 links all children of `node` to the former parent of `node`,
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
270 and calls the optional `relink_func` for every former child of `node` which will be relinked to a new parent.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
271 Therefore, calling `cxTreeRemoveNode()` on the `root` node is an error and the function returns non-zero.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
272 In all other cases, the function returns zero.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
273
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
274 > When your tree is storing a scene graph, for example, a possible use-case for the `relink_func` might be updating
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
275 > the world transform matrices in the subtree of the removed node.
1252
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
276
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
277 ## Dispose
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
278
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
279 ```C
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
280 #include <cx/tree.h>
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
281
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
282 int cxTreeDestroyNode(CxTree *tree, void *node,
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
283 cx_tree_relink_func relink_func);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
284
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
285 void cxTreeDestroySubtree(CxTree *tree, void *node);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
286
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
287 void cxTreeClear(CxTree *tree);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
288
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
289 void cxTreeFree(CxTree *tree);
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
290 ```
14c227b28a96 basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents: 1190
diff changeset
291
1265
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
292 The function `cxTreeDestroyNode()` first [removes](#remove) the `node` from the tree, like `cxTreeRemoveNode()`,
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
293 and then invokes the [destructor functions](collection.h.md#destructor-functions).
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
294 It is guaranteed, that the simple destructor is called before the advanced destructor.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
295 If no destructor function is registered at all, the behavior is identical to `cxTreeRemoveNode()`.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
296 That means, this function does not deallocate the memory for the node on its own and leaves that entirely to the destructor functions.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
297
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
298 The function `cxTreeDestroySubtree()` performs the above actions for the entire subtree starting with `node`.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
299 The order in which the destructor functions for the nodes of the subtree are called are determined by a [tree iterator](#iterator-and-visitor).
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
300
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
301 The function `cxTreeClear()` is a shorthand for invoking `cxTreeDestroySubtree()` on the root node of the tree.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
302
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
303 The function `cxTreeFree()` behaves like `cxTreeClear()` and then deallocates the memory for the `CxTree` structure.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
304
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
305 > Although `CxTree` supports the general concept of [destructor functions](collection.h.md#destructor-functions),
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
306 > it is not based on `CX_COLLECTION_BASE`.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
307 > Therefore, the `cxDefineDestructor()` and `cxDefineAdvancedDestructor()` macros cannot be used on a `CxTree` and
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
308 > the fields must be set manually.
07d67421092a document remove and dispose for tree.h
Mike Becker <universe@uap-core.de>
parents: 1255
diff changeset
309 >{style="note"}
1190
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
310
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
311 <seealso>
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
312 <category ref="apidoc">
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
313 <a href="https://ucx.sourceforge.io/api/tree_8h.html">tree.h</a>
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
314 </category>
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
315 </seealso>
a7b913d5d589 bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents: 1143
diff changeset
316

mercurial