diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-28 16:04:52 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-02-28 16:04:52 +0000 |
| commit | 72e475dfdeaa4a87dff0eef994e7814e94c40363 (patch) | |
| tree | 94a84e90c14876db223e4a733f651fe0b034f5e9 /src/DHTAbstractNodeLookupTask.cc | |
| parent | c342bde9627b434effbc0cd10b817670d1da0923 (diff) | |
2010-03-01 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Avoid to calculate end() iterator in each loop. std::deque is
particularly slow. Make sure that recalculate end iterator if
element is erased during loop.
Diffstat (limited to 'src/DHTAbstractNodeLookupTask.cc')
| -rw-r--r-- | src/DHTAbstractNodeLookupTask.cc | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/DHTAbstractNodeLookupTask.cc b/src/DHTAbstractNodeLookupTask.cc index fd96618a..ace56915 100644 --- a/src/DHTAbstractNodeLookupTask.cc +++ b/src/DHTAbstractNodeLookupTask.cc @@ -33,6 +33,10 @@ */ /* copyright --> */ #include "DHTAbstractNodeLookupTask.h" + +#include <cstring> +#include <algorithm> + #include "DHTRoutingTable.h" #include "DHTMessageDispatcher.h" #include "DHTMessageFactory.h" @@ -44,8 +48,6 @@ #include "Logger.h" #include "util.h" #include "DHTIDCloser.h" -#include <cstring> -#include <algorithm> namespace aria2 { @@ -66,7 +68,7 @@ void DHTAbstractNodeLookupTask::onReceived(const SharedHandle<DHTMessage>& messa size_t count = 0; for(std::vector<SharedHandle<DHTNodeLookupEntry> >::const_iterator i = - newEntries.begin(); i != newEntries.end(); ++i) { + newEntries.begin(), eoi = newEntries.end(); i != eoi; ++i) { if(memcmp(_localNode->getID(), (*i)->_node->getID(), DHT_ID_LENGTH) != 0) { _entries.push_front(*i); ++count; @@ -98,7 +100,8 @@ void DHTAbstractNodeLookupTask::onTimeout(const SharedHandle<DHTNode>& node) util::toHex(node->getID(), DHT_ID_LENGTH).c_str()); } --_inFlightMessage; - for(std::deque<SharedHandle<DHTNodeLookupEntry> >::iterator i = _entries.begin(); i != _entries.end(); ++i) { + for(std::deque<SharedHandle<DHTNodeLookupEntry> >::iterator i = + _entries.begin(), eoi = _entries.end(); i != eoi; ++i) { if((*i)->_node == node) { _entries.erase(i); break; @@ -132,8 +135,8 @@ void DHTAbstractNodeLookupTask::sendMessageAndCheckFinish() void DHTAbstractNodeLookupTask::sendMessage() { for(std::deque<SharedHandle<DHTNodeLookupEntry> >::iterator i = - _entries.begin(); - i != _entries.end() && _inFlightMessage < ALPHA; ++i) { + _entries.begin(), eoi = _entries.end(); + i != eoi && _inFlightMessage < ALPHA; ++i) { if((*i)->_used == false) { ++_inFlightMessage; (*i)->_used = true; |
