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