Use std::remove_if

pull/50/merge
Tatsuhiro Tsujikawa 2013-02-26 23:43:20 +09:00
parent 7f805df4f0
commit 704eebfac6
2 changed files with 28 additions and 15 deletions

View File

@ -65,22 +65,34 @@ void UTMetadataRequestTracker::remove(size_t index)
}
}
namespace {
struct RemoveTimeoutEntry {
RemoveTimeoutEntry(std::vector<size_t>& indexes)
: indexes(indexes)
{}
bool operator()(const UTMetadataRequestTracker::RequestEntry& ent) const
{
if(ent.elapsed(TIMEOUT)) {
A2_LOG_DEBUG(fmt("ut_metadata request timeout. index=%lu",
static_cast<unsigned long>(ent.index_)));
indexes.push_back(ent.index_);
return true;
} else {
return false;
}
}
std::vector<size_t>& indexes;
static const time_t TIMEOUT = 20;
};
} // namespace
std::vector<size_t> UTMetadataRequestTracker::removeTimeoutEntry()
{
std::vector<size_t> indexes;
const time_t TIMEOUT = 20;
for(std::vector<RequestEntry>::iterator i = trackedRequests_.begin(),
eoi = trackedRequests_.end(); i != eoi;) {
if((*i).elapsed(TIMEOUT)) {
A2_LOG_DEBUG(fmt("ut_metadata request timeout. index=%lu",
static_cast<unsigned long>((*i).index_)));
indexes.push_back((*i).index_);
i = trackedRequests_.erase(i);
eoi = trackedRequests_.end();
} else {
++i;
}
}
trackedRequests_.erase(std::remove_if(trackedRequests_.begin(),
trackedRequests_.end(),
RemoveTimeoutEntry(indexes)),
trackedRequests_.end());
return indexes;
}

View File

@ -45,7 +45,8 @@
namespace aria2 {
class UTMetadataRequestTracker {
private:
public:
// Made public so that unnamed functor can access it
struct RequestEntry {
size_t index_;
Timer dispatchedTime_;
@ -62,7 +63,7 @@ private:
return index_ == e.index_;
}
};
private:
std::vector<RequestEntry> trackedRequests_;
public:
UTMetadataRequestTracker();