summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/systemc/core/sc_export.cc7
-rw-r--r--src/systemc/ext/core/sc_export.hh56
2 files changed, 24 insertions, 39 deletions
diff --git a/src/systemc/core/sc_export.cc b/src/systemc/core/sc_export.cc
index 387b8a7fd..8340cf9c6 100644
--- a/src/systemc/core/sc_export.cc
+++ b/src/systemc/core/sc_export.cc
@@ -33,10 +33,7 @@
namespace sc_core
{
-void
-sc_export_base::warn_unimpl(const char *func) const
-{
- warn("%s not implemented.\n", func);
-}
+sc_export_base::sc_export_base(const char *n) : sc_object(n) {}
+sc_export_base::~sc_export_base() {}
} // namespace sc_core
diff --git a/src/systemc/ext/core/sc_export.hh b/src/systemc/ext/core/sc_export.hh
index 421e063c0..f3cf81619 100644
--- a/src/systemc/ext/core/sc_export.hh
+++ b/src/systemc/ext/core/sc_export.hh
@@ -30,6 +30,7 @@
#ifndef __SYSTEMC_EXT_CORE_SC_EXPORT_HH__
#define __SYSTEMC_EXT_CORE_SC_EXPORT_HH__
+#include "sc_module.hh" // for sc_gen_unique_name
#include "sc_object.hh"
namespace sc_core
@@ -40,7 +41,8 @@ class sc_interface;
class sc_export_base : public sc_object
{
public:
- void warn_unimpl(const char *func) const;
+ sc_export_base(const char *n);
+ ~sc_export_base();
virtual sc_interface *get_iterface() = 0;
virtual const sc_interface *get_interface() const = 0;
@@ -50,42 +52,26 @@ template <class IF>
class sc_export : public sc_export_base
{
public:
- sc_export() { warn_unimpl(__PRETTY_FUNCTION__); }
- explicit sc_export(const char *) { warn_unimpl(__PRETTY_FUNCTION__); }
- virtual ~sc_export() { warn_unimpl(__PRETTY_FUNCTION__); };
+ sc_export() :
+ sc_export_base(sc_gen_unique_name("export")), interface(nullptr)
+ {}
+ explicit sc_export(const char *n) :
+ sc_export_base(n), interface(nullptr)
+ {}
+ virtual ~sc_export() {}
virtual const char *kind() const { return "sc_export"; }
- void operator () (IF &) { warn_unimpl(__PRETTY_FUNCTION__); };
- virtual void bind(IF &) { warn_unimpl(__PRETTY_FUNCTION__); };
- operator IF & () { warn_unimpl(__PRETTY_FUNCTION__); };
- operator const IF & () const { warn_unimpl(__PRETTY_FUNCTION__); };
-
- IF *
- operator -> ()
- {
- warn_unimpl(__PRETTY_FUNCTION__);
- return nullptr;
- }
- const IF *
- operator -> () const
- {
- warn_unimpl(__PRETTY_FUNCTION__);
- return nullptr;
- }
-
- sc_interface *
- get_iterface() override
- {
- warn_unimpl(__PRETTY_FUNCTION__);
- return nullptr;
- }
- const sc_interface *
- get_interface() const override
- {
- warn_unimpl(__PRETTY_FUNCTION__);
- return nullptr;
- }
+ void operator () (IF &i) { bind(i); }
+ virtual void bind(IF &i) { interface = &i; }
+ operator IF & () { return *interface; }
+ operator const IF & () const { return *interface; }
+
+ IF *operator -> () { return interface; }
+ const IF *operator -> () const { return interface; }
+
+ sc_interface *get_iterface() override { return interface; }
+ const sc_interface *get_interface() const override { return interface; }
protected:
virtual void before_end_of_elaboration() {}
@@ -94,6 +80,8 @@ class sc_export : public sc_export_base
virtual void end_of_simulation() {}
private:
+ IF *interface;
+
// Disabled
sc_export(const sc_export<IF> &);
sc_export<IF> &operator = (const sc_export<IF> &);