diff -r 3db869bbcdd1 -r e6a06a278775 src/base/stats/info.hh --- a/src/base/stats/info.hh Sat Jun 08 10:28:33 2013 -0400 +++ b/src/base/stats/info.hh Sat Jun 08 12:15:16 2013 -0500 @@ -57,6 +57,8 @@ const FlagsType nozero = 0x0100; /** Don't print if this is NAN */ const FlagsType nonan = 0x0200; +/** Print all values on a single line. Useful only for histograms. */ +const FlagsType oneline = 0x0400; /** Mask of flags that can't be set directly */ const FlagsType __reserved = init | display; diff -r 3db869bbcdd1 -r e6a06a278775 src/base/stats/text.cc --- a/src/base/stats/text.cc Sat Jun 08 10:28:33 2013 -0400 +++ b/src/base/stats/text.cc Sat Jun 08 12:15:16 2013 -0500 @@ -194,7 +194,7 @@ Result cdf; void update(Result val, Result total); - void operator()(ostream &stream) const; + void operator()(ostream &stream, bool oneLine = false) const; }; void @@ -208,7 +208,7 @@ } void -ScalarPrint::operator()(ostream &stream) const +ScalarPrint::operator()(ostream &stream, bool oneLine) const { if ((flags.isSet(nozero) && value == 0.0) || (flags.isSet(nonan) && std::isnan(value))) @@ -222,14 +222,19 @@ if (!std::isnan(cdf)) ccprintf(cdfstr, "%.2f%%", cdf * 100.0); - ccprintf(stream, "%-40s %12s %10s %10s", name, - ValueToString(value, precision), pdfstr.str(), cdfstr.str()); + if (oneLine) { + ccprintf(stream, " |%12s %10s %10s", + ValueToString(value, precision), pdfstr.str(), cdfstr.str()); + } else { + ccprintf(stream, "%-40s %12s %10s %10s", name, + ValueToString(value, precision), pdfstr.str(), cdfstr.str()); - if (descriptions) { - if (!desc.empty()) - ccprintf(stream, " # %s", desc); + if (descriptions) { + if (!desc.empty()) + ccprintf(stream, " # %s", desc); + } + stream << endl; } - stream << endl; } struct VectorPrint @@ -279,15 +284,31 @@ return; } - for (off_type i = 0; i < _size; ++i) { - if (havesub && (i >= subnames.size() || subnames[i].empty())) - continue; + if ((!flags.isSet(nozero)) || (total != 0)) { + if (flags.isSet(oneline)) { + ccprintf(stream, "%-40s", name); + print.flags = print.flags & (~nozero); + } - print.name = base + (havesub ? subnames[i] : to_string(i)); - print.desc = subdescs.empty() ? desc : subdescs[i]; + for (off_type i = 0; i < _size; ++i) { + if (havesub && (i >= subnames.size() || subnames[i].empty())) + continue; - print.update(vec[i], _total); - print(stream); + print.name = base + (havesub ? subnames[i] : to_string(i)); + print.desc = subdescs.empty() ? desc : subdescs[i]; + + print.update(vec[i], _total); + print(stream, flags.isSet(oneline)); + } + + if (flags.isSet(oneline)) { + if (descriptions) { + if (!desc.empty()) + ccprintf(stream, " # %s", desc); + } + + stream << endl; + } } if (flags.isSet(::Stats::total)) { @@ -298,6 +319,10 @@ print.value = total; print(stream); } + + if (flags.isSet(oneline) && ((!flags.isSet(nozero)) || (total != 0))) { + stream << endl; + } } struct DistPrint