From: Rusty Russell Date: Mon, 8 Nov 2010 11:35:42 +0000 (+1030) Subject: likely: switch from using ccan/hashtable to ccan/htable X-Git-Url: https://git.ozlabs.org/?p=ccan;a=commitdiff_plain;h=99809d6e752a28cf0ec15148676db672c3484731;ds=sidebyside likely: switch from using ccan/hashtable to ccan/htable --- diff --git a/ccan/likely/_info b/ccan/likely/_info index 1e3277fd..471c1ffc 100644 --- a/ccan/likely/_info +++ b/ccan/likely/_info @@ -36,7 +36,7 @@ int main(int argc, char *argv[]) if (strcmp(argv[1], "depends") == 0) { printf("ccan/str\n"); - printf("ccan/hashtable\n"); + printf("ccan/htable\n"); printf("ccan/hash\n"); return 0; } diff --git a/ccan/likely/likely.c b/ccan/likely/likely.c index 260864d3..1bdc1b1a 100644 --- a/ccan/likely/likely.c +++ b/ccan/likely/likely.c @@ -1,10 +1,10 @@ #ifdef DEBUG #include #include -#include +#include #include #include -static struct hashtable *htable; +static struct htable *htable; struct trace { const char *condstr; @@ -31,7 +31,7 @@ static bool hash_cmp(const void *htelem, void *cmpdata) && t1->expect == t2->expect; } -static unsigned long rehash(const void *elem, void *priv) +static size_t rehash(const void *elem, void *priv) { return hash_trace(elem); } @@ -52,7 +52,7 @@ static struct trace *add_trace(const char *condstr, { struct trace *trace = malloc(sizeof(*trace)); init_trace(trace, condstr, file, line, expect); - hashtable_add(htable, hash_trace(trace), trace); + htable_add(htable, hash_trace(trace), trace); return trace; } @@ -63,10 +63,10 @@ long _likely_trace(bool cond, bool expect, struct trace *p, trace; if (!htable) - htable = hashtable_new(rehash, NULL); + htable = htable_new(rehash, NULL); init_trace(&trace, condstr, file, line, expect); - p = hashtable_find(htable, hash_trace(&trace), hash_cmp, &trace); + p = htable_get(htable, hash_trace(&trace), hash_cmp, &trace); if (!p) p = add_trace(condstr, file, line, expect); @@ -88,22 +88,23 @@ static double right_ratio(const struct trace *t) return (double)t->right / t->count; } -static bool get_stats(struct trace *trace, struct get_stats_info *info) +static void get_stats(struct trace *trace, struct get_stats_info *info) { if (trace->count < info->min_hits) - return false; + return; if (right_ratio(trace) < info->worst_ratio) { info->worst = trace; info->worst_ratio = right_ratio(trace); } - return false; } const char *likely_stats(unsigned int min_hits, unsigned int percent) { struct get_stats_info info; + struct htable_iter i; char *ret; + struct trace *trace; if (!htable) return NULL; @@ -113,7 +114,11 @@ const char *likely_stats(unsigned int min_hits, unsigned int percent) info.worst_ratio = 2; /* This is O(n), but it's not likely called that often. */ - hashtable_traverse(htable, struct trace, get_stats, &info); + for (trace = htable_first(htable, &i); + trace; + trace = htable_next(htable,&i)) { + get_stats(trace, &info); + } if (info.worst_ratio * 100 > percent) return NULL; @@ -128,7 +133,7 @@ const char *likely_stats(unsigned int min_hits, unsigned int percent) (unsigned)(info.worst_ratio * 100), info.worst->right, info.worst->count); - hashtable_del(htable, hash_trace(info.worst), info.worst); + htable_del(htable, hash_trace(info.worst), info.worst); free(info.worst); return ret;