stats: disallow duplicate statistic names.
This commit is contained in:
parent
18a30524d6
commit
c87c9950df
2 changed files with 31 additions and 3 deletions
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -114,6 +114,9 @@ class Info
|
|||
Info();
|
||||
virtual ~Info();
|
||||
|
||||
/** Set the name of this statistic */
|
||||
void setName(const std::string &name);
|
||||
|
||||
/**
|
||||
* Check that this stat has been set up properly and is ready for
|
||||
* use
|
||||
|
@ -402,10 +405,10 @@ class DataWrap : public InfoAccess
|
|||
* @return A reference to this stat.
|
||||
*/
|
||||
Derived &
|
||||
name(const std::string &_name)
|
||||
name(const std::string &name)
|
||||
{
|
||||
Info *info = this->info();
|
||||
info->name = _name;
|
||||
info->setName(name);
|
||||
info->flags |= print;
|
||||
return this->self();
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue