00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef GRU_TREE_H
00017 #define GRU_TREE_H
00018
00019 #include "gru_collection_callbacks.h"
00020 #include "gru_list.h"
00021 #include "gru_node.h"
00022
00023 #include "common/gru_portable.h"
00024
00025 #ifdef __cplusplus
00026 extern "C" {
00027 #endif
00028
00029
00030
00031
00032
00033 typedef struct gru_tree_node_t_ {
00034 gru_list_t *children;
00035 const void *data;
00036 } gru_tree_node_t;
00037
00043 gru_export gru_tree_node_t *gru_tree_new(const void *data);
00044
00049 gru_export void gru_tree_destroy(gru_tree_node_t **ptr);
00050
00058 gru_export gru_tree_node_t *gru_tree_add_child(gru_tree_node_t *node, const void *data);
00059
00067 gru_export const gru_tree_node_t *gru_tree_search(gru_tree_node_t *node,
00068 compare_function_t comparable,
00069 const void *other);
00070
00078 gru_export const gru_tree_node_t *gru_tree_search_child(gru_tree_node_t *node,
00079 compare_function_t comparable,
00080 const void *other);
00081
00089 gru_export bool gru_tree_remove_child(gru_tree_node_t *node,
00090 compare_function_t comparable,
00091 const void *other);
00092
00100 gru_export const gru_tree_node_t *
00101 gru_tree_for_each(gru_tree_node_t *node, tree_callback_fn callback, void *payload);
00102
00109 gru_export void gru_tree_for_each_child(gru_tree_node_t *node,
00110 tree_callback_fn callback,
00111 void *payload);
00112
00119 gru_export uint32_t gru_tree_count_children(gru_tree_node_t *node);
00120
00127 gru_export uint32_t gru_tree_count(gru_tree_node_t *node);
00128
00129 #ifdef __cplusplus
00130 }
00131 #endif
00132
00133 #endif