Code

avltree: Added sdb_avltree_lookup().
[sysdb.git] / src / utils / avltree.c
index 353a3849c2c307c975413d72a9dba64dfc0f7258..56bc57d3087b69bccc42c20fde8cdfcd835f8162 100644 (file)
@@ -362,6 +362,31 @@ sdb_avltree_insert(sdb_avltree_t *tree, sdb_object_t *obj)
        return 0;
 } /* sdb_avltree_insert */
 
+sdb_object_t *
+sdb_avltree_lookup(sdb_avltree_t *tree, const sdb_object_t *ref)
+{
+       node_t *n;
+
+       if (! tree)
+               return NULL;
+
+       n = tree->root;
+       while (n) {
+               int diff = tree->cmp(n->obj, ref);
+
+               if (! diff) {
+                       sdb_object_ref(n->obj);
+                       return n->obj;
+               }
+
+               if (diff < 0)
+                       n = n->right;
+               else
+                       n = n->left;
+       }
+       return NULL;
+} /* sdb_avltree_lookup_by_name */
+
 sdb_avltree_iter_t *
 sdb_avltree_get_iter(sdb_avltree_t *tree)
 {