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()
{
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>

View File

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