diff options
author | Daniel Lezcano <daniel.lezcano@linaro.org> | 2011-06-08 23:30:01 +0200 |
---|---|---|
committer | Daniel Lezcano <daniel.lezcano@free.fr> | 2011-06-08 23:30:01 +0200 |
commit | 02f8f4098b6bed84f58b2319d46b8f31c9df5f2d (patch) | |
tree | 76e9eef350925ff63d0330e15f1568351f4899ef | |
parent | cb86e1da685c1b6d77e82b8df43434045583a6bd (diff) |
document the tree code
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
-rw-r--r-- | tree.c | 35 |
1 files changed, 35 insertions, 0 deletions
@@ -227,6 +227,15 @@ int tree_for_each(struct tree *tree, tree_cb_t cb, void *data) return tree_for_each(tree->next, cb, data); } +/* + * This function will go over the tree passed as parameter at the reverse + * order and will call the callback passed as parameter for each. + * @tree : the lower node where we begin to browse the tree at the reverse + * order + * cb : a callback for each node the function will go over + * data : some private data to be passed across the callbacks + * Returns 0 on success, < 0 otherwise + */ int tree_for_each_reverse(struct tree *tree, tree_cb_t cb, void *data) { if (!tree) @@ -241,6 +250,15 @@ int tree_for_each_reverse(struct tree *tree, tree_cb_t cb, void *data) return tree_for_each_reverse(tree->parent, cb, data); } + +/* + * The function will go over all the parent of the specified node passed + * as parameter. + * @tree : the child node from where we back path to the parent + * cb : a callback for each node the function will go over + * data : some private data to be passed across the callbacks + * Returns 0 on success, < 0 otherwise + */ int tree_for_each_parent(struct tree *tree, tree_cb_t cb, void *data) { if (!tree) @@ -252,6 +270,13 @@ int tree_for_each_parent(struct tree *tree, tree_cb_t cb, void *data) return cb(tree, data); } +/* + * The function will return the first node which match with the name as + * parameter. + * @tree : the tree where we begin to find + * @name : the name of the node the function must look for. + * Returns a pointer to the tree structure if found, NULL otherwise. + */ struct tree *tree_find(struct tree *tree, const char *name) { struct tree *t; @@ -290,6 +315,16 @@ static int tree_finds_cb(struct tree *tree, void *data) return 0; } +/* + * This function will search for all the nodes where the name begin + * with the name passed as parameter. *Note* the function allocates + * the array, it is up to the caller to free this array. + * @tree : the topmost node of the tree where we being to search + * @name : the name to find in the tree + * @ptr : a pointer to a pointer of pointer of tree structure :) + * Returns the number of elements found in the tree, < 0 if something + * went wrong. + */ int tree_finds(struct tree *tree, const char *name, struct tree ***ptr) { struct struct_find sf = { .nr = 0, .ptree = NULL, .name = name }; |