diff options
author | Gabe Black <gabeblack@google.com> | 2018-06-22 14:19:44 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-09-05 06:01:39 +0000 |
commit | 9bd3bb7bc804a16b2f0de03fa6d3d9d0928f38a2 (patch) | |
tree | a9500949c781d55fea96bf9fb7098a9639b7af5a /src/systemc/core/module.hh | |
parent | 97018a3b20c129a3413011d205f18189dd1a75c9 (diff) | |
download | gem5-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.hh | 45 |
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 |