agendafs
A filesystem for your calendar.
git clone git://mccd.space/agendafs| Log | Files | Refs | README | LICENSE | Mail | Website |
tree.h (850B)
1 #ifndef tree_h
2 #define tree_h
3
4 #include "arena.h"
5 #include <stdbool.h>
6 #include <stdlib.h>
7
8 struct tree_node {
9 void *data;
10
11 struct tree_node *parent;
12 struct tree_node **children;
13 size_t child_count;
14 size_t child_capacity;
15
16 void (*free_fn)(void *);
17 };
18
19 struct tree_node *
20 create_tree_node(void *data, void (*free_fn)(void *));
21
22 struct tree_node *
23 rcreate_tree_node(void *data, arena *m);
24
25 bool
26 node_has_children(const struct tree_node *node);
27
28 int
29 move_node(struct tree_node *new_parent, struct tree_node *child);
30
31 void
32 update_node_data(struct tree_node *node, void *data);
33
34 // detach from parent
35 bool
36 detach_tree_node(struct tree_node *node);
37
38 size_t
39 add_child(struct tree_node *parent, struct tree_node *child);
40
41 void
42 free_tree(struct tree_node *node);
43
44 void
45 print_tree(struct tree_node *node, int depth, void (*print_data)(void *));
46
47 #endif
48