From be7a8cd9188194b6e3dfc73e6cabd992e0e5c28f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Fri, 7 Sep 2007 14:00:19 -0400 Subject: [PATCH] Use bsearch instead of hash table when looking up packages. --- razor.c | 27 +++++++++++++++++---------- 1 files changed, 17 insertions(+), 10 deletions(-) diff --git a/razor.c b/razor.c index 3bbe957..8139421 100644 --- 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 -- 1.7.1