#include <fstream>
#include <list>
#include <map>
-#include <set>
#include <string>
#include "base/callback.hh"
{
}
+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;
{
}
+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)
{
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
* @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();
}