src/simulator/scheduler-heap.cc
changeset 46 627df4c75852
parent 36 e622fb7a8262
child 53 ae406f4957d5
equal deleted inserted replaced
45:f963078c6e95 46:627df4c75852
   143 {
   143 {
   144 	return is_less (a,b)?a:b;
   144 	return is_less (a,b)?a:b;
   145 }
   145 }
   146 
   146 
   147 bool
   147 bool
   148 SchedulerHeap::is_empty (void) const
   148 SchedulerHeap::real_is_empty (void) const
   149 {
   149 {
   150 	return (m_heap.size () == 1)?true:false;
   150 	return (m_heap.size () == 1)?true:false;
   151 }
   151 }
   152 
   152 
   153 void
   153 void
   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 () &&