From 873367522aeeaa59e07f8615335a580d57d698db Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Tue, 12 Dec 2006 14:31:16 +0100 Subject: [PATCH] optimize other all comparison operators --- src/simulator/scheduler-heap.h | 5 +++-- src/simulator/scheduler-list.cc | 20 ++++++++++++++++++-- src/simulator/scheduler-list.h | 2 ++ src/simulator/scheduler-map.cc | 23 +++++++++++++++++++++++ src/simulator/scheduler-map.h | 12 +++++++++--- src/simulator/scheduler.cc | 23 ----------------------- src/simulator/scheduler.h | 4 ---- 7 files changed, 55 insertions(+), 34 deletions(-) diff --git a/src/simulator/scheduler-heap.h b/src/simulator/scheduler-heap.h index 758f029b7..c22a83ecc 100644 --- a/src/simulator/scheduler-heap.h +++ b/src/simulator/scheduler-heap.h @@ -54,8 +54,9 @@ private: uint32_t Last (void) const; inline bool IsRoot (uint32_t id) const; inline bool IsBottom (uint32_t id) const; - inline bool IsLess (uint32_t a, uint32_t b); - inline uint32_t Smallest (uint32_t a, uint32_t b); + inline bool IsLower (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const; + inline bool IsLess (uint32_t a, uint32_t b) const; + inline uint32_t Smallest (uint32_t a, uint32_t b) const; inline void Exch (uint32_t a, uint32_t b); void BottomUp (void); diff --git a/src/simulator/scheduler-list.cc b/src/simulator/scheduler-list.cc index d96ee0bcf..16ce7a01e 100644 --- a/src/simulator/scheduler-list.cc +++ b/src/simulator/scheduler-list.cc @@ -31,14 +31,30 @@ SchedulerList::SchedulerList () SchedulerList::~SchedulerList () {} +bool +SchedulerList::IsLower (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const +{ + 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; + } +} EventId SchedulerList::RealInsert (EventImpl *event, Scheduler::EventKey key) { - Scheduler::EventKeyCompare compare; for (EventsI i = m_events.begin (); i != m_events.end (); i++) { - if (compare (key, i->second)) + if (IsLower (&key, &i->second)) { m_events.insert (i, std::make_pair (event, key)); return EventId (event, key.m_ns, key.m_uid); diff --git a/src/simulator/scheduler-list.h b/src/simulator/scheduler-list.h index e93249984..8d9ebce1c 100644 --- a/src/simulator/scheduler-list.h +++ b/src/simulator/scheduler-list.h @@ -46,6 +46,8 @@ class SchedulerList : public Scheduler { virtual EventImpl *RealRemove (EventId ev, Scheduler::EventKey *key); virtual bool RealIsValid (EventId id); + inline bool IsLower (Scheduler::EventKey const*a, Scheduler::EventKey const*b) const; + typedef std::list > Events; typedef std::list >::iterator EventsI; Events m_events; diff --git a/src/simulator/scheduler-map.cc b/src/simulator/scheduler-map.cc index 9d7e799bd..0c38f87d1 100644 --- a/src/simulator/scheduler-map.cc +++ b/src/simulator/scheduler-map.cc @@ -43,6 +43,29 @@ SchedulerMap::SchedulerMap () SchedulerMap::~SchedulerMap () {} +/* Note the invariants which this function must provide: + * - irreflexibility: f (x,x) is false) + * - antisymmetry: f(x,y) = !f(y,x) + * - transitivity: f(x,y) and f(y,z) => f(x,z) + */ +bool +SchedulerMap::EventKeyCompare::operator () (struct EventKey a, struct EventKey b) +{ + 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; + } +} + + EventId SchedulerMap::RealInsert (EventImpl *event, Scheduler::EventKey key) diff --git a/src/simulator/scheduler-map.h b/src/simulator/scheduler-map.h index 72d07cb60..1a549de6c 100644 --- a/src/simulator/scheduler-map.h +++ b/src/simulator/scheduler-map.h @@ -45,9 +45,15 @@ private: virtual EventImpl *RealRemove (EventId ev, Scheduler::EventKey *key); virtual bool RealIsValid (EventId id); - typedef std::map EventMap; - typedef std::map::iterator EventMapI; - typedef std::map::const_iterator EventMapCI; + class EventKeyCompare { + public: + bool operator () (struct EventKey a, struct EventKey b); + }; + + typedef std::map EventMap; + typedef std::map::iterator EventMapI; + typedef std::map::const_iterator EventMapCI; + EventMap m_list; uint32_t m_uid; diff --git a/src/simulator/scheduler.cc b/src/simulator/scheduler.cc index 7f6115017..6feab0750 100644 --- a/src/simulator/scheduler.cc +++ b/src/simulator/scheduler.cc @@ -27,29 +27,6 @@ namespace ns3 { Scheduler::~Scheduler () {} -/* Note the invariants which this function must provide: - * - irreflexibility: f (x,x) is false) - * - antisymmetry: f(x,y) = !f(y,x) - * - transitivity: f(x,y) and f(y,z) => f(x,z) - */ -bool -Scheduler::EventKeyCompare::operator () (struct EventKey a, struct EventKey b) -{ - 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; - } -} - - EventId Scheduler::Insert (EventImpl *event, struct EventKey key) { diff --git a/src/simulator/scheduler.h b/src/simulator/scheduler.h index 654f53e3e..02566c83d 100644 --- a/src/simulator/scheduler.h +++ b/src/simulator/scheduler.h @@ -58,10 +58,6 @@ class Scheduler { uint64_t m_ns; uint32_t m_uid; }; - class EventKeyCompare { - public: - bool operator () (struct EventKey a, struct EventKey b); - }; virtual ~Scheduler () = 0;