systemc: Use an std::list to track all modules.
authorGabe Black <gabeblack@google.com>
Wed, 8 Aug 2018 09:03:30 +0000 (02:03 -0700)
committerGabe Black <gabeblack@google.com>
Thu, 20 Sep 2018 01:43:26 +0000 (01:43 +0000)
This is less efficient when modules are destroyed since the list isn't
sorted, and each module needs to find its own entry to remove. The
benefit is that entries added to the end of the list while the list is
being iterated over will still be included, and that the order the
modules are added will be preserved so that it matches what the order
in the regression tests.

Change-Id: I5af5d15f316fa58561e8fd9ca77f667ddc8b2c5e
Reviewed-on: https://gem5-review.googlesource.com/12077
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/systemc/core/module.cc
src/systemc/core/module.hh

index 986ad25a7fa0c26b1fee6b94ce4f6e740343596d..b13b50d2875ab62917ff0b8fb7e1e0e4a0c4a9ea 100644 (file)
@@ -30,7 +30,6 @@
 #include "systemc/core/module.hh"
 
 #include <cassert>
-#include <list>
 
 #include "base/logging.hh"
 
@@ -53,7 +52,7 @@ Module::Module(const char *name) : _name(name), _sc_mod(nullptr), _obj(nullptr)
     _new_module = this;
 }
 
-Module::~Module() { allModules.erase(this); }
+Module::~Module() { allModules.remove(this); }
 
 void
 Module::finish(Object *this_obj)
@@ -65,7 +64,7 @@ Module::finish(Object *this_obj)
     // This is called from the constructor of this_obj, so it can't use
     // dynamic cast.
     sc_mod(static_cast<::sc_core::sc_module *>(this_obj->sc_obj()));
-    allModules.insert(this);
+    allModules.emplace_back(this);
 }
 
 void
@@ -95,6 +94,6 @@ newModule()
 void callbackModule(Module *m) { _callbackModule = m; }
 Module *callbackModule() { return _callbackModule; }
 
-std::set<Module *> allModules;
+std::list<Module *> allModules;
 
 } // namespace sc_gem5
index 7e54e29d522312cc3a5341d1d473258f64c48533..a5bf9297565fc44117d5d9a0224e9efc8a2f94ae 100644 (file)
@@ -31,8 +31,8 @@
 #define __SYSTEMC_CORE_MODULE_HH__
 
 #include <cassert>
+#include <list>
 #include <map>
-#include <set>
 #include <sstream>
 #include <string>
 
@@ -109,7 +109,7 @@ Module *newModule();
 void callbackModule(Module *m);
 Module *callbackModule();
 
-extern std::set<Module *> allModules;
+extern std::list<Module *> allModules;
 
 } // namespace sc_gem5