190 exch (index, left); |
190 exch (index, left); |
191 } |
191 } |
192 |
192 |
193 |
193 |
194 EventId |
194 EventId |
195 SchedulerHeap::insert (EventImpl *event, Scheduler::EventKey key) |
195 SchedulerHeap::real_insert (EventImpl *event, Scheduler::EventKey key) |
196 { |
196 { |
197 m_heap.push_back (std::make_pair (event, key)); |
197 m_heap.push_back (std::make_pair (event, key)); |
198 bottom_up (); |
198 bottom_up (); |
199 store_in_event (event, last ()); |
199 store_in_event (event, last ()); |
200 return EventId (event, key.m_ns, key.m_uid); |
200 return EventId (event, key.m_ns, key.m_uid); |
201 } |
201 } |
202 |
202 |
203 EventImpl * |
203 EventImpl * |
204 SchedulerHeap::peek_next (void) const |
204 SchedulerHeap::real_peek_next (void) const |
205 { |
205 { |
206 assert (!is_empty ()); |
|
207 return m_heap[root ()].first; |
206 return m_heap[root ()].first; |
208 } |
207 } |
209 Scheduler::EventKey |
208 Scheduler::EventKey |
210 SchedulerHeap::peek_next_key (void) const |
209 SchedulerHeap::real_peek_next_key (void) const |
211 { |
210 { |
212 assert (!is_empty ()); |
|
213 return m_heap[root ()].second; |
211 return m_heap[root ()].second; |
214 } |
212 } |
215 void |
213 void |
216 SchedulerHeap::remove_next (void) |
214 SchedulerHeap::real_remove_next (void) |
217 { |
215 { |
218 assert (!is_empty ()); |
|
219 exch (root (), last ()); |
216 exch (root (), last ()); |
220 m_heap.pop_back (); |
217 m_heap.pop_back (); |
221 top_down (); |
218 top_down (); |
222 } |
219 } |
223 |
220 |
224 |
221 |
225 EventImpl * |
222 EventImpl * |
226 SchedulerHeap::remove (EventId id, Scheduler::EventKey *key) |
223 SchedulerHeap::real_remove (EventId id, Scheduler::EventKey *key) |
227 { |
224 { |
228 EventImpl *ev = id.get_event_impl (); |
225 EventImpl *ev = id.get_event_impl (); |
229 uint32_t i = get_from_event (ev); |
226 uint32_t i = get_from_event (ev); |
230 *key = m_heap[i].second; |
227 *key = m_heap[i].second; |
231 exch (i, last ()); |
228 exch (i, last ()); |
233 top_down (); |
230 top_down (); |
234 return ev; |
231 return ev; |
235 } |
232 } |
236 |
233 |
237 bool |
234 bool |
238 SchedulerHeap::is_valid (EventId id) |
235 SchedulerHeap::real_is_valid (EventId id) |
239 { |
236 { |
240 EventImpl *ev = id.get_event_impl (); |
237 EventImpl *ev = id.get_event_impl (); |
241 uint32_t i = get_from_event (ev); |
238 uint32_t i = get_from_event (ev); |
242 Scheduler::EventKey key = m_heap[i].second; |
239 Scheduler::EventKey key = m_heap[i].second; |
243 return (key.m_ns == id.get_ns () && |
240 return (key.m_ns == id.get_ns () && |