base: Rework the trie dump function to accept a different ostream.
authorGabe Black <gabeblack@google.com>
Sun, 3 Dec 2017 09:51:53 +0000 (01:51 -0800)
committerGabe Black <gabeblack@google.com>
Mon, 4 Dec 2017 23:18:46 +0000 (23:18 +0000)
It might often be useful to write output to cout when dumping a trie,
but sometimes it might be useful to dump ot to something else like a
string stream instead.

Change-Id: Iaa4ae772c902b7dbc753f320d1a7eb5fcd4a3db3
Reviewed-on: https://gem5-review.googlesource.com/6266
Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/base/trie.hh

index e256377c15c6ec4c74fa45edbc4c11717ee41539..ac6045601021aaa21cbce49dbc6b580479b73807 100644 (file)
@@ -32,6 +32,7 @@
 #define __BASE_TRIE_HH__
 
 #include <cassert>
+#include <iostream>
 
 #include "base/cprintf.hh"
 #include "base/logging.hh"
@@ -82,20 +83,21 @@ class Trie
         }
 
         void
-        dump(int level)
+        dump(std::ostream &os, int level)
         {
             for (int i = 1; i < level; i++) {
-                cprintf("|");
+                ccprintf(os, "|");
             }
             if (level == 0)
-                cprintf("Root ");
+                ccprintf(os, "Root ");
             else
-                cprintf("+ ");
-            cprintf("(%p, %p, %#X, %#X, %p)\n", parent, this, key, mask, value);
+                ccprintf(os, "+ ");
+            ccprintf(os, "(%p, %p, %#X, %#X, %p)\n",
+                     parent, this, key, mask, value);
             if (kids[0])
-                kids[0]->dump(level + 1);
+                kids[0]->dump(os, level + 1);
             if (kids[1])
-                kids[1]->dump(level + 1);
+                kids[1]->dump(os, level + 1);
         }
     };
 
@@ -351,13 +353,13 @@ class Trie
      * @param title An identifying title to put in the dump header.
      */
     void
-    dump(const char *title)
+    dump(const char *title, std::ostream &os=std::cout)
     {
-        cprintf("**************************************************\n");
-        cprintf("*** Start of Trie: %s\n", title);
-        cprintf("*** (parent, me, key, mask, value pointer)\n");
-        cprintf("**************************************************\n");
-        head.dump(0);
+        ccprintf(os, "**************************************************\n");
+        ccprintf(os, "*** Start of Trie: %s\n", title);
+        ccprintf(os, "*** (parent, me, key, mask, value pointer)\n");
+        ccprintf(os, "**************************************************\n");
+        head.dump(os, 0);
     }
 };