diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-03-23 01:34:37 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2012-03-23 01:34:37 +0900 |
| commit | eed804baaa02b4f81a27ba2844868b19992a90a1 (patch) | |
| tree | f6c5741443a979593fe080422ac78ef1b0f699d2 /src/ServerStatMan.cc | |
| parent | 4acc0f88317287b86c6b89ba5e5262d3ebd30cc9 (diff) | |
Use std::set instead of std::deque if the elements are sorted and
insertions and deletions are frequent.
Diffstat (limited to 'src/ServerStatMan.cc')
| -rw-r--r-- | src/ServerStatMan.cc | 32 |
1 files changed, 16 insertions, 16 deletions
diff --git a/src/ServerStatMan.cc b/src/ServerStatMan.cc index 0b10837d..b41e2c4b 100644 --- a/src/ServerStatMan.cc +++ b/src/ServerStatMan.cc @@ -61,23 +61,17 @@ SharedHandle<ServerStat> ServerStatMan::find(const std::string& hostname, const std::string& protocol) const { SharedHandle<ServerStat> ss(new ServerStat(hostname, protocol)); - std::deque<SharedHandle<ServerStat> >::const_iterator i = - std::lower_bound(serverStats_.begin(), serverStats_.end(), ss, - DerefLess<SharedHandle<ServerStat> >()); - if(i != serverStats_.end() && - (*i)->getHostname() == hostname && (*i)->getProtocol() == protocol) { - return *i; - } else { + ServerStatSet::iterator i = serverStats_.find(ss); + if(i == serverStats_.end()) { return SharedHandle<ServerStat>(); + } else { + return *i; } } bool ServerStatMan::add(const SharedHandle<ServerStat>& serverStat) { - std::deque<SharedHandle<ServerStat> >::iterator i = - std::lower_bound(serverStats_.begin(), serverStats_.end(), serverStat, - DerefLess<SharedHandle<ServerStat> >()); - + ServerStatSet::iterator i = serverStats_.lower_bound(serverStat); if(i != serverStats_.end() && *(*i) == *serverStat) { return false; } else { @@ -97,8 +91,8 @@ bool ServerStatMan::save(const std::string& filename) const filename.c_str())); return false; } - for(std::deque<SharedHandle<ServerStat> >::const_iterator i = - serverStats_.begin(), eoi = serverStats_.end(); i != eoi; ++i) { + for(ServerStatSet::iterator i = serverStats_.begin(), + eoi = serverStats_.end(); i != eoi; ++i) { std::string l = (*i)->toString(); l += "\n"; if(fp.write(l.data(), l.size()) != l.size()) { @@ -217,9 +211,15 @@ public: void ServerStatMan::removeStaleServerStat(time_t timeout) { - serverStats_.erase(std::remove_if(serverStats_.begin(), serverStats_.end(), - FindStaleServerStat(timeout)), - serverStats_.end()); + FindStaleServerStat finder(timeout); + for(ServerStatSet::iterator i = serverStats_.begin(), + eoi = serverStats_.end(); i != eoi;) { + if(finder(*i)) { + serverStats_.erase(i++); + } else { + ++i; + } + } } } // namespace aria2 |
