summaryrefslogtreecommitdiff
path: root/base
diff options
context:
space:
mode:
authorJoe Thornber <ejt@redhat.com>2018-05-29 11:04:32 +0100
committerJoe Thornber <ejt@redhat.com>2018-05-29 11:04:32 +0100
commit0181c77e3fe0fd4c82b10e283d4852a09ff78452 (patch)
tree494a63511efce9512df29478ddc772787fe8f306 /base
parent6cd798f556b34c4c4171d536298d8f718f8aef62 (diff)
parent033df741e2e771b3abda3e190ed9c359d579ce4a (diff)
downloadlvm2-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.c10
-rw-r--r--base/data-struct/radix-tree.h7
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);