diff options
Diffstat (limited to 'sim/sim_object.cc')
-rw-r--r-- | sim/sim_object.cc | 48 |
1 files changed, 41 insertions, 7 deletions
diff --git a/sim/sim_object.cc b/sim/sim_object.cc index af6a258ff..dbc2cf7be 100644 --- a/sim/sim_object.cc +++ b/sim/sim_object.cc @@ -28,12 +28,13 @@ #include <assert.h> -#include "sim/sim_object.hh" +#include "base/callback.hh" #include "base/inifile.hh" -#include "sim/configfile.hh" -#include "sim/host.hh" #include "base/misc.hh" #include "base/trace.hh" +#include "sim/configfile.hh" +#include "sim/host.hh" +#include "sim/sim_object.hh" #include "sim/sim_stats.hh" using namespace std; @@ -72,6 +73,11 @@ SimObject::regFormulas() { } +void +SimObject::resetStats() +{ +} + // // no default extra output // @@ -85,6 +91,15 @@ SimObject::printExtraOutput(ostream &os) // call regStats() on all SimObjects and then regFormulas() on all // SimObjects. // +struct SimObjectResetCB : public Callback +{ + virtual void process() { SimObject::resetAllStats(); } +}; + +namespace { + static SimObjectResetCB StatResetCB; +} + void SimObject::regAllStats() { @@ -106,7 +121,24 @@ SimObject::regAllStats() cprintf("registering formulas for %s\n", (*i)->name()); #endif (*i)->regFormulas(); - } + } + + Statistics::RegResetCallback(&StatResetCB); +} + +// +// static function: call resetStats() on all SimObjects. +// +void +SimObject::resetAllStats() +{ + SimObjectList::iterator i = simObjectList.begin(); + SimObjectList::iterator end = simObjectList.end(); + + for (; i != end; ++i) { + SimObject *obj = *i; + obj->resetStats(); + } } // @@ -115,9 +147,11 @@ SimObject::regAllStats() void SimObject::printAllExtraOutput(ostream &os) { - SimObjectList::iterator i; + SimObjectList::iterator i = simObjectList.begin(); + SimObjectList::iterator end = simObjectList.end(); - for (i = simObjectList.begin(); i != simObjectList.end(); ++i) { - (*i)->printExtraOutput(os); + for (; i != end; ++i) { + SimObject *obj = *i; + obj->printExtraOutput(os); } } |