summaryrefslogtreecommitdiff
path: root/libhurd-btree
diff options
context:
space:
mode:
authorneal <neal>2005-01-06 16:51:22 +0000
committerneal <neal>2005-01-06 16:51:22 +0000
commitca7c322232745f31ec6980864ca569b74f57e68b (patch)
tree803c69c5ffcd88476642754b0dbe825bcf9b292e /libhurd-btree
parent155226287f5cac362b213d588c1917ad7b851e5a (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/ChangeLog8
-rw-r--r--libhurd-btree/btree-test.c2
-rw-r--r--libhurd-btree/btree.h44
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 */