From 46a538ceab12c89f1806293f6e5f4e89f6605da4 Mon Sep 17 00:00:00 2001 From: Brad Danofsky Date: Wed, 20 Apr 2011 11:14:52 -0700 Subject: [PATCH] stats: add user settable separator string for arrayed stats Default is '::', so no visible change unless it is overridden --- src/base/statistics.cc | 1 + src/base/statistics.hh | 17 +++++++++++++++++ src/base/stats/info.hh | 3 +++ src/base/stats/text.cc | 9 +++++++-- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/base/statistics.cc b/src/base/statistics.cc index fa3a4a0c9..8bbc4bf36 100644 --- a/src/base/statistics.cc +++ b/src/base/statistics.cc @@ -48,6 +48,7 @@ using namespace std; namespace Stats { +std::string Info::separatorString = "::"; typedef map MapType; // We wrap these in a function to make sure they're built in time. diff --git a/src/base/statistics.hh b/src/base/statistics.hh index de5540272..f139bce61 100644 --- a/src/base/statistics.hh +++ b/src/base/statistics.hh @@ -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. diff --git a/src/base/stats/info.hh b/src/base/stats/info.hh index 9c81442ee..1759b4796 100644 --- a/src/base/stats/info.hh +++ b/src/base/stats/info.hh @@ -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 diff --git a/src/base/stats/text.cc b/src/base/stats/text.cc index ab5c7e8a9..f1ba59f0e 100644 --- a/src/base/stats/text.cc +++ b/src/base/stats/text.cc @@ -234,6 +234,7 @@ ScalarPrint::operator()(ostream &stream) const struct VectorPrint { string name; + string separatorString; string desc; vector subnames; vector 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;