summaryrefslogtreecommitdiff
path: root/src/DHTMessageTracker.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-02-26 22:59:28 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-02-26 22:59:28 +0900
commit7f805df4f0f760571a08a41759010f80954976e7 (patch)
tree0fbc09487b536755d030be1afd33c7451cedbd18 /src/DHTMessageTracker.cc
parent4ac4fdf1e9491151ccc5f892ac69899b77ede605 (diff)
Use std::remove_if
Diffstat (limited to 'src/DHTMessageTracker.cc')
-rw-r--r--src/DHTMessageTracker.cc30
1 files changed, 20 insertions, 10 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<SharedHandle<DHTMessageTrackerEntry> >::iterator i =
- entries_.begin(), eoi = entries_.end(); i != eoi;) {
- if((*i)->isTimeout()) {
- SharedHandle<DHTMessageTrackerEntry> entry = *i;
- i = entries_.erase(i);
- eoi = entries_.end();
- handleTimeoutEntry(entry);
+namespace {
+struct HandleTimeout {
+ HandleTimeout(DHTMessageTracker* tracker)
+ : tracker(tracker)
+ {}
+ bool operator()(const SharedHandle<DHTMessageTrackerEntry>& 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<DHTMessageTrackerEntry>