avl tree: Report size of the tree and make that available in _get_size().
authorSebastian Harl <sh@tokkee.org>
Fri, 17 Jun 2011 07:24:02 +0000 (09:24 +0200)
committerSebastian Harl <sh@tokkee.org>
Fri, 17 Jun 2011 07:24:02 +0000 (09:24 +0200)
src/utils_avltree.c
src/utils_avltree.h

index 3e258e9..0436d8f 100644 (file)
@@ -51,6 +51,7 @@ struct c_avl_tree_s
 {
        c_avl_node_t *root;
        int (*compare) (const void *, const void *);
+       int size;
 };
 
 struct c_avl_iterator_s
@@ -479,6 +480,7 @@ c_avl_tree_t *c_avl_create (int (*compare) (const void *, const void *))
 
        t->root = NULL;
        t->compare = compare;
+       t->size = 0;
 
        return (t);
 }
@@ -553,6 +555,7 @@ int c_avl_insert (c_avl_tree_t *t, void *key, void *value)
        } /* while (42) */
 
        verify_tree (t->root);
+       ++t->size;
        return (0);
 } /* int c_avl_insert */
 
@@ -574,6 +577,7 @@ int c_avl_remove (c_avl_tree_t *t, const void *key, void **rkey, void **rvalue)
 
        status = _remove (t, n);
        verify_tree (t->root);
+       --t->size;
        return (status);
 } /* void *c_avl_remove */
 
@@ -710,3 +714,10 @@ void c_avl_iterator_destroy (c_avl_iterator_t *iter)
 {
        free (iter);
 }
+
+int c_avl_size (c_avl_tree_t *t)
+{
+       if (t == NULL)
+               return (0);
+       return (t->size);
+}
index 355ced2..10fb5cb 100644 (file)
@@ -148,4 +148,19 @@ int c_avl_iterator_next (c_avl_iterator_t *iter, void **key, void **value);
 int c_avl_iterator_prev (c_avl_iterator_t *iter, void **key, void **value);
 void c_avl_iterator_destroy (c_avl_iterator_t *iter);
 
+/*
+ * NAME
+ *   c_avl_size
+ *
+ * DESCRIPTION
+ *   Return the size (number of nodes) of the specified tree.
+ *
+ * PARAMETERS
+ *   `t'        AVL-tree to get the size of.
+ *
+ * RETURN VALUE
+ *   Number of nodes in the tree, 0 if the tree is empty or NULL.
+ */
+int c_avl_size (c_avl_tree_t *t);
+
 #endif /* UTILS_AVLTREE_H */