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(
00068 gru_tree_node_t *node, compare_function_t comparable, const void *other);
00069
00077 gru_export const gru_tree_node_t *gru_tree_search_child(
00078 gru_tree_node_t *node, compare_function_t comparable, const void *other);
00079
00087 gru_export bool gru_tree_remove_child(
00088 gru_tree_node_t *node, compare_function_t comparable, const void *other);
00089
00097 gru_export const gru_tree_node_t *gru_tree_for_each(
00098 gru_tree_node_t *node, tree_callback_fn callback, void *payload);
00099
00106 gru_export void gru_tree_for_each_child(
00107 gru_tree_node_t *node, tree_callback_fn callback, void *payload);
00108
00115 gru_export uint32_t gru_tree_count_children(gru_tree_node_t *node);
00116
00123 gru_export uint32_t gru_tree_count(gru_tree_node_t *node);
00124
00125 #ifdef __cplusplus
00126 }
00127 #endif
00128
00129 #endif