From c87c9950dfa094b0c3820f9abca721b0d32d2a09 Mon Sep 17 00:00:00 2001 From: Nathan Binkert Date: Wed, 8 Apr 2009 22:22:50 -0700 Subject: stats: disallow duplicate statistic names. --- src/base/statistics.cc | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'src/base/statistics.cc') 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 #include #include -#include #include #include "base/callback.hh" @@ -114,6 +113,14 @@ StorageParams::~StorageParams() { } +typedef map 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 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) { -- cgit v1.2.3