Use std::remove_if

pull/50/merge
Tatsuhiro Tsujikawa 2013-02-26 22:59:28 +09:00
parent 4ac4fdf1e9
commit 7f805df4f0
2 changed files with 23 additions and 12 deletions

View File

@ -135,19 +135,29 @@ void DHTMessageTracker::handleTimeoutEntry
} }
} }
void DHTMessageTracker::handleTimeout() namespace {
{ struct HandleTimeout {
for(std::deque<SharedHandle<DHTMessageTrackerEntry> >::iterator i = HandleTimeout(DHTMessageTracker* tracker)
entries_.begin(), eoi = entries_.end(); i != eoi;) { : tracker(tracker)
if((*i)->isTimeout()) { {}
SharedHandle<DHTMessageTrackerEntry> entry = *i; bool operator()(const SharedHandle<DHTMessageTrackerEntry>& ent) const
i = entries_.erase(i); {
eoi = entries_.end(); if(ent->isTimeout()) {
handleTimeoutEntry(entry); tracker->handleTimeoutEntry(ent);
return true;
} else { } 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> SharedHandle<DHTMessageTrackerEntry>

View File

@ -60,8 +60,6 @@ private:
SharedHandle<DHTRoutingTable> routingTable_; SharedHandle<DHTRoutingTable> routingTable_;
SharedHandle<DHTMessageFactory> factory_; SharedHandle<DHTMessageFactory> factory_;
void handleTimeoutEntry(const SharedHandle<DHTMessageTrackerEntry>& entry);
public: public:
DHTMessageTracker(); DHTMessageTracker();
@ -78,6 +76,9 @@ public:
void handleTimeout(); void handleTimeout();
// Made public to make unnamed functor can access it
void handleTimeoutEntry(const SharedHandle<DHTMessageTrackerEntry>& entry);
SharedHandle<DHTMessageTrackerEntry> getEntryFor SharedHandle<DHTMessageTrackerEntry> getEntryFor
(const SharedHandle<DHTMessage>& message) const; (const SharedHandle<DHTMessage>& message) const;