summaryrefslogtreecommitdiff
path: root/src/DHTAbstractNodeLookupTask.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-28 16:04:52 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-02-28 16:04:52 +0000
commit72e475dfdeaa4a87dff0eef994e7814e94c40363 (patch)
tree94a84e90c14876db223e4a733f651fe0b034f5e9 /src/DHTAbstractNodeLookupTask.cc
parentc342bde9627b434effbc0cd10b817670d1da0923 (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.cc15
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;