-#ifdef DEBUG
+/* Licensed under LGPLv2.1+ - see LICENSE file for details */
+#ifdef CCAN_LIKELY_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;
&& 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);
}
{
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;
}
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);
return (double)t->right / t->count;
}
-static bool get_stats(void *elem, void *vinfo)
+static void get_stats(struct trace *trace, struct get_stats_info *info)
{
- struct trace *trace = elem;
- struct get_stats_info *info = vinfo;
-
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;
info.worst_ratio = 2;
/* This is O(n), but it's not likely called that often. */
- hashtable_traverse(htable, 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;
(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;
}
-#endif /*DEBUG*/
+#endif /*CCAN_LIKELY_DEBUG*/