stats: add user settable separator string for arrayed stats
authorBrad Danofsky <bradley.danofsky@amd.com>
Wed, 20 Apr 2011 18:14:52 +0000 (11:14 -0700)
committerBrad Danofsky <bradley.danofsky@amd.com>
Wed, 20 Apr 2011 18:14:52 +0000 (11:14 -0700)
Default is '::', so no visible change unless it is overridden

src/base/statistics.cc
src/base/statistics.hh
src/base/stats/info.hh
src/base/stats/text.cc

index fa3a4a0c94d1493e547ee7c58432694dfc4af127..8bbc4bf36c335a6b38329262a0fee431183c3aca 100644 (file)
@@ -48,6 +48,7 @@ using namespace std;
 
 namespace Stats {
 
+std::string Info::separatorString = "::";
 typedef map<const void *, Info *> MapType;
 
 // We wrap these in a function to make sure they're built in time.
index de55402726bf1fbf6fe29cb53c2f9c9564e45ddd..f139bce619808bab4be729ccbe6bc549f8d4efde 100644 (file)
@@ -255,6 +255,23 @@ class DataWrap : public InfoAccess
     }
     const std::string &name() const { return this->info()->name; }
 
+    /**
+     * Set the character(s) used between the name and vector number
+     * on vectors, dist, etc.
+     * @param _sep The new separator string
+     * @return A reference to this stat.
+     */
+    Derived &
+    setSeparator(const std::string &_sep)
+    {
+      this->info()->setSeparator(_sep);
+      return this->self();
+    }
+    const std::string &setSeparator() const
+    {
+      return this->info()->separatorString;
+    }
+
     /**
      * Set the description and marks this stat to print at the end of
      * simulation.
index 9c81442eee425da15a57e95481e7a1cedb9c6aeb..1759b4796693cbcab73ad7fc080b272b62f727f0 100644 (file)
@@ -69,6 +69,8 @@ class Info
   public:
     /** The name of the stat. */
     std::string name;
+    /** The separator string used for vectors, dist, etc. */
+    static std::string separatorString;
     /** The description of the stat. */
     std::string desc;
     /** The formatting flags. */
@@ -93,6 +95,7 @@ class Info
 
     /** Set the name of this statistic */
     void setName(const std::string &name);
+    void setSeparator(std::string _sep) { separatorString = _sep;}
 
     /**
      * Check that this stat has been set up properly and is ready for
index ab5c7e8a92a0a9e382b9df0c0c1d4ad6db627d48..f1ba59f0e413d9925fb1f0efa1d0b55b48bffa60 100644 (file)
@@ -234,6 +234,7 @@ ScalarPrint::operator()(ostream &stream) const
 struct VectorPrint
 {
     string name;
+    string separatorString;
     string desc;
     vector<string> subnames;
     vector<string> subdescs;
@@ -258,7 +259,7 @@ VectorPrint::operator()(std::ostream &stream) const
         }
     }
 
-    string base = name + "::";
+    string base = name + separatorString;
 
     ScalarPrint print;
     print.name = name;
@@ -301,6 +302,7 @@ VectorPrint::operator()(std::ostream &stream) const
 struct DistPrint
 {
     string name;
+    string separatorString;
     string desc;
     Flags flags;
     bool descriptions;
@@ -336,6 +338,7 @@ void
 DistPrint::init(const Text *text, const Info &info)
 {
     name = info.name;
+    separatorString = info.separatorString;
     desc = info.desc;
     flags = info.flags;
     precision = info.precision;
@@ -345,7 +348,7 @@ DistPrint::init(const Text *text, const Info &info)
 void
 DistPrint::operator()(ostream &stream) const
 {
-    string base = name + "::";
+    string base = name + separatorString;
 
     ScalarPrint print;
     print.precision = precision;
@@ -465,6 +468,7 @@ Text::visit(const VectorInfo &info)
     VectorPrint print;
 
     print.name = info.name;
+    print.separatorString = info.separatorString;
     print.desc = info.desc;
     print.flags = info.flags;
     print.descriptions = descriptions;
@@ -504,6 +508,7 @@ Text::visit(const Vector2dInfo &info)
 
     print.subnames = info.y_subnames;
     print.flags = info.flags;
+    print.separatorString = info.separatorString;
     print.descriptions = descriptions;
     print.precision = info.precision;