diff options
author | neal <neal> | 2005-01-06 16:51:22 +0000 |
---|---|---|
committer | neal <neal> | 2005-01-06 16:51:22 +0000 |
commit | ca7c322232745f31ec6980864ca569b74f57e68b (patch) | |
tree | 803c69c5ffcd88476642754b0dbe825bcf9b292e /libhurd-btree | |
parent | 155226287f5cac362b213d588c1917ad7b851e5a (diff) |
libhurd-btree/
2004-12-25 Neal H. Walfield <neal@gnu.org>
* btree.h (BTREE_CLASS): Rename from BTREE_NODE_CLASS.
If the function returns a returns a NODE_TYPE and it fails, simply
return NULL.
(btree_detach): Fix comment.
* btree-test.c: Use BTREE_CLASS, BTREE_NODE_CLASS.
Diffstat (limited to 'libhurd-btree')
-rw-r--r-- | libhurd-btree/ChangeLog | 8 | ||||
-rw-r--r-- | libhurd-btree/btree-test.c | 2 | ||||
-rw-r--r-- | libhurd-btree/btree.h | 44 |
3 files changed, 32 insertions, 22 deletions
diff --git a/libhurd-btree/ChangeLog b/libhurd-btree/ChangeLog index ce9e362..f102024 100644 --- a/libhurd-btree/ChangeLog +++ b/libhurd-btree/ChangeLog @@ -1,5 +1,13 @@ 2004-12-25 Neal H. Walfield <neal@gnu.org> + * btree.h (BTREE_CLASS): Rename from BTREE_NODE_CLASS. + If the function returns a returns a NODE_TYPE and it fails, simply + return NULL. + (btree_detach): Fix comment. + * btree-test.c: Use BTREE_CLASS, BTREE_NODE_CLASS. + +2004-12-25 Neal H. Walfield <neal@gnu.org> + * Makefile.am: New file. * headers.m4: Likewise. * btree.c: Likewise. diff --git a/libhurd-btree/btree-test.c b/libhurd-btree/btree-test.c index 8b8d5af..ba54c71 100644 --- a/libhurd-btree/btree-test.c +++ b/libhurd-btree/btree-test.c @@ -21,7 +21,7 @@ struct int_node int key; }; -BTREE_NODE_CLASS(int_node, struct int_node, int, key, node, int_node_compare) +BTREE_CLASS(int_node, struct int_node, int, key, node, int_node_compare) static int int_node_compare (const int *a, const int *b) diff --git a/libhurd-btree/btree.h b/libhurd-btree/btree.h index 23dc22b..57af768 100644 --- a/libhurd-btree/btree.h +++ b/libhurd-btree/btree.h @@ -322,13 +322,15 @@ BTREE_(insert) (BTREE_(t) *btree, BTREE_(key_compare_t) compare, function need not be called on each node individually: this is only a waste of time. Instead, one can do: - btree_node_t node; - for (node = btree_first (btree); node; node = btree_next (node)) - free (node); + btree_node_t node, next; + for (node = btree_first (btree); node; node = next) + { + next = btree_next (node); + free (node); + } Since btree_next (node) is guaranteed to never touch a node which - is lexically less than NODE. - */ + is lexically less than NODE. */ extern void BTREE_(detach) (BTREE_(t) *btree, BTREE_(node_t) *node); /* Return the node with the smallest key in tree BTREE or NULL if the @@ -432,8 +434,8 @@ extern BTREE_(node_t) *BTREE_(prev) (BTREE_(node_t) *node); btree_node_t node; }; - BTREE_NODE_CLASS (int, struct my_int_node, int, key, node, - my_int_node_compare) + BTREE_CLASS (int, struct my_int_node, int, key, node, + my_int_node_compare) int int_node_compare (const int *a, const int *b) @@ -443,8 +445,8 @@ extern BTREE_(node_t) *BTREE_(prev) (BTREE_(node_t) *node); Would make btree_int_node_find, btree_int_node_insert, etc. available. */ -#define BTREE_NODE_CLASS(name, node_type, key_type, key_field, \ - btree_node_field, cmp_function) \ +#define BTREE_CLASS(name, node_type, key_type, key_field, \ + btree_node_field, cmp_function) \ \ typedef struct \ { \ @@ -461,13 +463,13 @@ static inline node_type * \ BTREE_(name##_find) (BTREE_(name##_t) *btree, const key_type *key) \ { \ int (*cmp) (const key_type *, const key_type *) = (cmp_function); \ + void *n = BTREE_(find) (&btree->btree, \ + (int (*) (const void *, const void *)) cmp, \ + offsetof (node_type, key_field) \ + - offsetof (node_type, btree_node_field), \ + (const void *) key); \ \ - return (void *) BTREE_(find) (&btree->btree, \ - (int (*) (const void *, const void *)) cmp,\ - offsetof (node_type, key_field) \ - - offsetof (node_type, btree_node_field),\ - (const void *) key) \ - - offsetof (node_type, btree_node_field); \ + return n ? n - offsetof (node_type, btree_node_field) : NULL; \ } \ \ static inline error_t \ @@ -491,22 +493,22 @@ BTREE_(name##_detach) (BTREE_(name##_t) *btree, node_type *node) \ static inline node_type * \ BTREE_(name##_first) (BTREE_(name##_t) *btree) \ { \ - return (void *) BTREE_(first) (&btree->btree) \ - - offsetof (node_type, btree_node_field); \ + void *n = BTREE_(first) (&btree->btree); \ + return n ? n - offsetof (node_type, btree_node_field) : NULL; \ } \ \ static inline node_type * \ BTREE_(name##_next) (node_type *node) \ { \ - return (void *) BTREE_(next) (&node->btree_node_field) \ - - offsetof (node_type, btree_node_field); \ + void *n = BTREE_(next) (&node->btree_node_field); \ + return n ? n - offsetof (node_type, btree_node_field) : NULL; \ } \ \ static inline node_type * \ BTREE_(name##_prev) (node_type *node) \ { \ - return (void *) BTREE_(prev) (&node->btree_node_field) \ - - offsetof (node_type, btree_node_field); \ + void *n = BTREE_(prev) (&node->btree_node_field); \ + return n ? n - offsetof (node_type, btree_node_field) : NULL; \ } #endif /* BTREE_H */ |