systemc: Store timed notifications in a list instead of a set.
authorGabe Black <gabeblack@google.com>
Fri, 31 Aug 2018 23:18:10 +0000 (16:18 -0700)
committerGabe Black <gabeblack@google.com>
Wed, 3 Oct 2018 00:28:55 +0000 (00:28 +0000)
commite99a575c78735ad9e35e30ee8714d5e2798e3014
tree984e45897e33ab064d730550d7163be06403fcf0
parent3c40f3c0c420dc4215c97a646359f7cda5de829e
systemc: Store timed notifications in a list instead of a set.

This has three advantages. First, the data structure doesn't have to
try to keep track of whether or not an event is already listed there.
Second, it's easier to delete an item by storing an iterator for it
when it gets inserted. Third, the ordering of events is not dependent
on the arbitrary ordering of the set, it's bsaed on the fixed order
the events get added to the list.

One part of this change makes ScEvent-s keep track of what list they're
on, and handle their own insertion and deletion when they're
scheduled or descheduled. A side effect of that is that it's no longer
safe to simply use a range based for loop to loop over all of an
ScEvent and deschedule all its events or to run then (which deschedules
them internally once they execute).

That can be avoided by looping until the list is empty, and operating
on the first element. As the first element is processed and removed
from the list, the next element will become first and will get picked
up in the next iteration.

Change-Id: Icad51a63f153297c88e65f85d22ac721e6c571d8
Reviewed-on: https://gem5-review.googlesource.com/c/12456
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
src/systemc/core/sched_event.hh
src/systemc/core/scheduler.cc
src/systemc/core/scheduler.hh