From 8ad1fb125b62e5e7d4fe0f5e1018d4f37f3541a7 Mon Sep 17 00:00:00 2001 From: Pavel Charvat Date: Fri, 29 Feb 2008 19:07:19 +0100 Subject: [PATCH] UCW: implemented simple memory statistics for tries --- lib/trie.h | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/lib/trie.h b/lib/trie.h index aa929dba..02e553cc 100644 --- a/lib/trie.h +++ b/lib/trie.h @@ -37,6 +37,7 @@ * TRIE_WANT_WALK_ALL walk_all(walk) * TRIE_WANT_WALK_PREFIX walk_prefix(walk, char *str) * TRIE_WANT_AUDIT audit() + * TRIW_WANT_STATS */ /*** Define once ***/ @@ -901,6 +902,37 @@ P(audit)(TA) #endif +/*** Statistics ***/ + +#ifdef TRIE_WANT_STATS + +struct P(stats) { + u64 total_size; + u64 small_size; + u64 hash_size; +}; + +static void +P(stats)(TAC struct P(stats) *stats) +{ + bzero(stats, sizeof(*stats)); + for (uns i = 0; i < ARRAY_SIZE(T.epool); i++) + stats->small_size += ep_total_size(T.epool[i]); + for (uns i = 0; i < ARRAY_SIZE(T.hpool); i++) + stats->hash_size += ep_total_size(T.hpool[i]); + stats->total_size = stats->small_size + stats->total_size + sizeof(T); +} + +static inline u64 +P(total_size)(TA) +{ + struct P(stats) stats; + P(stats)(TTC &stats); + return stats.total_size; +} + +#endif + /*** Clean up local macros ***/ #undef P -- 2.39.2