diff options
Diffstat (limited to 'src/systemc/core')
-rw-r--r-- | src/systemc/core/event.cc | 14 | ||||
-rw-r--r-- | src/systemc/core/event.hh | 1 | ||||
-rw-r--r-- | src/systemc/core/object.cc | 6 | ||||
-rw-r--r-- | src/systemc/core/object.hh | 2 |
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; |