From b98c68473e3317e09ebcc2d7d46e374fc08c531d Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 13 Aug 2019 12:32:42 +0930 Subject: [PATCH] htable: add htable_count(). Signed-off-by: Rusty Russell --- ccan/htable/htable.h | 9 +++++++++ ccan/htable/htable_type.h | 7 +++++++ ccan/htable/test/run-type.c | 7 +++++-- ccan/htable/test/run.c | 9 ++++++--- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/ccan/htable/htable.h b/ccan/htable/htable.h index 938b43af..0ecae726 100644 --- a/ccan/htable/htable.h +++ b/ccan/htable/htable.h @@ -75,6 +75,15 @@ bool htable_init_sized(struct htable *ht, size_t (*rehash)(const void *elem, void *priv), void *priv, size_t size); +/** + * htable_count - count number of entries in a hash table. + * @ht: the hash table + */ +static inline size_t htable_count(const struct htable *ht) +{ + return ht->elems; +} + /** * htable_clear - empty a hash table. * @ht: the hash table to clear diff --git a/ccan/htable/htable_type.h b/ccan/htable/htable_type.h index 14011676..9dad4b39 100644 --- a/ccan/htable/htable_type.h +++ b/ccan/htable/htable_type.h @@ -25,6 +25,9 @@ * void _clear(struct *); * bool _copy(struct *dst, const struct *src); * + * Count entries: + * size_t _count(const struct *ht); + * * Add function only fails if we run out of memory: * bool _add(struct *ht, const *e); * @@ -69,6 +72,10 @@ { \ return htable_init_sized(&ht->raw, name##_hash, NULL, s); \ } \ + static inline UNNEEDED size_t name##_count(const struct name *ht) \ + { \ + return htable_count(&ht->raw); \ + } \ static inline UNNEEDED void name##_clear(struct name *ht) \ { \ htable_clear(&ht->raw); \ diff --git a/ccan/htable/test/run-type.c b/ccan/htable/test/run-type.c index f097acb6..2fc38c3a 100644 --- a/ccan/htable/test/run-type.c +++ b/ccan/htable/test/run-type.c @@ -65,7 +65,7 @@ static void find_vals(const struct htable_obj *ht, return; } } - pass("Found %u numbers in hash", i); + ok1(htable_obj_count(ht) == i); } static void del_vals(struct htable_obj *ht, @@ -116,12 +116,13 @@ int main(void) void *p; struct htable_obj_iter iter; - plan_tests(29); + plan_tests(32); for (i = 0; i < NUM_VALS; i++) val[i].key = i; dne = i; htable_obj_init(&ht); + ok1(htable_obj_count(&ht) == 0); ok1(ht_max(&ht.raw) == 0); ok1(ht.raw.bits == 0); @@ -205,6 +206,8 @@ int main(void) } htable_obj_clear(&ht); + ok1(htable_obj_count(&ht) == 0); htable_obj_clear(&ht2); + ok1(htable_obj_count(&ht2) == 0); return exit_status(); } diff --git a/ccan/htable/test/run.c b/ccan/htable/test/run.c index 85502c4a..3608941d 100644 --- a/ccan/htable/test/run.c +++ b/ccan/htable/test/run.c @@ -67,7 +67,7 @@ static void find_vals(struct htable *ht, return; } } - pass("Found %llu numbers in hash", (long long)i); + ok1(htable_count(ht) == i); } static void del_vals(struct htable *ht, @@ -105,12 +105,13 @@ int main(void) void *p; struct htable_iter iter; - plan_tests(36); + plan_tests(38); for (i = 0; i < NUM_VALS; i++) val[i] = i; dne = i; htable_init(&ht, hash, NULL); + ok1(htable_count(&ht) == 0); ok1(ht_max(&ht) == 0); ok1(ht.bits == 0); @@ -207,6 +208,8 @@ int main(void) ok1(htable_init_sized(&ht, hash, NULL, 1025)); ok1(ht_max(&ht) >= 1025); htable_clear(&ht); - + + ok1(htable_count(&ht) == 0); + return exit_status(); } -- 2.39.2