From: mtk Date: Tue, 18 Aug 2009 16:08:06 +0000 (+0000) Subject: make the console output follow the 'engineerign' format X-Git-Url: http://g0dil.de/git?a=commitdiff_plain;h=b356bf0d48b92f6dae43b0c4668bdf99a7a7c0d0;p=senf.git make the console output follow the 'engineerign' format git-svn-id: https://svn.berlios.de/svnroot/repos/senf/trunk@1298 270642c3-0616-0410-b53a-bc976706d245 --- diff --git a/Utils/Statistics.cc b/Utils/Statistics.cc index 0b6ab8f..979236e 100644 --- a/Utils/Statistics.cc +++ b/Utils/Statistics.cc @@ -80,6 +80,38 @@ senf::StatisticsBase::output(unsigned n) return OutputProxy(this, &(i->second)); } +// +// generate an engineering style notation i +// +char *format_eng( float f) +{ + static buf[16]; + if( f > 0){ + int n = 0; + while( f > 1000.0f){ + f /= 1000.f; + n+=3; + } + + sprintf( buf, " %3.2fe%03d", f, n); + } + else if( f < 0){ + int n = 0; + while( f < 1000.0f){ + f *= 1000.f; + n+=3; + } + + sprintf( buf, "-%3.2fe%03d", f, n); + } + else{ + sprintf( buf, " 0.00"); + } + + return buf; +} + + prefix_ void senf::StatisticsBase::consoleList(unsigned level, std::ostream & os) const { @@ -89,11 +121,11 @@ prefix_ void senf::StatisticsBase::consoleList(unsigned level, std::ostream & os OutputMap::const_iterator i (outputs_.begin()); OutputMap::const_iterator i_end (outputs_.end()); for (; i != i_end; ++i) - os << boost::format(" %3d %12g %12g %12g\n") + os << boost::format(" %3d %12s %12s %12s\n") % i->second.n - % (i->second.min/i->second.n) - % (i->second.avg/i->second.n) - % (i->second.max/i->second.n); + % format_eng(i->second.min/i->second.n) + % format_eng(i->second.avg/i->second.n) + % format_eng(i->second.max/i->second.n); } { Children::const_iterator i (children_.begin());