more rendering fixes in client_test

This commit is contained in:
Arvid Norberg 2008-02-28 03:24:38 +00:00
parent cf5c9344ab
commit e48e52770b
1 changed files with 11 additions and 5 deletions

View File

@ -186,9 +186,16 @@ std::string to_string(int v, int width)
return s.str(); return s.str();
} }
std::string const& to_string(float v, int width, int precision = 3) std::string& to_string(float v, int width, int precision = 3)
{ {
static std::string ret; // this is a silly optimization
// to avoid copying of strings
enum { num_strings = 20 };
static std::string buf[num_strings];
static int round_robin = 0;
std::string& ret = buf[round_robin];
++round_robin;
if (round_robin >= num_strings) round_robin = 0;
ret.resize(20); ret.resize(20);
int size = std::sprintf(&ret[0], "%*.*f", width, precision, v); int size = std::sprintf(&ret[0], "%*.*f", width, precision, v);
ret.resize((std::min)(size, width)); ret.resize((std::min)(size, width));
@ -229,7 +236,6 @@ std::string ratio(float a, float b)
std::string const& add_suffix(float val) std::string const& add_suffix(float val)
{ {
static std::string ret;
const char* prefix[] = {"kB", "MB", "GB", "TB"}; const char* prefix[] = {"kB", "MB", "GB", "TB"};
const int num_prefix = sizeof(prefix) / sizeof(const char*); const int num_prefix = sizeof(prefix) / sizeof(const char*);
for (int i = 0; i < num_prefix; ++i) for (int i = 0; i < num_prefix; ++i)
@ -237,12 +243,12 @@ std::string const& add_suffix(float val)
val /= 1000.f; val /= 1000.f;
if (fabs(val) < 1000.f) if (fabs(val) < 1000.f)
{ {
ret = to_string(val, 4); std::string& ret = to_string(val, 4);
ret += prefix[i]; ret += prefix[i];
return ret; return ret;
} }
} }
ret = to_string(val, 4); std::string& ret = to_string(val, 4);
ret += "PB"; ret += "PB";
return ret; return ret;
} }