From cfe912a5127b51273d7e3e78c15095ac832f20bd Mon Sep 17 00:00:00 2001 From: Nilay Vaish Date: Fri, 10 Jan 2014 16:19:40 -0600 Subject: stats: add function for adding two histograms This patch adds a function to the HistStor class for adding two histograms. This functionality is required for Ruby. It also adds support for printing histograms in a single line. --- src/base/stats/text.cc | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) (limited to 'src/base/stats') diff --git a/src/base/stats/text.cc b/src/base/stats/text.cc index 25b8cb2e7..7d25b94e5 100644 --- a/src/base/stats/text.cc +++ b/src/base/stats/text.cc @@ -210,7 +210,7 @@ ScalarPrint::update(Result val, Result total) void ScalarPrint::operator()(ostream &stream, bool oneLine) const { - if ((flags.isSet(nozero) && value == 0.0) || + if ((flags.isSet(nozero) && (!oneLine) && value == 0.0) || (flags.isSet(nonan) && std::isnan(value))) return; @@ -312,7 +312,6 @@ VectorPrint::operator()(std::ostream &stream) const if (!desc.empty()) ccprintf(stream, " # %s", desc); } - stream << endl; } } @@ -325,10 +324,6 @@ VectorPrint::operator()(std::ostream &stream) const print.value = total; print(stream); } - - if (flags.isSet(oneline) && ((!flags.isSet(nozero)) || (total != 0))) { - stream << endl; - } } struct DistPrint @@ -380,6 +375,7 @@ DistPrint::init(const Text *text, const Info &info) void DistPrint::operator()(ostream &stream) const { + if (flags.isSet(nozero) && data.samples == 0) return; string base = name + separatorString; ScalarPrint print; @@ -390,6 +386,20 @@ DistPrint::operator()(ostream &stream) const print.pdf = NAN; print.cdf = NAN; + if (flags.isSet(oneline)) { + print.name = base + "bucket_size"; + print.value = data.bucket_size; + print(stream); + + print.name = base + "min_bucket"; + print.value = data.min; + print(stream); + + print.name = base + "max_bucket"; + print.value = data.max; + print(stream); + } + print.name = base + "samples"; print.value = data.samples; print(stream); @@ -436,6 +446,10 @@ DistPrint::operator()(ostream &stream) const print(stream); } + if (flags.isSet(oneline)) { + ccprintf(stream, "%-40s", name); + } + for (off_type i = 0; i < size; ++i) { stringstream namestr; namestr << base; @@ -448,7 +462,15 @@ DistPrint::operator()(ostream &stream) const print.name = namestr.str(); print.update(data.cvec[i], total); - print(stream); + print(stream, flags.isSet(oneline)); + } + + if (flags.isSet(oneline)) { + if (descriptions) { + if (!desc.empty()) + ccprintf(stream, " # %s", desc); + } + stream << endl; } if (data.type == Dist && data.overflow != NAN) { -- cgit v1.2.3