From: Kristian Høgsberg Date: Fri, 7 Sep 2007 18:00:19 +0000 (-0400) Subject: Use bsearch instead of hash table when looking up packages. X-Git-Tag: 0.1~344 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=be7a8cd9188194b6e3dfc73e6cabd992e0e5c28f;p=razor2.git%2F.git Use bsearch instead of hash table when looking up packages. --- 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