Use bsearch instead of hash table when looking up packages.
authorKristian Høgsberg <krh@redhat.com>
Fri, 7 Sep 2007 18:00:19 +0000 (14:00 -0400)
committerKristian Høgsberg <krh@redhat.com>
Fri, 7 Sep 2007 18:00:19 +0000 (14:00 -0400)
razor.c

diff --git a/razor.c b/razor.c
index 3bbe957..8139421 100644 (file)
--- a/razor.c
+++ b/razor.c
@@ -866,19 +866,26 @@ razor_set_list(struct razor_set *set)
                printf("%s %s\n", &pool[p->name], &pool[p->version]);
 }
 
-struct razor_package *
-razor_set_get_package(struct razor_set *set, const char *package)
+struct razor_set *bsearch_set;
+
+static int
+compare_package_name(const void *key, const void *data)
 {
-       unsigned long name;
-       struct razor_package *p, *end;
+       const struct razor_package *p = data;
+       char *pool;
 
-       name = razor_set_lookup(set, package);
-       end = set->packages.data + set->packages.size;
-       for (p = set->packages.data; p < end; p++)
-               if (p->name == name)
-                       return p;
+       pool = bsearch_set->string_pool.data;
+
+       return strcmp(key, &pool[p->name]);
+}
 
-       return NULL;
+struct razor_package *
+razor_set_get_package(struct razor_set *set, const char *package)
+{
+       bsearch_set = set;
+       return bsearch(package, set->packages.data,
+                      set->packages.size / sizeof(struct razor_package),
+                      sizeof(struct razor_package), compare_package_name);
 }
 
 static void