From: John L. <mov...@us...> - 2003-04-06 21:38:55
|
Update of /cvsroot/oprofile/oprofile/libutil++ In directory sc8-pr-cvs1:/tmp/cvs-serv18062/libutil++ Modified Files: string_manip.cpp string_manip.h Log Message: prepend annotations for op_to_source Index: string_manip.cpp =================================================================== RCS file: /cvsroot/oprofile/oprofile/libutil++/string_manip.cpp,v retrieving revision 1.17 retrieving revision 1.18 diff -u -d -r1.17 -r1.18 --- string_manip.cpp 6 Apr 2003 04:11:17 -0000 1.17 +++ string_manip.cpp 6 Apr 2003 21:38:50 -0000 1.18 @@ -151,15 +151,38 @@ } -string const ws_prefix(string const & str) +string const format_percent(double value, unsigned int width) { - size_t end_pos = str.find_first_not_of(" \t"); + ostringstream os; + os << fixed << value; + string const orig = os.str(); + if (orig.length() < width) { + string pad = string(width - (orig.length() + 1), ' '); + return pad + orig + '%'; + } - // FIXME: surely this should return the entire string ? - if (end_pos == string::npos) - end_pos = 0; + string integer = orig; + string const fractional = trim(split(integer, '.')); - return str.substr(0, end_pos); + // we just overflow here + if (integer.length() >= width - 2) + return integer + '%'; + + // take off integer, '.', and '%'; + string::size_type remaining = width - (integer.length() + 2); + + string frac; + string pad; + + if (fractional.length() < remaining) { + pad = string(remaining - fractional.length(), ' '); + frac = fractional; + } else { + // FIXME: round + frac = fractional.substr(0, remaining); + } + + return pad + integer + '.' + frac + '%'; } - + Index: string_manip.h =================================================================== RCS file: /cvsroot/oprofile/oprofile/libutil++/string_manip.h,v retrieving revision 1.15 retrieving revision 1.16 diff -u -d -r1.15 -r1.16 --- string_manip.h 6 Apr 2003 04:11:17 -0000 1.15 +++ string_manip.h 6 Apr 2003 21:38:50 -0000 1.16 @@ -85,10 +85,15 @@ std::string trim(std::string const & str, std::string const & totrim = "\t "); /** - * @param str the input string + * format_percent - smart format a percentage value + * @param value - the value + * @param width - the maximum width * - * Return the substring at beginning of str which is only whitespace + * This formats a percentage into exactly the given width and returns + * it. If the integer part is larger than the given width, the + * returned string will be wider. The returned string is never + * shorter than the given width. */ -std::string const ws_prefix(std::string const & str); +std::string const format_percent(double value, unsigned int width); #endif /* !STRING_MANIP_H */ |