14#include <kernel/types.h>
17#include <utils/compiler.h>
20#define INIT_TREE_NODE(_node) \
21 _node = ((struct tree_node){ \
22 .children = LLIST_INIT((_node).children), \
41#define FOREACH_CHILDREN(_iter, _node) FOREACH_LLIST (_iter, &(_node)->children)
void tree_add_child_sorted(tree_node_t *node, tree_node_t *child, compare_t)
Add the given node as a children of another in a sorted manner.
Definition: tree.c:10
tree_node_t * tree_find_child(tree_node_t *node, compare_t, const void *data)
Find a specific child of a node.
Definition: tree.c:29
void tree_add_child(tree_node_t *node, tree_node_t *child)
Add the given node as a children of another.
Definition: tree.c:4
tree_node_t * tree_remove(tree_node_t *node)
Remove a node from its containing tree (if any).
Definition: tree.c:17
void tree_free(tree_t root, void(*free_function)(tree_node_t *))
Free all the elements contained inside a tree.
Definition: tree.c:39
tree_node_t * tree_t
The root of a tree structure.
Definition: tree.h:35
The head of a doubly linked list.
Definition: linked_list.h:43
Intrusive doubly-linked list node.
Definition: linked_list.h:27
A single node inside a tree.
Definition: tree.h:28
struct tree_node * parent
Parent node.
Definition: tree.h:30
llist_t children
Linked list of children of this node.
Definition: tree.h:31