From 7f805df4f0f760571a08a41759010f80954976e7 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Tue, 26 Feb 2013 22:59:28 +0900 Subject: [PATCH] Use std::remove_if --- src/DHTMessageTracker.cc | 30 ++++++++++++++++++++---------- src/DHTMessageTracker.h | 5 +++-- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/DHTMessageTracker.cc b/src/DHTMessageTracker.cc index ec728a77..06baf50e 100644 --- a/src/DHTMessageTracker.cc +++ b/src/DHTMessageTracker.cc @@ -135,19 +135,29 @@ void DHTMessageTracker::handleTimeoutEntry } } -void DHTMessageTracker::handleTimeout() -{ - for(std::deque >::iterator i = - entries_.begin(), eoi = entries_.end(); i != eoi;) { - if((*i)->isTimeout()) { - SharedHandle entry = *i; - i = entries_.erase(i); - eoi = entries_.end(); - handleTimeoutEntry(entry); +namespace { +struct HandleTimeout { + HandleTimeout(DHTMessageTracker* tracker) + : tracker(tracker) + {} + bool operator()(const SharedHandle& ent) const + { + if(ent->isTimeout()) { + tracker->handleTimeoutEntry(ent); + return true; } else { - ++i; + return false; } } + DHTMessageTracker* tracker; +}; +} // namespace + +void DHTMessageTracker::handleTimeout() +{ + entries_.erase(std::remove_if(entries_.begin(), entries_.end(), + HandleTimeout(this)), + entries_.end()); } SharedHandle diff --git a/src/DHTMessageTracker.h b/src/DHTMessageTracker.h index c6ac66b1..d72bdeeb 100644 --- a/src/DHTMessageTracker.h +++ b/src/DHTMessageTracker.h @@ -60,8 +60,6 @@ private: SharedHandle routingTable_; SharedHandle factory_; - - void handleTimeoutEntry(const SharedHandle& entry); public: DHTMessageTracker(); @@ -78,6 +76,9 @@ public: void handleTimeout(); + // Made public to make unnamed functor can access it + void handleTimeoutEntry(const SharedHandle& entry); + SharedHandle getEntryFor (const SharedHandle& message) const;