diff options
author | Joe Thornber <ejt@redhat.com> | 2018-05-29 11:04:32 +0100 |
---|---|---|
committer | Joe Thornber <ejt@redhat.com> | 2018-05-29 11:04:32 +0100 |
commit | 0181c77e3fe0fd4c82b10e283d4852a09ff78452 (patch) | |
tree | 494a63511efce9512df29478ddc772787fe8f306 /base | |
parent | 6cd798f556b34c4c4171d536298d8f718f8aef62 (diff) | |
parent | 033df741e2e771b3abda3e190ed9c359d579ce4a (diff) | |
download | lvm2-0181c77e3fe0fd4c82b10e283d4852a09ff78452.tar.gz |
Merge branch '2018-05-29-radix-tree-iterate' into 2018-05-23-radix-tree-remove
Diffstat (limited to 'base')
-rw-r--r-- | base/data-struct/radix-tree.c | 10 | ||||
-rw-r--r-- | base/data-struct/radix-tree.h | 7 |
2 files changed, 10 insertions, 7 deletions
diff --git a/base/data-struct/radix-tree.c b/base/data-struct/radix-tree.c index a359aaa78..3df85e77b 100644 --- a/base/data-struct/radix-tree.c +++ b/base/data-struct/radix-tree.c @@ -75,17 +75,21 @@ struct node256 { struct radix_tree { unsigned nr_entries; struct value root; + radix_value_dtr dtr; + void *dtr_context; }; //---------------------------------------------------------------- -struct radix_tree *radix_tree_create(void) +struct radix_tree *radix_tree_create(radix_value_dtr dtr, void *dtr_context) { struct radix_tree *rt = malloc(sizeof(*rt)); if (rt) { rt->nr_entries = 0; rt->root.type = UNSET; + rt->dtr = dtr; + rt->dtr_context = dtr_context; } return rt; @@ -154,9 +158,9 @@ static void _free_node(struct value v, radix_value_dtr dtr, void *context) } } -void radix_tree_destroy(struct radix_tree *rt, radix_value_dtr dtr, void *context) +void radix_tree_destroy(struct radix_tree *rt) { - _free_node(rt->root, dtr, context); + _free_node(rt->root, rt->dtr, rt->dtr_context); free(rt); } diff --git a/base/data-struct/radix-tree.h b/base/data-struct/radix-tree.h index 983b5fa24..8560b3495 100644 --- a/base/data-struct/radix-tree.h +++ b/base/data-struct/radix-tree.h @@ -25,12 +25,11 @@ union radix_value { uint64_t n; }; -struct radix_tree *radix_tree_create(void); - typedef void (*radix_value_dtr)(void *context, union radix_value v); -// dtr may be NULL -void radix_tree_destroy(struct radix_tree *rt, radix_value_dtr dtr, void *context); +// dtr will be called on any deleted entries. dtr may be NULL. +struct radix_tree *radix_tree_create(radix_value_dtr dtr, void *dtr_context); +void radix_tree_destroy(struct radix_tree *rt); unsigned radix_tree_size(struct radix_tree *rt); bool radix_tree_insert(struct radix_tree *rt, uint8_t *kb, uint8_t *ke, union radix_value v); |