tupperware: avl: add mapping functions
This commit is contained in:
parent
564aae3d55
commit
5624e3c898
|
@ -57,4 +57,8 @@ void avl_merge(struct avl *tree, struct avl *more);
|
||||||
void avl_update(struct avl *tree, struct avl *more);
|
void avl_update(struct avl *tree, struct avl *more);
|
||||||
void avl_merge_all(struct avl *tree, struct avl *more);
|
void avl_merge_all(struct avl *tree, struct avl *more);
|
||||||
|
|
||||||
|
void avl_prefix_map(struct avl *tree, avl_map_f map, void *cookie);
|
||||||
|
void avl_infix_map(struct avl *tree, avl_map_f map, void *cookie);
|
||||||
|
void avl_postfix_map(struct avl *tree, avl_map_f map, void *cookie);
|
||||||
|
|
||||||
#endif /* !TUPPERWARE_AVL_H */
|
#endif /* !TUPPERWARE_AVL_H */
|
||||||
|
|
55
src/avl.c
55
src/avl.c
|
@ -467,3 +467,58 @@ void avl_merge_all(struct avl *tree, struct avl *more) {
|
||||||
avl_insert_multi(tree, v); // Keep all values
|
avl_insert_multi(tree, v); // Keep all values
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void avl_prefix_map_helper(struct avl_node *n,
|
||||||
|
avl_map_f map, void *cookie) {
|
||||||
|
if (!n)
|
||||||
|
return;
|
||||||
|
|
||||||
|
map(n, cookie);
|
||||||
|
avl_prefix_map_helper(n->left, map, cookie);
|
||||||
|
avl_prefix_map_helper(n->right, map, cookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
void avl_prefix_map(struct avl *tree, avl_map_f map, void *cookie) {
|
||||||
|
if (!tree)
|
||||||
|
return;
|
||||||
|
avl_prefix_map_helper(tree->root, map, cookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void avl_infix_map_helper(struct avl_node *n,
|
||||||
|
avl_map_f map, void *cookie) {
|
||||||
|
if (!n)
|
||||||
|
return;
|
||||||
|
|
||||||
|
avl_infix_map_helper(n->left, map, cookie);
|
||||||
|
map(n, cookie);
|
||||||
|
avl_infix_map_helper(n->right, map, cookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
void avl_infix_map(struct avl *tree, avl_map_f map, void *cookie) {
|
||||||
|
if (!tree)
|
||||||
|
return;
|
||||||
|
avl_infix_map_helper(tree->root, map, cookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void avl_postfix_map_helper(struct avl_node *n,
|
||||||
|
avl_map_f map, void *cookie) {
|
||||||
|
if (!n)
|
||||||
|
return;
|
||||||
|
|
||||||
|
avl_postfix_map_helper(n->left, map, cookie);
|
||||||
|
avl_postfix_map_helper(n->right, map, cookie);
|
||||||
|
map(n, cookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
void avl_postfix_map(struct avl *tree, avl_map_f map, void *cookie) {
|
||||||
|
if (!tree)
|
||||||
|
return;
|
||||||
|
avl_postfix_map_helper(tree->root, map, cookie);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct between_parameters {
|
||||||
|
struct avl_node *end;
|
||||||
|
avl_map_f map;
|
||||||
|
void *cookie;
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in a new issue