summaryrefslogtreecommitdiff
path: root/src/systemc/core/module.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/systemc/core/module.hh')
-rw-r--r--src/systemc/core/module.hh24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/systemc/core/module.hh b/src/systemc/core/module.hh
index 696d8c570..8aebff251 100644
--- a/src/systemc/core/module.hh
+++ b/src/systemc/core/module.hh
@@ -31,7 +31,10 @@
#define __SYSTEMC_CORE_MODULE_HH__
#include <cassert>
+#include <map>
#include <set>
+#include <sstream>
+#include <string>
#include "systemc/core/object.hh"
#include "systemc/ext/core/sc_module.hh"
@@ -39,6 +42,23 @@
namespace sc_gem5
{
+class UniqueNameGen
+{
+ private:
+ std::map<std::string, int> counts;
+ std::string buf;
+
+ public:
+ const char *
+ gen(std::string seed)
+ {
+ std::ostringstream os;
+ os << seed << "_" << counts[seed]++;
+ buf = os.str();
+ return buf.c_str();
+ }
+};
+
class Module
{
private:
@@ -46,6 +66,8 @@ class Module
sc_core::sc_module *_sc_mod;
Object *_obj;
+ UniqueNameGen nameGen;
+
public:
Module(const char *name);
@@ -77,6 +99,8 @@ class Module
}
void pop();
+
+ const char *uniqueName(const char *seed) { return nameGen.gen(seed); }
};
Module *currentModule();