summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/systemc/core/event.cc14
-rw-r--r--src/systemc/core/event.hh1
-rw-r--r--src/systemc/core/object.cc6
-rw-r--r--src/systemc/core/object.hh2
4 files changed, 16 insertions, 7 deletions
diff --git a/src/systemc/core/event.cc b/src/systemc/core/event.cc
index 1623cf9e8..05670fe59 100644
--- a/src/systemc/core/event.cc
+++ b/src/systemc/core/event.cc
@@ -29,6 +29,7 @@
#include "systemc/core/event.hh"
+#include <algorithm>
#include <cstring>
#include <utility>
@@ -51,12 +52,14 @@ Event::Event(sc_core::sc_event *_sc_event, const char *_basename) :
parent = p->obj()->sc_obj();
else if (scheduler.current())
parent = scheduler.current();
+ else
+ parent = nullptr;
if (parent) {
Object *obj = Object::getFromScObject(parent);
- parentIt = obj->addChildEvent(_sc_event);
+ obj->addChildEvent(_sc_event);
} else {
- parentIt = topLevelEvents.emplace(topLevelEvents.end(), _sc_event);
+ topLevelEvents.emplace(topLevelEvents.end(), _sc_event);
}
if (parent)
@@ -74,9 +77,12 @@ Event::~Event()
{
if (parent) {
Object *obj = Object::getFromScObject(parent);
- obj->delChildEvent(parentIt);
+ obj->delChildEvent(_sc_event);
} else {
- std::swap(*parentIt, topLevelEvents.back());
+ EventsIt it = find(topLevelEvents.begin(), topLevelEvents.end(),
+ _sc_event);
+ assert(it != topLevelEvents.end());
+ std::swap(*it, topLevelEvents.back());
topLevelEvents.pop_back();
}
diff --git a/src/systemc/core/event.hh b/src/systemc/core/event.hh
index 6d2f46d42..f9d3b2040 100644
--- a/src/systemc/core/event.hh
+++ b/src/systemc/core/event.hh
@@ -103,7 +103,6 @@ class Event
bool _inHierarchy;
sc_core::sc_object *parent;
- EventsIt parentIt;
void delayedNotify();
EventWrapper<Event, &Event::delayedNotify> delayedNotifyEvent;
diff --git a/src/systemc/core/object.cc b/src/systemc/core/object.cc
index 39403ca34..13476619b 100644
--- a/src/systemc/core/object.cc
+++ b/src/systemc/core/object.cc
@@ -29,6 +29,8 @@
#include "systemc/core/object.hh"
+#include <algorithm>
+
#include "base/logging.hh"
#include "systemc/core/module.hh"
#include "systemc/core/scheduler.hh"
@@ -230,8 +232,10 @@ Object::addChildEvent(sc_core::sc_event *e)
}
void
-Object::delChildEvent(EventsIt it)
+Object::delChildEvent(sc_core::sc_event *e)
{
+ EventsIt it = std::find(events.begin(), events.end(), e);
+ assert(it != events.end());
std::swap(*it, events.back());
events.pop_back();
}
diff --git a/src/systemc/core/object.hh b/src/systemc/core/object.hh
index c87a98b2d..cb759d890 100644
--- a/src/systemc/core/object.hh
+++ b/src/systemc/core/object.hh
@@ -88,7 +88,7 @@ class Object
sc_core::sc_object *sc_obj() { return _sc_obj; }
EventsIt addChildEvent(sc_core::sc_event *e);
- void delChildEvent(EventsIt it);
+ void delChildEvent(sc_core::sc_event *e);
private:
sc_core::sc_object *_sc_obj;