]> mj.ucw.cz Git - libucw.git/commitdiff
UCW: implemented simple memory statistics for tries
authorPavel Charvat <pavel.charvat@netcentrum.cz>
Fri, 29 Feb 2008 18:07:19 +0000 (19:07 +0100)
committerPavel Charvat <pavel.charvat@netcentrum.cz>
Fri, 29 Feb 2008 18:07:19 +0000 (19:07 +0100)
lib/trie.h

index aa929dba56f398d022e2e9116e8938c975aef932..02e553cc8224eb926d0b39e594544666456b5523 100644 (file)
@@ -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