1 #ifndef MAILBOX_TREE_H
2 #define MAILBOX_TREE_H
3 
4 #include "mailbox-list.h"
5 
6 struct mailbox_node {
7 	struct mailbox_node *parent;
8 	struct mailbox_node *next;
9 	struct mailbox_node *children;
10 
11 	char *name;
12 	enum mailbox_info_flags flags;
13 };
14 ARRAY_DEFINE_TYPE(mailbox_node, struct mailbox_node *);
15 
16 struct mailbox_tree_context *mailbox_tree_init(char separator);
17 struct mailbox_tree_context *
18 mailbox_tree_init_size(char separator, unsigned int mailbox_node_size);
19 void mailbox_tree_deinit(struct mailbox_tree_context **tree);
20 
21 void mailbox_tree_set_separator(struct mailbox_tree_context *tree,
22 				char separator);
23 void mailbox_tree_set_parents_nonexistent(struct mailbox_tree_context *tree);
24 void mailbox_tree_clear(struct mailbox_tree_context *tree);
25 pool_t mailbox_tree_get_pool(struct mailbox_tree_context *tree);
26 
27 struct mailbox_node *
28 mailbox_tree_get(struct mailbox_tree_context *tree, const char *path,
29 		 bool *created_r);
30 
31 struct mailbox_node *
32 mailbox_tree_lookup(struct mailbox_tree_context *tree, const char *path);
33 
34 struct mailbox_tree_iterate_context * ATTR_NULL(2)
35 mailbox_tree_iterate_init(struct mailbox_tree_context *tree,
36 			  struct mailbox_node *root, unsigned int flags_mask);
37 struct mailbox_node *
38 mailbox_tree_iterate_next(struct mailbox_tree_iterate_context *ctx,
39 			  const char **path_r);
40 void mailbox_tree_iterate_deinit(struct mailbox_tree_iterate_context **ctx);
41 
42 struct mailbox_tree_context *mailbox_tree_dup(struct mailbox_tree_context *src);
43 void mailbox_tree_sort(struct mailbox_tree_context *tree);
44 
45 #endif
46