43 SchedulerMap::~SchedulerMap () |
43 SchedulerMap::~SchedulerMap () |
44 {} |
44 {} |
45 |
45 |
46 |
46 |
47 void |
47 void |
48 SchedulerMap::store_in_event (Event ev, EventMapI i) const |
48 SchedulerMap::store_in_event (EventImpl *ev, EventMapI i) const |
49 { |
49 { |
50 void *tag; |
50 void *tag; |
51 memcpy (&(tag), &i, sizeof (tag)); |
51 memcpy (&(tag), &i, sizeof (tag)); |
52 ev.set_tag (tag); |
52 ev->set_internal_iterator (tag); |
53 } |
53 } |
54 SchedulerMap::EventMapI |
54 SchedulerMap::EventMapI |
55 SchedulerMap::get_from_event (Event const ev) const |
55 SchedulerMap::get_from_event (EventImpl *ev) const |
56 { |
56 { |
57 EventMapI i; |
57 EventMapI i; |
58 void *tag = ev.get_tag (); |
58 void *tag = ev->get_internal_iterator (); |
59 memcpy (&i, &(tag), sizeof (i)); |
59 memcpy (&i, &(tag), sizeof (i)); |
60 return i; |
60 return i; |
61 } |
61 } |
62 |
62 |
63 Event |
63 EventId |
64 SchedulerMap::insert (Event event, Scheduler::EventKey key) |
64 SchedulerMap::insert (EventImpl *event, Scheduler::EventKey key) |
65 { |
65 { |
66 std::pair<EventMapI,bool> result = m_list.insert (std::make_pair (key, event)); |
66 std::pair<EventMapI,bool> result = m_list.insert (std::make_pair (key, event)); |
67 assert (result.second); |
67 assert (result.second); |
68 store_in_event (event, result.first); |
68 store_in_event (event, result.first); |
69 return event; |
69 return EventId (event, key.m_time, key.m_uid); |
70 } |
70 } |
71 |
71 |
72 bool |
72 bool |
73 SchedulerMap::is_empty (void) const |
73 SchedulerMap::is_empty (void) const |
74 { |
74 { |
75 return m_list.empty (); |
75 return m_list.empty (); |
76 } |
76 } |
77 |
77 |
78 Event |
78 EventImpl * |
79 SchedulerMap::peek_next (void) const |
79 SchedulerMap::peek_next (void) const |
80 { |
80 { |
81 assert (!is_empty ()); |
81 assert (!is_empty ()); |
82 EventMapCI i = m_list.begin (); |
82 EventMapCI i = m_list.begin (); |
83 assert (i != m_list.end ()); |
83 assert (i != m_list.end ()); |
96 { |
96 { |
97 assert (!is_empty ()); |
97 assert (!is_empty ()); |
98 m_list.erase (m_list.begin ()); |
98 m_list.erase (m_list.begin ()); |
99 } |
99 } |
100 |
100 |
101 Scheduler::EventKey |
101 EventImpl * |
102 SchedulerMap::remove (Event const ev) |
102 SchedulerMap::remove (EventId id, Scheduler::EventKey *key) |
103 { |
103 { |
104 assert (!is_empty ()); |
104 assert (!is_empty ()); |
105 EventMapI i = get_from_event (ev); |
105 EventMapI i = get_from_event (id.get_event_impl ()); |
106 EventKey key = (*i).first; |
106 *key = i->first; |
107 m_list.erase (i); |
107 m_list.erase (i); |
108 return key; |
108 return i->second; |
|
109 } |
|
110 |
|
111 bool |
|
112 SchedulerMap::is_valid (EventId id) |
|
113 { |
|
114 EventMapI i = get_from_event (id.get_event_impl ()); |
|
115 Scheduler::EventKey key = i->first; |
|
116 return (key.m_time == id.get_time () && |
|
117 key.m_uid == id.get_uid ()); |
109 } |
118 } |
110 |
119 |
111 |
120 |
112 }; // namespace ns3 |
121 }; // namespace ns3 |