From b5f0c3117c16240b7e994c37e912b3cfcc986a93 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Tue, 1 Feb 2011 11:51:54 +0100 Subject: [PATCH] rbtree: move delete_fn from the structure to argument. --- docs/technical/rbtree.txt | 5 +---- src/inotify-map.c | 4 ++-- src/rbtree.c | 4 ++-- src/rbtree.h | 5 ++--- test/t_rbtree.c | 6 +++--- 5 files changed, 10 insertions(+), 14 deletions(-) diff --git a/docs/technical/rbtree.txt b/docs/technical/rbtree.txt index 9d22f55..6191146 100644 --- a/docs/technical/rbtree.txt +++ b/docs/technical/rbtree.txt @@ -25,9 +25,6 @@ Structure that holds a tree of nodes `root`:: Pointer to the node that is the root of the tree. -`delete_fn`:: - Pointer to the function that should handle the delete routines for the `key` pointer. - `cmp_fn`:: Pointer to the function that is used to compare two `key` pointers. + Shall return a value greater than zero if 'ptr1' > 'ptr2', a value less than zero if 'ptr1' < 'ptr2' and zero if 'ptr1' == 'ptr2'. @@ -50,7 +47,7 @@ NOTE: The memory pointed to by the 'key' pointer is *not* copied so you must ens `rbtree_free()`:: - Deletes the whole tree. if provided, calls `rbtree->delete_fn` for every node. + Deletes the whole tree. if provided, calls 'free_fn' for every node. `rbtree_walk()`:: diff --git a/src/inotify-map.c b/src/inotify-map.c index 6250e1c..40dcb1a 100644 --- a/src/inotify-map.c +++ b/src/inotify-map.c @@ -136,8 +136,8 @@ int inotify_unmap_path(const char *path) { void inotify_unmap_all() { - rbtree_free(&tree_path_wd); - rbtree_free(&tree_wd_paths); + rbtree_free(&tree_path_wd, xfree); + rbtree_free(&tree_wd_paths, wd_free); } int inotify_map_get_wd(const char *path) { diff --git a/src/rbtree.c b/src/rbtree.c index f2acb2c..c8ea5e6 100644 --- a/src/rbtree.c +++ b/src/rbtree.c @@ -185,12 +185,12 @@ void rbtree_walk(rbtree *tree, void (*action)(const void *)) { #endif } -void rbtree_free(rbtree *tree) { +void rbtree_free(rbtree *tree, void (*free_fn)(void *)) { if (!tree) return; - node_dealloc(tree->root, tree->delete_fn); + node_dealloc(tree->root, free_fn); tree->root = NULL; #ifdef __DEBUG__ diff --git a/src/rbtree.h b/src/rbtree.h index 956d86d..b1a4b19 100644 --- a/src/rbtree.h +++ b/src/rbtree.h @@ -16,11 +16,10 @@ typedef struct { struct _rbn *root; /* user defined operations */ - void (*delete_fn)(void *); int (*cmp_fn)(const void *, const void *); } rbtree; -#define RBTREE_INIT(delete, update, cmp) { NULL, delete, cmp} +#define RBTREE_INIT(delete, update, cmp) { NULL, cmp } int rbtree_is_empty(rbtree *tree); @@ -28,7 +27,7 @@ void* rbtree_search(rbtree *tree, const void *key); void rbtree_walk(rbtree *tree, void (*action)(const void *)); -void rbtree_free(rbtree *tree); +void rbtree_free(rbtree *tree, void (*free_fn)(void *)); int rbtree_insert(rbtree *tree, const void *key); diff --git a/test/t_rbtree.c b/test/t_rbtree.c index 8ec9583..4bbfa2b 100644 --- a/test/t_rbtree.c +++ b/test/t_rbtree.c @@ -12,7 +12,7 @@ static int vcmp(const void *a, const void *b); static void vdelete(void *ptr); /* data */ -static rbtree tree = RBTREE_INIT(vdelete, NULL, vcmp); +static rbtree tree = RBTREE_INIT(NULL, NULL, vcmp); static int keyref[NODES]; static int vcmp(const void *a, const void *b) { @@ -77,7 +77,7 @@ static void teardown() { int i; - rbtree_free(&tree); + rbtree_free(&tree, vdelete); for(i=0; i < NODES; i++) keyref[i] = -1; @@ -89,7 +89,7 @@ void test_rbtree_is_empty() { assert(rbtree_is_empty(&tree) == 0); - rbtree_free(&tree); + rbtree_free(&tree, vdelete); assert(rbtree_is_empty(&tree));