summaryrefslogtreecommitdiff
path: root/sim/sim_object.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sim/sim_object.cc')
-rw-r--r--sim/sim_object.cc48
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);
}
}