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