X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=senf%2FUtils%2FFormat.cc;h=382c870255dcd94dda370d15fc254bfbd30cb763;hb=5b2e9a63a43027c71ac470ac9bdecb72e8974951;hp=3373bb86fa7229adf6c564e78b6a7766e15b254e;hpb=af697a0c8591b38f7ee7dbc3d1d0293f4ff72d37;p=senf.git diff --git a/senf/Utils/Format.cc b/senf/Utils/Format.cc index 3373bb8..382c870 100644 --- a/senf/Utils/Format.cc +++ b/senf/Utils/Format.cc @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2009 +// Copyright (C) 2009 // Fraunhofer Institute for Open Communication Systems (FOKUS) // Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund @@ -34,12 +34,12 @@ //#include "Format.mpp" #define prefix_ -///////////////////////////////cc.p//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// namespace { - char const SIPrefix[] = { 'y', 'z', 'a', 'f', 'p', 'n', 'u', 'm', - ' ', + char const SIPrefix[] = { 'y', 'z', 'a', 'f', 'p', 'n', 'u', 'm', + ' ', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y' }; unsigned const SIScales = 8; @@ -50,20 +50,29 @@ prefix_ std::ostream & senf::format::operator<<(std::ostream & os, eng const & v boost::io::ios_base_all_saver ibas (os); boost::io::ios_fill_saver ifs (os); + os.setf(v_.flags_, v_.mask_); + if (v_.havePrecision_) + os.precision(v_.precision_); + if (v_.haveWidth_) + os.width(v_.width_); + if (v_.haveFill_) + os.fill(v_.fill_); + unsigned prec (os.precision()); - if (prec < 4) + if (prec < 4) prec = 4; unsigned w (os.width()); char fill (os.fill()); unsigned minw (prec+2+((os.flags() & std::ios_base::showbase) ? 1 : 4)); - std::ios_base::fmtflags align (os.flags() & std::ios_base::adjustfield); - if (! std::isnan(v_.d)) + std::ios_base::fmtflags flags (os.flags()); + std::ios_base::fmtflags align (flags & std::ios_base::adjustfield); + if (! std::isnan(v_.d_)) minw += prec+3; - - double ref (std::fabs(v_.v)); - double v (v_.v); - double d (0.0); - if (! std::isnan(v_.d)) d = std::fabs(v_.d); + + float ref (std::fabs(v_.v_)); + float v (v_.v_); + float d (0.0); + if (! std::isnan(v_.d_)) d = std::fabs(v_.d_); int scale (0); if (d > ref) ref = d; @@ -82,10 +91,9 @@ prefix_ std::ostream & senf::format::operator<<(std::ostream & os, eng const & v os << std::dec << std::setprecision(prec-3) << std::fixed; if (w > 0) { - if ((align == 0 || align == std::ios_base::right || align == std::ios_base::internal) - && w > minw) - os << std::setw(prec+2+w-minw); - else + if ((align == 0 || align == std::ios_base::right || align == std::ios_base::internal)) + os << std::setw(prec+2+(w>minw ? w-minw : 0)); + else os << std::right << std::setfill(' ') << std::setw(prec+2); } else @@ -93,19 +101,19 @@ prefix_ std::ostream & senf::format::operator<<(std::ostream & os, eng const & v os << v; os << std::setfill('0') << std::noshowpos; - if (! std::isnan(v_.d)) { + if (! std::isnan(v_.d_)) { os << "+-"; if (w > 0) os << std::setw(prec+1); os << d; } - if ((os.flags() & std::ios_base::showbase) && unsigned(std::abs(scale/3)) <= SIScales) { + if ((flags & std::ios_base::showbase) && unsigned(std::abs(scale/3)) <= SIScales) { if (w > 0 || scale != 0) os << SIPrefix[scale/3+SIScales]; } - else if ((os.flags() & std::ios_base::showpoint) || scale != 0) - os << ((os.flags() & std::ios_base::uppercase)?'E':'e') + else if ((flags & std::ios_base::showpoint) || scale != 0) + os << ((flags & std::ios_base::uppercase)?'E':'e') << std::showpos << std::internal << std::setw(3) << scale; else if (w > 0) os << " "; @@ -127,8 +135,8 @@ prefix_ std::string senf::format::detail::dumpintUnsigned(unsigned long long v, int bytes ((bits+7)/8); int digs (int(2.4*bytes)+1); std::stringstream ss; - ss << (sign ? (sign<0 ? "-" : " ") : "") - << "0x" << std::setw(2*bytes) << std::setfill('0') << std::hex + ss << (sign ? (sign<0 ? "-" : " ") : "") + << "0x" << std::setw(2*bytes) << std::setfill('0') << std::hex << 1u*v << " (" << std::setw(digs+(sign ? 1 : 0)) << std::setfill(' ') << std::dec; if (sign) @@ -138,14 +146,16 @@ prefix_ std::string senf::format::detail::dumpintUnsigned(unsigned long long v, ss << ") ("; for (int i (bytes-1); i>=0; --i) { char c ((v>>(8*i))&0xff); - ss << ((c>=32 && c<=127) ? c : '.'); + ss << ((c>=32 && c<=126) ? c : '.'); } ss << ')'; return ss.str(); } +unsigned int senf::format::IndentHelper::static_level = 0; + -///////////////////////////////cc.e//////////////////////////////////////// +//-///////////////////////////////////////////////////////////////////////////////////////////////// #undef prefix_ //#include "Format.mpp"