From cd7c70b0a13df78ef700d647a72c11f61a7d8416 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Tue, 12 Dec 2006 14:30:44 +0100 Subject: [PATCH] optimize Binary Heap comparison operator --- src/simulator/scheduler-heap.cc | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/src/simulator/scheduler-heap.cc b/src/simulator/scheduler-heap.cc index d37b9dbec..609007355 100644 --- a/src/simulator/scheduler-heap.cc +++ b/src/simulator/scheduler-heap.cc @@ -120,14 +120,31 @@ SchedulerHeap::Exch (uint32_t a, uint32_t b) } bool -SchedulerHeap::IsLess (uint32_t a, uint32_t b) +SchedulerHeap::IsLower (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const { - Scheduler::EventKeyCompare compare; - return compare (m_heap[a].second, m_heap[b].second); + if (a->m_ns < b->m_ns) + { + return true; + } + else if (a->m_ns == b->m_ns && + a->m_uid < b->m_uid) + { + return true; + } + else + { + return false; + } +} + +bool +SchedulerHeap::IsLess (uint32_t a, uint32_t b) const +{ + return IsLower (&m_heap[a].second, &m_heap[b].second); } uint32_t -SchedulerHeap::Smallest (uint32_t a, uint32_t b) +SchedulerHeap::Smallest (uint32_t a, uint32_t b) const { return IsLess (a,b)?a:b; } @@ -215,7 +232,6 @@ SchedulerHeap::RealRemoveNext (void) EventImpl * SchedulerHeap::RealRemove (EventId id, Scheduler::EventKey *key) { - Scheduler::EventKeyCompare compare; uint32_t top; uint32_t bottom; bottom = 1; @@ -225,7 +241,7 @@ SchedulerHeap::RealRemove (EventId id, Scheduler::EventKey *key) while (top != bottom) { uint32_t i = bottom + (top - bottom) / 2; - if (compare (*key, m_heap[i].second)) + if (IsLower (key, &m_heap[i].second)) { top = i; }