agendafs

A filesystem for your calendar.

git clone git://mccd.space/agendafs

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