diff options
author | Bruno Haible <bruno@clisp.org> | 2020-07-20 20:06:29 +0200 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2020-07-20 20:06:29 +0200 |
commit | 91af6d7383aad01cd43b45dd733b027065743d00 (patch) | |
tree | 70ea617e9893fdd45077c88f8143c666805ac644 /lib/gl_rbtree_oset.c | |
parent | 2d431ac35c4943a3655c07ba91870d2323321b43 (diff) | |
download | gnulib-91af6d7383aad01cd43b45dd733b027065743d00.tar.gz |
oset: Add an 'update' operation.
* lib/gl_array_oset.c (gl_array_update): New function.
(gl_array_oset_implementation): Use it.
* lib/gl_avltree_omap.c (NODE_PAYLOAD_DISPOSE): Add parameters.
* lib/gl_rbtree_omap.c (NODE_PAYLOAD_DISPOSE): Add parameters.
* lib/gl_avltree_ordered.h (gl_tree_add_node_before): New function,
extracted from gl_tree_nx_add_before.
(gl_tree_nx_add_before): Invoke it.
(gl_tree_add_node_after): New function, extracted from
gl_tree_nx_add_after.
(gl_tree_nx_add_after): Invoke it.
(gl_tree_remove_node_no_free): New function, extracted from
gl_tree_remove_node.
(gl_tree_remove_node): Invoke it.
* lib/gl_rbtree_ordered.h (gl_tree_add_node_before): New function,
extracted from gl_tree_nx_add_before.
(gl_tree_nx_add_before): Invoke it.
(gl_tree_add_node_after): New function, extracted from
gl_tree_nx_add_after.
(gl_tree_nx_add_after): Invoke it.
(gl_tree_remove_node_no_free): New function, extracted from
gl_tree_remove_node.
(gl_tree_remove_node): Invoke it.
* lib/gl_anytree_oset.h (gl_tree_next_node): New function, extracted
from gl_tree_iterator_next.
(gl_tree_iterator_next): Invoke it.
(gl_tree_prev_node, gl_tree_update): New functions.
* lib/gl_avltree_oset.c (NODE_PAYLOAD_DISPOSE): Add parameters.
(gl_avltree_oset_implementation): Use gl_tree_update.
* lib/gl_rbtree_oset.c (NODE_PAYLOAD_DISPOSE): Add parameters.
(gl_rbtree_oset_implementation): Use gl_tree_update.
* lib/gl_oset.h (struct gl_oset_implementation): Add 'update' member.
(gl_oset_update): New function.
* lib/gl_oset.hh (gl_OSet): Add 'update' member.
* modules/avltree-oset (configure.ac): Require AC_C_INLINE.
* modules/rbtree-oset (configure.ac): Likewise.
* tests/test-oset-update.h: New file.
* tests/test-array_oset.c: Include test-oset-update.h.
(main): Invoke test_update.
* tests/test-avltree_oset.c: Likewise.
* tests/test-rbtree_oset.c: Likewise.
* modules/array-oset-tests (Files): Add tests/test-oset-update.h.
* modules/avltree-oset-tests (Files): Likewise.
* modules/rbtree-oset-tests (Files): Likewise.
* tests/test-oset-c++.cc (action): New function.
(main): Test the 'update' member function.
Diffstat (limited to 'lib/gl_rbtree_oset.c')
-rw-r--r-- | lib/gl_rbtree_oset.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/lib/gl_rbtree_oset.c b/lib/gl_rbtree_oset.c index 29bded5110..064c0c4048 100644 --- a/lib/gl_rbtree_oset.c +++ b/lib/gl_rbtree_oset.c @@ -36,7 +36,7 @@ const void *elt #define NODE_PAYLOAD_ASSIGN(node) \ node->value = elt; -#define NODE_PAYLOAD_DISPOSE \ +#define NODE_PAYLOAD_DISPOSE(container, node) \ if (container->base.dispose_fn != NULL) \ container->base.dispose_fn (node->value); @@ -64,6 +64,7 @@ const struct gl_oset_implementation gl_rbtree_oset_implementation = gl_tree_search_atleast, gl_tree_nx_add, gl_tree_remove, + gl_tree_update, gl_tree_oset_free, gl_tree_iterator, gl_tree_iterator_next, |