summaryrefslogtreecommitdiff
path: root/src/systemc/core/module.hh
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-06-22 14:19:44 -0700
committerGabe Black <gabeblack@google.com>2018-09-05 06:01:39 +0000
commit9bd3bb7bc804a16b2f0de03fa6d3d9d0928f38a2 (patch)
treea9500949c781d55fea96bf9fb7098a9639b7af5a /src/systemc/core/module.hh
parent97018a3b20c129a3413011d205f18189dd1a75c9 (diff)
downloadgem5-9bd3bb7bc804a16b2f0de03fa6d3d9d0928f38a2.tar.xz
systemc: Implement most of sc_object.
To avoid making it hard to change sc_object's implementation in the future, this change keeps most of the data members out of sc_object and keeps them in a seperate Object which is managed independently but still matches to the sc_objects one to one. This change also moves away from the SystemC/sc_gem5 namespace pair in favor of sc_gem5. Having two namespaces with classes, etc, living in both was complicating things. Having to use a namespace that doesn't fit in one scheme or the other isn't great, but it's the lesser of two evils. Change-Id: Ib59c3c515ca98c7fe519c59e9fe9270304b71cc0 Reviewed-on: https://gem5-review.googlesource.com/11611 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/core/module.hh')
-rw-r--r--src/systemc/core/module.hh45
1 files changed, 34 insertions, 11 deletions
diff --git a/src/systemc/core/module.hh b/src/systemc/core/module.hh
index 56e125ee6..3734e633f 100644
--- a/src/systemc/core/module.hh
+++ b/src/systemc/core/module.hh
@@ -30,31 +30,54 @@
#ifndef __SYSTEMC_CORE_MODULE_HH__
#define __SYSTEMC_CORE_MODULE_HH__
-namespace SystemC
+#include <cassert>
+
+#include "systemc/core/object.hh"
+#include "systemc/ext/core/sc_module.hh"
+
+namespace sc_gem5
{
class Module
{
private:
const char *_name;
+ sc_core::sc_module *_sc_mod;
+ Object *_obj;
public:
- Module(const char *name) : _name(name) {}
- const char *name() { return _name; }
+ Module(const char *name);
+ void finish(Object *this_obj);
- void push();
- void pop();
-};
+ const char *name() const { return _name; }
-extern Module *topModule();
+ sc_core::sc_module *
+ sc_mod() const
+ {
+ assert(_sc_mod);
+ return _sc_mod;
+ }
-} // namespace SystemC
+ void
+ sc_mod(sc_core::sc_module *sc_mod)
+ {
+ assert(!_sc_mod);
+ _sc_mod = sc_mod;
+ }
-namespace sc_gem5
-{
+ Object *
+ obj()
+ {
+ assert(_obj);
+ return _obj;
+ }
+
+ void pop();
+};
-using SystemC::Module;
+Module *currentModule();
+Module *newModule();
} // namespace sc_gem5