diff options
Diffstat (limited to 'src/base/statistics.cc')
-rw-r--r-- | src/base/statistics.cc | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/base/statistics.cc b/src/base/statistics.cc index 0a59248e7..1f3562384 100644 --- a/src/base/statistics.cc +++ b/src/base/statistics.cc @@ -32,7 +32,6 @@ #include <fstream> #include <list> #include <map> -#include <set> #include <string> #include "base/callback.hh" @@ -114,6 +113,14 @@ StorageParams::~StorageParams() { } +typedef map<std::string, Info *> NameMapType; +NameMapType & +nameMap() +{ + static NameMapType the_map; + return the_map; +} + int Info::id_count = 0; int debug_break_id = -1; @@ -130,6 +137,24 @@ Info::~Info() { } +void +Info::setName(const string &name) +{ + pair<NameMapType::iterator, bool> p = + nameMap().insert(make_pair(name, this)); + + Info *other = p.first->second; + bool result = p.second; + + if (!result) { + // using other->name instead of just name to avoid a compiler + // warning. They should be the same. + panic("same statistic name used twice! name=%s\n", other->name); + } + + this->name = name; +} + bool Info::less(Info *stat1, Info *stat2) { |