From: Pavel Charvat Date: Fri, 29 Feb 2008 18:07:19 +0000 (+0100) Subject: UCW: implemented simple memory statistics for tries X-Git-Tag: holmes-import~404^2^2~5 X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=8ad1fb125b62e5e7d4fe0f5e1018d4f37f3541a7;p=libucw.git UCW: implemented simple memory statistics for tries --- 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