likely: switch from using ccan/hashtable to ccan/htable
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 8 Nov 2010 11:35:42 +0000 (22:05 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 8 Nov 2010 11:35:42 +0000 (22:05 +1030)
ccan/likely/_info
ccan/likely/likely.c

index 1e3277fd7f04e6a842439193a4fb2b78462c7b38..471c1ffc78c024a2879f22a27c1aacae0cc08f05 100644 (file)
@@ -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;
        }
index 260864d36b2bf08fe784718bc265cd281beed030..1bdc1b1a6c16efb571aaaf5811b07346ff0147cc 100644 (file)
@@ -1,10 +1,10 @@
 #ifdef DEBUG
 #include <ccan/likely/likely.h>
 #include <ccan/hash/hash.h>
-#include <ccan/hashtable/hashtable.h>
+#include <ccan/htable/htable.h>
 #include <stdlib.h>
 #include <stdio.h>
-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;