src/simulator/scheduler-map.cc
changeset 25 9b3bb088c560
parent 16 99e833adbb46
child 36 e622fb7a8262
--- a/src/simulator/scheduler-map.cc	Sat Sep 02 19:50:19 2006 +0200
+++ b/src/simulator/scheduler-map.cc	Sun Sep 03 12:24:04 2006 +0200
@@ -21,7 +21,7 @@
  */
 
 #include "scheduler-map.h"
-#include "event.h"
+#include "event-impl.h"
 #include <cassert>
 
 #define noTRACE_MAP 1
@@ -45,28 +45,28 @@
 
 
 void 
-SchedulerMap::store_in_event (Event ev, EventMapI i) const
+SchedulerMap::store_in_event (EventImpl *ev, EventMapI i) const
 {
 	void *tag;
 	memcpy (&(tag), &i, sizeof (tag));
-	ev.set_tag (tag);
+	ev->set_internal_iterator (tag);
 }
 SchedulerMap::EventMapI
-SchedulerMap::get_from_event (Event const ev) const
+SchedulerMap::get_from_event (EventImpl *ev) const
 {
 	EventMapI i;
-	void *tag = ev.get_tag ();
+	void *tag = ev->get_internal_iterator ();
 	memcpy (&i, &(tag), sizeof (i));
  	return i;
 }
 
-Event  
-SchedulerMap::insert (Event event, Scheduler::EventKey key)
+EventId
+SchedulerMap::insert (EventImpl *event, Scheduler::EventKey key)
 {
 	std::pair<EventMapI,bool> result = m_list.insert (std::make_pair (key, event));
 	assert (result.second);
 	store_in_event (event, result.first);
-	return event;
+	return EventId (event, key.m_time, key.m_uid);
 }
 
 bool
@@ -75,7 +75,7 @@
 	return m_list.empty ();
 }
 
-Event 
+EventImpl *
 SchedulerMap::peek_next (void) const
 {
 	assert (!is_empty ());
@@ -98,14 +98,23 @@
 	m_list.erase (m_list.begin ());
 }
 
-Scheduler::EventKey
-SchedulerMap::remove (Event const ev)
+EventImpl *
+SchedulerMap::remove (EventId id, Scheduler::EventKey *key)
 {
 	assert (!is_empty ());
-	EventMapI i = get_from_event (ev);
-	EventKey key = (*i).first;
+	EventMapI i = get_from_event (id.get_event_impl ());
+	*key = i->first;
 	m_list.erase (i);
-	return key;
+	return i->second;
+}
+
+bool
+SchedulerMap::is_valid (EventId id)
+{
+	EventMapI i = get_from_event (id.get_event_impl ());
+	Scheduler::EventKey key = i->first;
+	return (key.m_time == id.get_time () &&
+		key.m_uid == id.get_uid ());
 }