Thu, 20 Mar 2025 20:12:53 +0100
add intro text for tree.h doc
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 | |
6a342294499b
add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents:
1252
diff
changeset
|
30 | 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
|
31 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
32 | ```C |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
33 | #include <cx/tree.h> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
34 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
35 | typedef void *(*cx_tree_node_create_func)( |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
36 | const void *data, void *context); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
37 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
38 | typedef int (*cx_tree_search_data_func)( |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
39 | const void *node, const void *data); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
40 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
41 | typedef int (*cx_tree_search_func)( |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
42 | const void *node, const void *new_node); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
43 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
44 | typedef void (*cx_tree_relink_func)( |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
45 | 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
|
46 | ``` |
1252
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
47 | |
1254
6a342294499b
add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents:
1252
diff
changeset
|
48 | 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
|
49 | 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
|
50 | |
1254
6a342294499b
add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents:
1252
diff
changeset
|
51 | 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
|
52 | 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
|
53 | 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
|
54 | 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
|
55 | 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
|
56 | |
6a342294499b
add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents:
1252
diff
changeset
|
57 | 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
|
58 | 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
|
59 | 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
|
60 | |
6a342294499b
add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents:
1252
diff
changeset
|
61 | A `cx_tree_relink_func` is used when an intermediate node is removed from the tree and it's children need to be detached from |
6a342294499b
add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents:
1252
diff
changeset
|
62 | the removed `old_parent` and attached to a `new_parent`. |
1252
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
63 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
64 | ## Create |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
65 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
66 | ```C |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
67 | #include <cx/tree.h> |
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 | CxTree *cxTreeCreate(const CxAllocator *allocator, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
70 | cx_tree_node_create_func create_func, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
71 | cx_tree_search_func search_func, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
72 | 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
|
73 | ptrdiff_t loc_parent, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
74 | 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
|
75 | 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
|
76 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
77 | CxTree *cxTreeCreateSimple(const CxAllocator *allocator, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
78 | cx_tree_node_create_func create_func, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
79 | cx_tree_search_func search_func, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
80 | 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
|
81 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
82 | CxTree *cxTreeCreateWrapped(const CxAllocator *allocator, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
83 | void *root, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
84 | ptrdiff_t loc_parent, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
85 | 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
|
86 | 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
|
87 | ``` |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
88 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
89 | <warning> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
90 | TODO: document |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
91 | </warning> |
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 | ## Add Nodes |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
94 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
95 | ```C |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
96 | #include <cx/tree.h> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
97 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
98 | 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
|
99 | 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
|
100 | 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
|
101 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
102 | 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
|
103 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
104 | 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
|
105 | 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
|
106 | void *cdata, void **failed, void *root, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
107 | ptrdiff_t loc_parent, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
108 | 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
|
109 | 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
|
110 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
111 | 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
|
112 | 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
|
113 | void *cdata, void **failed, void *root, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
114 | ptrdiff_t loc_parent, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
115 | 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
|
116 | 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
|
117 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
118 | int cx_tree_add(const void *src, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
119 | 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
|
120 | void *cdata, void **cnode, void *root, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
121 | ptrdiff_t loc_parent, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
122 | 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
|
123 | 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
|
124 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
125 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
126 | 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
|
127 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
128 | 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
|
129 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
130 | 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
|
131 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
132 | int cxTreeInsert(CxTree *tree, const void *data); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
133 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
134 | 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
|
135 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
136 | 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
|
137 | size_t elem_size, size_t n); |
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 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
140 | <warning> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
141 | TODO: document |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
142 | </warning> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
143 | |
1252
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
144 | ## Size and Depth |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
145 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
146 | ```C |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
147 | #include <cx/tree.h> |
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 cxTreeSubtreeSize(CxTree *tree, void *subtree_root); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
150 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
151 | 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
|
152 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
153 | size_t cxTreeDepth(CxTree *tree); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
154 | ``` |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
155 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
156 | <warning> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
157 | TODO: document |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
158 | </warning> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
159 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
160 | ## Search |
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 | ```C |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
163 | #include <cx/tree.h> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
164 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
165 | #define CX_TREE_SEARCH_INFINITE_DEPTH |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
166 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
167 | 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
|
168 | 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
|
169 | 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
|
170 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
171 | 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
|
172 | 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
|
173 | 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
|
174 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
175 | void *cxTreeFind(CxTree *tree, const void *data); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
176 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
177 | void *cxTreeFindInSubtree(CxTree *tree, const void *data, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
178 | void *subtree_root, size_t max_depth); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
179 | ``` |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
180 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
181 | <warning> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
182 | TODO: document |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
183 | </warning> |
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 | ## Iterator and Visitor |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
186 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
187 | ```C |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
188 | #include <cx/tree.h> |
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 | 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
|
191 | 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
|
192 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
193 | 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
|
194 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
195 | CxTreeIterator cxTreeIterateSubtree(CxTree *tree, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
196 | void *node, bool visit_on_exit); |
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 | #define cxTreeIteratorContinue(iter) |
1142
9437530176bc
add symbols that need documentation as TODOs
Mike Becker <universe@uap-core.de>
parents:
1141
diff
changeset
|
199 | |
1252
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
200 | void cxTreeIteratorDispose(CxTreeIterator *iter); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
201 | |
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 | CxTreeVisitor cx_tree_visitor(void *root, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
204 | 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
|
205 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
206 | CxTreeVisitor cxTreeVisit(CxTree *tree); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
207 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
208 | CxTreeVisitor cxTreeVisitSubtree(CxTree *tree, void *node) |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
209 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
210 | #define cxTreeVisitorContinue(visitor) |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
211 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
212 | void cxTreeVisitorDispose(CxTreeVisitor *visitor); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
213 | ``` |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
214 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
215 | <warning> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
216 | TODO: document |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
217 | </warning> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
218 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
219 | ## Remove |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
220 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
221 | ```C |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
222 | #include <cx/tree.h> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
223 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
224 | 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
|
225 | 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
|
226 | 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
|
227 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
228 | int cxTreeRemoveNode(CxTree *tree, void *node, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
229 | cx_tree_relink_func relink_func); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
230 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
231 | void cxTreeRemoveSubtree(CxTree *tree, void *node); |
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 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
234 | <warning> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
235 | TODO: document |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
236 | </warning> |
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 | ## Dispose |
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 | ```C |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
241 | #include <cx/tree.h> |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
242 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
243 | int cxTreeDestroyNode(CxTree *tree, void *node, |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
244 | cx_tree_relink_func relink_func); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
245 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
246 | void cxTreeDestroySubtree(CxTree *tree, void *node); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
247 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
248 | void cxTreeClear(CxTree *tree); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
249 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
250 | void cxTreeFree(CxTree *tree); |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
251 | ``` |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
252 | |
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
253 | <warning> |
1254
6a342294499b
add intro text for tree.h doc
Mike Becker <universe@uap-core.de>
parents:
1252
diff
changeset
|
254 | TODO: document and mention the destructor support |
1252
14c227b28a96
basic structure for tree.h documentation
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
255 | </warning> |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
256 | |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
257 | <seealso> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
258 | <category ref="apidoc"> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
259 | <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
|
260 | </category> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
261 | </seealso> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1143
diff
changeset
|
262 |