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> UTMetadataRequestTracker::removeTimeoutEntry()
{ {
std::vector<size_t> indexes; std::vector<size_t> indexes;
const time_t TIMEOUT = 20; trackedRequests_.erase(std::remove_if(trackedRequests_.begin(),
for(std::vector<RequestEntry>::iterator i = trackedRequests_.begin(), trackedRequests_.end(),
eoi = trackedRequests_.end(); i != eoi;) { RemoveTimeoutEntry(indexes)),
if((*i).elapsed(TIMEOUT)) { trackedRequests_.end());
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;
}
}
return indexes; return indexes;
} }

View File

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