Browse Source

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.
Tatsuhiro Tsujikawa 15 years ago
parent
commit
72e475dfde
81 changed files with 426 additions and 367 deletions
  1. 6 0
      ChangeLog
  2. 12 12
      src/AdaptiveURISelector.cc
  3. 6 6
      src/AnnounceList.cc
  4. 7 5
      src/BtDependency.cc
  5. 2 2
      src/BtLeecherStateChoke.cc
  6. 2 2
      src/BtRegistry.cc
  7. 2 2
      src/BtRegistry.h
  8. 2 1
      src/BtSeederStateChoke.cc
  9. 1 1
      src/BtSetup.cc
  10. 2 2
      src/CookieParser.cc
  11. 8 7
      src/CookieStorage.cc
  12. 2 2
      src/CookieStorage.h
  13. 9 6
      src/DHTAbstractNodeLookupTask.cc
  14. 2 2
      src/DHTAbstractNodeLookupTask.h
  15. 2 2
      src/DHTAutoSaveCommand.cc
  16. 6 4
      src/DHTBucket.cc
  17. 2 2
      src/DHTBucketRefreshTask.cc
  18. 2 2
      src/DHTConnectionImpl.cc
  19. 4 4
      src/DHTFindNodeReplyMessage.cc
  20. 5 4
      src/DHTGetPeersReplyMessage.cc
  21. 2 2
      src/DHTMessageFactoryImpl.cc
  22. 9 6
      src/DHTMessageTracker.cc
  23. 2 2
      src/DHTPeerAnnounceEntry.cc
  24. 4 2
      src/DHTPeerAnnounceStorage.cc
  25. 3 2
      src/DHTPeerLookupTask.cc
  26. 2 2
      src/DHTRoutingTableSerializer.cc
  27. 1 1
      src/DHTSetup.cc
  28. 8 8
      src/DNSCache.h
  29. 12 10
      src/DefaultBtInteractive.cc
  30. 1 1
      src/DefaultBtMessageDispatcher.cc
  31. 2 2
      src/DefaultBtProgressInfoFile.cc
  32. 11 10
      src/DefaultBtRequestFactory.cc
  33. 5 5
      src/DefaultPeerStorage.cc
  34. 7 6
      src/DefaultPieceStorage.cc
  35. 3 2
      src/DownloadContext.cc
  36. 7 7
      src/DownloadEngine.cc
  37. 2 1
      src/EpollEventPoll.cc
  38. 2 2
      src/ExtensionMessageRegistry.h
  39. 2 2
      src/FeatureConfig.cc
  40. 4 4
      src/FeedbackURISelector.cc
  41. 2 2
      src/File.cc
  42. 4 2
      src/FileEntry.cc
  43. 2 2
      src/HandleRegistry.h
  44. 8 8
      src/HandshakeExtensionMessage.cc
  45. 2 2
      src/HttpConnection.cc
  46. 2 1
      src/HttpHeader.cc
  47. 5 5
      src/HttpRequest.cc
  48. 2 2
      src/HttpRequestCommand.cc
  49. 2 2
      src/HttpResponse.cc
  50. 2 2
      src/InitiateConnectionCommand.cc
  51. 2 1
      src/MSEHandshake.cc
  52. 8 8
      src/Metalink2RequestGroup.cc
  53. 1 1
      src/MetalinkHelper.cc
  54. 35 28
      src/MultiDiskAdaptor.cc
  55. 2 2
      src/Netrc.cc
  56. 2 2
      src/OptionHandlerImpl.h
  57. 5 3
      src/OptionParser.cc
  58. 2 2
      src/PStringBuildVisitor.cc
  59. 2 2
      src/PeerListProcessor.h
  60. 2 2
      src/PeerListenCommand.cc
  61. 2 2
      src/PeerSessionResource.cc
  62. 2 2
      src/Piece.cc
  63. 3 2
      src/PieceStatMan.cc
  64. 2 2
      src/PriorityPieceSelector.cc
  65. 6 6
      src/RequestGroup.cc
  66. 21 19
      src/RequestGroupMan.cc
  67. 13 11
      src/SegmentMan.cc
  68. 11 10
      src/SelectEventPoll.cc
  69. 2 2
      src/ServerStatMan.cc
  70. 6 3
      src/SocketCore.cc
  71. 5 4
      src/UTMetadataRequestTracker.cc
  72. 2 2
      src/UTPexExtensionMessage.cc
  73. 2 2
      src/XmlRpcMethod.cc
  74. 23 22
      src/XmlRpcMethodImpl.cc
  75. 4 2
      src/bencode.cc
  76. 24 24
      src/bittorrent_helper.cc
  77. 6 5
      src/download_helper.cc
  78. 2 2
      src/magnet.cc
  79. 2 2
      src/main.cc
  80. 2 2
      src/messageDigest.cc
  81. 21 17
      src/util.cc

+ 6 - 0
ChangeLog

@@ -1,3 +1,9 @@
+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.
+
 2010-02-28  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 	Use vector instead of deque for containers which is used for

+ 12 - 12
src/AdaptiveURISelector.cc

@@ -106,8 +106,8 @@ void AdaptiveURISelector::mayRetryWithIncreasedTimeout(FileEntry* fileEntry)
                  std::mem_fun_ref(&URIResult::getURI));
 
   if(_logger->debug()) {
-    for(std::deque<std::string>::const_iterator i = uris.begin();
-        i != uris.end(); ++i) {
+    for(std::deque<std::string>::const_iterator i = uris.begin(),
+          eoi = uris.end(); i != eoi; ++i) {
       _logger->debug("AdaptiveURISelector: will retry server with increased"
                      " timeout (%d s): %s",
                      _requestGroup->getTimeout(), (*i).c_str());
@@ -257,8 +257,8 @@ std::string AdaptiveURISelector::getMaxDownloadSpeedUri
 {
   int max = -1;
   std::string uri = A2STR::NIL;
-  for(std::deque<std::string>::const_iterator i = uris.begin();
-      i != uris.end(); ++i) {
+  for(std::deque<std::string>::const_iterator i = uris.begin(),
+        eoi = uris.end(); i != eoi; ++i) {
     SharedHandle<ServerStat> ss = getServerStats(*i);
     if(ss.isNull())
       continue;
@@ -279,8 +279,8 @@ std::deque<std::string> AdaptiveURISelector::getUrisBySpeed
 (const std::deque<std::string>& uris, unsigned int min) const
 {
   std::deque<std::string> bests;
-  for(std::deque<std::string>::const_iterator i = uris.begin();
-      i != uris.end(); ++i) {
+  for(std::deque<std::string>::const_iterator i = uris.begin(),
+        eoi = uris.end(); i != eoi; ++i) {
     SharedHandle<ServerStat> ss = getServerStats(*i);
     if(ss.isNull())
       continue;
@@ -304,8 +304,8 @@ std::string AdaptiveURISelector::selectRandomUri
 std::string AdaptiveURISelector::getFirstNotTestedUri
 (const std::deque<std::string>& uris) const
 {
-  for(std::deque<std::string>::const_iterator i = uris.begin(); 
-      i != uris.end(); ++i) {
+  for(std::deque<std::string>::const_iterator i = uris.begin(),
+        eoi = uris.end(); i != eoi; ++i) {
     SharedHandle<ServerStat> ss = getServerStats(*i);
     if(ss.isNull())
       return *i;
@@ -318,8 +318,8 @@ std::string AdaptiveURISelector::getFirstToTestUri
 {
   unsigned int counter;
   int power;
-  for(std::deque<std::string>::const_iterator i = uris.begin();
-      i != uris.end(); ++i) {
+  for(std::deque<std::string>::const_iterator i = uris.begin(),
+        eoi = uris.end(); i != eoi; ++i) {
     SharedHandle<ServerStat> ss = getServerStats(*i);
     if(ss.isNull())
       continue;
@@ -348,8 +348,8 @@ unsigned int AdaptiveURISelector::getNbTestedServers
 (const std::deque<std::string>& uris) const
 {
   unsigned int counter = 0;
-  for(std::deque<std::string>::const_iterator i = uris.begin();
-      i != uris.end(); ++i) {
+  for(std::deque<std::string>::const_iterator i = uris.begin(),
+        eoi = uris.end(); i != eoi; ++i) {
     SharedHandle<ServerStat> ss = getServerStats(*i);
     if(ss.isNull())
       ++counter;

+ 6 - 6
src/AnnounceList.cc

@@ -63,15 +63,15 @@ AnnounceList::AnnounceList
 void AnnounceList::reconfigure(const BDE& announceList)
 {
   if(announceList.isList()) {
-    for(BDE::List::const_iterator itr = announceList.listBegin();
-        itr != announceList.listEnd(); ++itr) {
+    for(BDE::List::const_iterator itr = announceList.listBegin(),
+          eoi = announceList.listEnd(); itr != eoi; ++itr) {
       const BDE& elemList = *itr;
       if(!elemList.isList()) {
         continue;
       }
       std::deque<std::string> urls;
-      for(BDE::List::const_iterator elemItr = elemList.listBegin();
-          elemItr != elemList.listEnd(); ++elemItr) {
+      for(BDE::List::const_iterator elemItr = elemList.listBegin(),
+            eoi2 = elemList.listEnd(); elemItr != eoi2; ++elemItr) {
         const BDE& data = *elemItr;
         if(data.isString()) {
           urls.push_back(data.s());
@@ -242,8 +242,8 @@ void AnnounceList::moveToCompletedAllowedTier() {
 }
 
 void AnnounceList::shuffle() {
-  for(std::deque<SharedHandle<AnnounceTier> >::iterator itr = tiers.begin();
-      itr != tiers.end(); ++itr) {
+  for(std::deque<SharedHandle<AnnounceTier> >::const_iterator itr =
+        tiers.begin(), eoi = tiers.end(); itr != eoi; ++itr) {
     std::deque<std::string>& urls = (*itr)->urls;
     std::random_shuffle(urls.begin(), urls.end(),
                         *(SimpleRandomizer::getInstance().get()));

+ 7 - 5
src/BtDependency.cc

@@ -109,17 +109,19 @@ bool BtDependency::resolve()
         // Copy file path in _dependant's FileEntries to newly created
         // context's FileEntries to endorse the path structure of
         // _dependant.  URIs and singleHostMultiConnection are also copied.
+        std::vector<SharedHandle<FileEntry> >::const_iterator ctxFilesEnd =
+          fileEntries.end();
         for(std::vector<SharedHandle<FileEntry> >::const_iterator s =
-              dependantFileEntries.begin(); s != dependantFileEntries.end();
-            ++s){
+              dependantFileEntries.begin(), eoi = dependantFileEntries.end();
+            s != eoi; ++s){
           std::vector<SharedHandle<FileEntry> >::const_iterator d =
-            context->getFileEntries().begin();
-          for(; d != context->getFileEntries().end(); ++d) {
+            fileEntries.begin();
+          for(; d != ctxFilesEnd; ++d) {
             if((*d)->getOriginalName() == (*s)->getOriginalName()) {
               break;
             }
           }
-          if(d == context->getFileEntries().end()) {
+          if(d == ctxFilesEnd) {
             throw DL_ABORT_EX
               (StringFormat("No entry %s in torrent file",
                             (*s)->getOriginalName().c_str()).str());

+ 2 - 2
src/BtLeecherStateChoke.cc

@@ -165,8 +165,8 @@ void BtLeecherStateChoke::regularUnchoke(std::vector<PeerEntry>& peerEntries)
   if(fastOptUnchoker) {
     std::random_shuffle(peerIter, peerEntries.end(),
                         *(SimpleRandomizer::getInstance().get()));
-    for(std::vector<PeerEntry>::iterator i = peerIter; i != peerEntries.end();
-        ++i) {
+    for(std::vector<PeerEntry>::iterator i = peerIter,
+          eoi = peerEntries.end(); i != eoi; ++i) {
       if((*i).getPeer()->peerInterested()) {
         (*i).enableOptUnchoking();
         _logger->info("OU: %s", (*i).getPeer()->ipaddr.c_str());

+ 2 - 2
src/BtRegistry.cc

@@ -54,8 +54,8 @@ SharedHandle<DownloadContext>
 BtRegistry::getDownloadContext(const std::string& infoHash) const
 {
   SharedHandle<DownloadContext> dctx;
-  for(std::map<int32_t, BtObject>::const_iterator i = _pool.begin();
-      i != _pool.end(); ++i) {
+  for(std::map<int32_t, BtObject>::const_iterator i = _pool.begin(),
+        eoi = _pool.end(); i != eoi; ++i) {
     const BDE& attrs =
       (*i).second._downloadContext->getAttribute(bittorrent::BITTORRENT);
     if(attrs[bittorrent::INFO_HASH].s() == infoHash) {

+ 2 - 2
src/BtRegistry.h

@@ -101,8 +101,8 @@ public:
   template<typename OutputIterator>
   OutputIterator getAllDownloadContext(OutputIterator dest)
   {
-    for(std::map<int32_t, BtObject>::const_iterator i = _pool.begin();
-        i != _pool.end(); ++i) {
+    for(std::map<int32_t, BtObject>::const_iterator i = _pool.begin(),
+          eoi = _pool.end(); i != eoi; ++i) {
       *dest++ = (*i).second._downloadContext;
     }
     return dest;

+ 2 - 1
src/BtSeederStateChoke.cc

@@ -90,7 +90,8 @@ void BtSeederStateChoke::unchoke
   std::sort(peers.begin(), peers.end());
 
   std::vector<PeerEntry>::iterator r = peers.begin();
-  for(; r != peers.end() && count; ++r, --count) {
+  for(std::vector<PeerEntry>::iterator eoi = peers.end();
+      r != eoi && count; ++r, --count) {
     (*r).getPeer()->chokingRequired(false);
     _logger->info("RU: %s, ulspd=%u", (*r).getPeer()->ipaddr.c_str(),
                   (*r).getUploadSpeed());

+ 1 - 1
src/BtSetup.cc

@@ -190,7 +190,7 @@ void BtSetup::setup(std::vector<Command*>& commands,
         std::vector<std::pair<sockaddr_storage, socklen_t> > ifAddrs;
         getInterfaceAddress(ifAddrs, lpdInterface, AF_INET, AI_NUMERICHOST);
         for(std::vector<std::pair<sockaddr_storage, socklen_t> >::const_iterator
-              i = ifAddrs.begin(); i != ifAddrs.end(); ++i) {
+              i = ifAddrs.begin(), eoi = ifAddrs.end(); i != eoi; ++i) {
           sockaddr_in addr;
           memcpy(&addr, &(*i).first, (*i).second);
           if(receiver->init(inet_ntoa(addr.sin_addr))) {

+ 2 - 2
src/CookieParser.cc

@@ -66,8 +66,8 @@ Cookie CookieParser::parse(const std::string& cookieStr, const std::string& defa
   util::split(nameValue, terms.front(), '=');
 
   std::map<std::string, std::string> values;
-  for(std::vector<std::string>::iterator itr = terms.begin()+1;
-      itr != terms.end(); ++itr) {
+  for(std::vector<std::string>::iterator itr = terms.begin()+1,
+        eoi = terms.end(); itr != eoi; ++itr) {
     std::pair<std::string, std::string> nv;
     util::split(nv, *itr, '=');
     values[nv.first] = nv.second;

+ 8 - 7
src/CookieStorage.cc

@@ -98,8 +98,8 @@ bool CookieStorage::DomainEntry::contains(const Cookie& cookie) const
 
 void CookieStorage::DomainEntry::writeCookie(std::ostream& o) const
 {
-  for(std::deque<Cookie>::const_iterator i = _cookies.begin();
-      i != _cookies.end(); ++i) {
+  for(std::deque<Cookie>::const_iterator i = _cookies.begin(),
+        eoi = _cookies.end(); i != eoi; ++i) {
     o << (*i).toNsCookieFormat() << "\n";
   }
 }
@@ -256,7 +256,8 @@ std::vector<Cookie> CookieStorage::criteriaFind(const std::string& requestHost,
     std::string domain = A2STR::DOT_C;
     domain += domainComponents[0];
     for(std::vector<std::string>::const_iterator di =
-          domainComponents.begin()+1; di != domainComponents.end(); ++di) {
+          domainComponents.begin()+1, eoi = domainComponents.end();
+        di != eoi; ++di) {
       domain = strconcat(A2STR::DOT_C, *di, domain);
       searchCookieByDomainSuffix(domain, _domains.begin(), _domains.end(),
                                  std::back_inserter(res),
@@ -275,8 +276,8 @@ std::vector<Cookie> CookieStorage::criteriaFind(const std::string& requestHost,
 size_t CookieStorage::size() const
 {
   size_t numCookie = 0;
-  for(std::deque<DomainEntry>::const_iterator i = _domains.begin();
-      i != _domains.end(); ++i) {
+  for(std::deque<DomainEntry>::const_iterator i = _domains.begin(),
+        eoi = _domains.end(); i != eoi; ++i) {
     numCookie += (*i).countCookie();
   }
   return numCookie;
@@ -327,8 +328,8 @@ bool CookieStorage::saveNsFormat(const std::string& filename)
                      filename.c_str(), strerror(errno));
       return false;
     }
-    for(std::deque<DomainEntry>::const_iterator i = _domains.begin();
-        i != _domains.end(); ++i) {
+    for(std::deque<DomainEntry>::const_iterator i = _domains.begin(),
+          eoi = _domains.end(); i != eoi; ++i) {
       (*i).writeCookie(o);
     }
     o.flush();

+ 2 - 2
src/CookieStorage.h

@@ -173,8 +173,8 @@ public:
   template<typename OutputIterator>
   OutputIterator dumpCookie(OutputIterator out) const
   {
-    for(std::deque<DomainEntry>::const_iterator i = _domains.begin();
-        i != _domains.end(); ++i) {
+    for(std::deque<DomainEntry>::const_iterator i = _domains.begin(),
+          eoi = _domains.end(); i != eoi; ++i) {
       out = (*i).dumpCookie(out);
     }
     return out;

+ 9 - 6
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;

+ 2 - 2
src/DHTAbstractNodeLookupTask.h

@@ -61,8 +61,8 @@ protected:
   void toEntries
   (Container& entries, const std::vector<SharedHandle<DHTNode> >& nodes) const
   {
-    for(std::vector<SharedHandle<DHTNode> >::const_iterator i = nodes.begin();
-        i != nodes.end(); ++i) {
+    for(std::vector<SharedHandle<DHTNode> >::const_iterator i = nodes.begin(),
+          eoi = nodes.end(); i != eoi; ++i) {
       SharedHandle<DHTNodeLookupEntry> e(new DHTNodeLookupEntry(*i));
       entries.push_back(e);
     }

+ 2 - 2
src/DHTAutoSaveCommand.cc

@@ -101,8 +101,8 @@ void DHTAutoSaveCommand::save()
   std::vector<SharedHandle<DHTNode> > nodes;
   std::vector<SharedHandle<DHTBucket> > buckets;
   _routingTable->getBuckets(buckets);
-  for(std::vector<SharedHandle<DHTBucket> >::const_iterator i = buckets.begin();
-      i != buckets.end(); ++i) {
+  for(std::vector<SharedHandle<DHTBucket> >::const_iterator i = buckets.begin(),
+        eoi = buckets.end(); i != eoi; ++i) {
     const SharedHandle<DHTBucket>& bucket = *i;
     std::vector<SharedHandle<DHTNode> > goodNodes;
     bucket->getGoodNodes(goodNodes);

+ 6 - 4
src/DHTBucket.cc

@@ -107,7 +107,8 @@ bool DHTBucket::isInRange(const unsigned char* nodeID,
 bool DHTBucket::addNode(const SharedHandle<DHTNode>& node)
 {
   notifyUpdate();
-  std::deque<SharedHandle<DHTNode> >::iterator itr = std::find(_nodes.begin(), _nodes.end(), node);
+  std::deque<SharedHandle<DHTNode> >::iterator itr =
+    std::find(_nodes.begin(), _nodes.end(), node);
   if(itr == _nodes.end()) {
     if(_nodes.size() < K) {
       _nodes.push_back(node);
@@ -140,7 +141,8 @@ void DHTBucket::cacheNode(const SharedHandle<DHTNode>& node)
 void DHTBucket::dropNode(const SharedHandle<DHTNode>& node)
 {
   if(_cachedNodes.size()) {
-    std::deque<SharedHandle<DHTNode> >::iterator itr = find(_nodes.begin(), _nodes.end(), node);
+    std::deque<SharedHandle<DHTNode> >::iterator itr =
+      find(_nodes.begin(), _nodes.end(), node);
     if(itr != _nodes.end()) {
       _nodes.erase(itr);
       _nodes.push_back(_cachedNodes.front());
@@ -191,8 +193,8 @@ SharedHandle<DHTBucket> DHTBucket::split()
                                                 rMax, rMin, _localNode));
 
   std::deque<SharedHandle<DHTNode> > lNodes;
-  for(std::deque<SharedHandle<DHTNode> >::iterator i = _nodes.begin();
-      i != _nodes.end(); ++i) {
+  for(std::deque<SharedHandle<DHTNode> >::iterator i = _nodes.begin(),
+        eoi = _nodes.end(); i != eoi; ++i) {
     if(rBucket->isInRange(*i)) {
       assert(rBucket->addNode(*i));
     } else {

+ 2 - 2
src/DHTBucketRefreshTask.cc

@@ -53,8 +53,8 @@ void DHTBucketRefreshTask::startup()
 {
   std::vector<SharedHandle<DHTBucket> > buckets;
   _routingTable->getBuckets(buckets);
-  for(std::vector<SharedHandle<DHTBucket> >::iterator i = buckets.begin();
-      i != buckets.end(); ++i) {
+  for(std::vector<SharedHandle<DHTBucket> >::iterator i = buckets.begin(),
+        eoi = buckets.end(); i != eoi; ++i) {
     if(_forceRefresh || (*i)->needsRefresh()) {
       (*i)->notifyUpdate();
       unsigned char targetID[DHT_ID_LENGTH];

+ 2 - 2
src/DHTConnectionImpl.cc

@@ -57,8 +57,8 @@ bool DHTConnectionImpl::bind(uint16_t& port, IntSequence& ports)
   std::random_shuffle(randPorts.begin(), randPorts.end(),
                       *SimpleRandomizer::getInstance().get());
   
-  for(std::vector<int32_t>::const_iterator portItr = randPorts.begin();
-      portItr != randPorts.end(); ++portItr) {
+  for(std::vector<int32_t>::const_iterator portItr = randPorts.begin(),
+        eoi = randPorts.end(); portItr != eoi; ++portItr) {
     if(!(0 < (*portItr) && (*portItr) <= 65535)) {
       continue;
     }

+ 4 - 4
src/DHTFindNodeReplyMessage.cc

@@ -61,8 +61,8 @@ DHTFindNodeReplyMessage::~DHTFindNodeReplyMessage() {}
 
 void DHTFindNodeReplyMessage::doReceivedAction()
 {
-  for(std::vector<SharedHandle<DHTNode> >::iterator i = _closestKNodes.begin();
-      i != _closestKNodes.end(); ++i) {
+  for(std::vector<SharedHandle<DHTNode> >::iterator i = _closestKNodes.begin(),
+        eoi = _closestKNodes.end(); i != eoi; ++i) {
     if(memcmp((*i)->getID(), _localNode->getID(), DHT_ID_LENGTH) != 0) {
       _routingTable->addNode(*i);
     }
@@ -77,8 +77,8 @@ BDE DHTFindNodeReplyMessage::getResponse()
   unsigned char buffer[DHTBucket::K*26];
   // TODO if _closestKNodes.size() > DHTBucket::K ??
   for(std::vector<SharedHandle<DHTNode> >::const_iterator i =
-        _closestKNodes.begin();
-      i != _closestKNodes.end() && offset < DHTBucket::K*26; ++i) {
+        _closestKNodes.begin(), eoi = _closestKNodes.end();
+      i != eoi && offset < DHTBucket::K*26; ++i) {
     SharedHandle<DHTNode> node = *i;
     memcpy(buffer+offset, node->getID(), DHT_ID_LENGTH);
     if(bittorrent::createcompact(buffer+20+offset, node->getIPAddress(),

+ 5 - 4
src/DHTGetPeersReplyMessage.cc

@@ -82,8 +82,8 @@ BDE DHTGetPeersReplyMessage::getResponse()
     size_t offset = 0;
     unsigned char buffer[DHTBucket::K*26];
     for(std::vector<SharedHandle<DHTNode> >::const_iterator i =
-          _closestKNodes.begin();
-        i != _closestKNodes.end() && offset < DHTBucket::K*26; ++i) {
+          _closestKNodes.begin(), eoi = _closestKNodes.end();
+        i != eoi && offset < DHTBucket::K*26; ++i) {
       SharedHandle<DHTNode> node = *i;
       memcpy(buffer+offset, node->getID(), DHT_ID_LENGTH);
       if(bittorrent::createcompact
@@ -114,8 +114,9 @@ BDE DHTGetPeersReplyMessage::getResponse()
     // number of peer info that a message can carry.
     static const size_t MAX_VALUES_SIZE = 100;
     BDE valuesList = BDE::list();
-    for(std::vector<SharedHandle<Peer> >::const_iterator i = _values.begin();
-        i != _values.end() && valuesList.size() < MAX_VALUES_SIZE; ++i) {
+    for(std::vector<SharedHandle<Peer> >::const_iterator i = _values.begin(),
+          eoi = _values.end(); i != eoi && valuesList.size() < MAX_VALUES_SIZE;
+        ++i) {
       const SharedHandle<Peer>& peer = *i;
       unsigned char buffer[6];
       if(bittorrent::createcompact(buffer, peer->ipaddr, peer->port)) {

+ 2 - 2
src/DHTMessageFactoryImpl.cc

@@ -416,8 +416,8 @@ DHTMessageFactoryImpl::createGetPeersReplyMessageWithValues
   const BDE& valuesList = getList(rDict,
                                   DHTGetPeersReplyMessage::VALUES);
   std::vector<SharedHandle<Peer> > peers;
-  for(BDE::List::const_iterator i = valuesList.listBegin();
-      i != valuesList.listEnd(); ++i) {
+  for(BDE::List::const_iterator i = valuesList.listBegin(),
+        eoi = valuesList.listEnd(); i != eoi; ++i) {
     const BDE& data = *i;
     if(data.isString() && data.s().size() == 6) {
       std::pair<std::string, uint16_t> addr =

+ 9 - 6
src/DHTMessageTracker.cc

@@ -82,7 +82,7 @@ DHTMessageTracker::messageArrived(const BDE& dict,
                    util::toHex(tid.s()).c_str(), ipaddr.c_str(), port);
   }
   for(std::deque<SharedHandle<DHTMessageTrackerEntry> >::iterator i =
-        _entries.begin(); i != _entries.end(); ++i) {
+        _entries.begin(), eoi = _entries.end(); i != eoi; ++i) {
     if((*i)->match(tid.s(), ipaddr, port)) {
       SharedHandle<DHTMessageTrackerEntry> entry = *i;
       _entries.erase(i);
@@ -113,12 +113,13 @@ DHTMessageTracker::messageArrived(const BDE& dict,
 
 void DHTMessageTracker::handleTimeout()
 {
-  for(std::deque<SharedHandle<DHTMessageTrackerEntry> >::iterator i = _entries.begin();
-      i != _entries.end();) {
+  for(std::deque<SharedHandle<DHTMessageTrackerEntry> >::iterator i =
+        _entries.begin(), eoi = _entries.end(); i != eoi;) {
     if((*i)->isTimeout()) {
       try {
         SharedHandle<DHTMessageTrackerEntry> entry = *i;
         i = _entries.erase(i);
+        eoi = _entries.end();
         SharedHandle<DHTNode> node = entry->getTargetNode();
         if(_logger->debug()) {
           _logger->debug("Message timeout: To:%s:%u",
@@ -149,9 +150,11 @@ void DHTMessageTracker::handleTimeout()
 SharedHandle<DHTMessageTrackerEntry>
 DHTMessageTracker::getEntryFor(const SharedHandle<DHTMessage>& message) const
 {
-  for(std::deque<SharedHandle<DHTMessageTrackerEntry> >::const_iterator i = _entries.begin();
-      i != _entries.end(); ++i) {
-    if((*i)->match(message->getTransactionID(), message->getRemoteNode()->getIPAddress(), message->getRemoteNode()->getPort())) {
+  for(std::deque<SharedHandle<DHTMessageTrackerEntry> >::const_iterator i =
+        _entries.begin(), eoi = _entries.end(); i != eoi; ++i) {
+    if((*i)->match(message->getTransactionID(),
+                   message->getRemoteNode()->getIPAddress(),
+                   message->getRemoteNode()->getPort())) {
       return *i;
     }
   }

+ 2 - 2
src/DHTPeerAnnounceEntry.cc

@@ -95,8 +95,8 @@ bool DHTPeerAnnounceEntry::empty() const
 void DHTPeerAnnounceEntry::getPeers
 (std::vector<SharedHandle<Peer> >& peers) const
 {
-  for(std::vector<PeerAddrEntry>::const_iterator i = _peerAddrEntries.begin();
-      i != _peerAddrEntries.end(); ++i) {
+  for(std::vector<PeerAddrEntry>::const_iterator i = _peerAddrEntries.begin(),
+        eoi = _peerAddrEntries.end(); i != eoi; ++i) {
     SharedHandle<Peer> peer(new Peer((*i).getIPAddress(), (*i).getPort()));
     peers.push_back(peer);
   }

+ 4 - 2
src/DHTPeerAnnounceStorage.cc

@@ -145,10 +145,12 @@ void DHTPeerAnnounceStorage::announcePeer()
   if(_logger->debug()) {
     _logger->debug("Now announcing peer.");
   }
-  for(std::deque<SharedHandle<DHTPeerAnnounceEntry> >::iterator i = _entries.begin(); i != _entries.end(); ++i) {
+  for(std::deque<SharedHandle<DHTPeerAnnounceEntry> >::iterator i =
+        _entries.begin(), eoi = _entries.end(); i != eoi; ++i) {
     if((*i)->getLastUpdated().elapsed(DHT_PEER_ANNOUNCE_INTERVAL)) {
       (*i)->notifyUpdate();
-      SharedHandle<DHTTask> task = _taskFactory->createPeerAnnounceTask((*i)->getInfoHash());
+      SharedHandle<DHTTask> task =
+        _taskFactory->createPeerAnnounceTask((*i)->getInfoHash());
       _taskQueue->addPeriodicTask2(task);
       if(_logger->debug()) {
         _logger->debug("Added 1 peer announce: infoHash=%s",

+ 3 - 2
src/DHTPeerLookupTask.cc

@@ -89,8 +89,9 @@ void DHTPeerLookupTask::onFinish()
 {
   // send announce_peer message to K closest nodes
   size_t num = DHTBucket::K;
-  for(std::deque<SharedHandle<DHTNodeLookupEntry> >::const_iterator i = _entries.begin();
-      i != _entries.end() && num > 0; ++i, --num) {
+  for(std::deque<SharedHandle<DHTNodeLookupEntry> >::const_iterator i =
+        _entries.begin(), eoi = _entries.end(); i != eoi && num > 0; ++i,
+        --num) {
     if((*i)->_used) {
       const SharedHandle<DHTNode>& node = (*i)->_node;
       SharedHandle<DHTMessage> m = 

+ 2 - 2
src/DHTRoutingTableSerializer.cc

@@ -101,8 +101,8 @@ void DHTRoutingTableSerializer::serialize(std::ostream& o)
   o.write(zero, 4);
 
   // nodes
-  for(std::vector<SharedHandle<DHTNode> >::const_iterator i = _nodes.begin();
-      i != _nodes.end(); ++i) {
+  for(std::vector<SharedHandle<DHTNode> >::const_iterator i = _nodes.begin(),
+        eoi = _nodes.end(); i != eoi; ++i) {
     const SharedHandle<DHTNode>& node = *i;
     // Currently, only IPv4 address and IPv4-mapped address are saved.
     // 6bytes: write IP address + port in Compact IP-address/port info form.

+ 1 - 1
src/DHTSetup.cc

@@ -182,7 +182,7 @@ void DHTSetup::setup(std::vector<Command*>& commands,
     const std::vector<SharedHandle<DHTNode> >& desnodes =
       deserializer.getNodes();
     for(std::vector<SharedHandle<DHTNode> >::const_iterator i =
-          desnodes.begin(); i != desnodes.end(); ++i) {
+          desnodes.begin(), eoi = desnodes.end(); i != eoi; ++i) {
       routingTable->addNode(*i);
     }
     if(!desnodes.empty() && deserializer.getSerializedTime().elapsed(DHT_BUCKET_REFRESH_INTERVAL)) {

+ 8 - 8
src/DNSCache.h

@@ -71,8 +71,8 @@ private:
 
     std::vector<AddrEntry>::iterator find(const std::string& addr)
     {
-      for(std::vector<AddrEntry>::iterator i = _addrEntries.begin();
-          i != _addrEntries.end(); ++i) {
+      for(std::vector<AddrEntry>::iterator i = _addrEntries.begin(),
+            eoi = _addrEntries.end(); i != eoi; ++i) {
         if((*i)._addr == addr) {
           return i;
         }
@@ -82,8 +82,8 @@ private:
 
     std::vector<AddrEntry>::const_iterator find(const std::string& addr) const
     {
-      for(std::vector<AddrEntry>::const_iterator i = _addrEntries.begin();
-          i != _addrEntries.end(); ++i) {
+      for(std::vector<AddrEntry>::const_iterator i = _addrEntries.begin(),
+            eoi = _addrEntries.end(); i != eoi; ++i) {
         if((*i)._addr == addr) {
           return i;
         }
@@ -98,8 +98,8 @@ private:
 
     const std::string& getGoodAddr() const
     {
-      for(std::vector<AddrEntry>::const_iterator i = _addrEntries.begin();
-          i != _addrEntries.end(); ++i) {
+      for(std::vector<AddrEntry>::const_iterator i = _addrEntries.begin(),
+            eoi = _addrEntries.end(); i != eoi; ++i) {
         if((*i)._good) {
           return (*i)._addr;
         }
@@ -110,8 +110,8 @@ private:
     template<typename OutputIterator>
     void getAllGoodAddrs(OutputIterator out) const
     {
-      for(std::vector<AddrEntry>::const_iterator i = _addrEntries.begin();
-          i != _addrEntries.end(); ++i) {
+      for(std::vector<AddrEntry>::const_iterator i = _addrEntries.begin(),
+            eoi = _addrEntries.end(); i != eoi; ++i) {
         if((*i)._good) {
           *out++ = (*i)._addr;
         }

+ 12 - 10
src/DefaultBtInteractive.cc

@@ -206,8 +206,8 @@ void DefaultBtInteractive::addAllowedFastMessageToQueue() {
                                _downloadContext->getNumPieces(),
                                bittorrent::getInfoHash(_downloadContext),
                                allowedFastSetSize);
-    for(std::vector<size_t>::const_iterator itr = fastSet.begin();
-        itr != fastSet.end(); ++itr) {
+    for(std::vector<size_t>::const_iterator itr = fastSet.begin(),
+          eoi = fastSet.end(); itr != eoi; ++itr) {
       dispatcher->addMessageToQueue
         (messageFactory->createAllowedFastMessage(*itr));
     }
@@ -237,8 +237,8 @@ void DefaultBtInteractive::checkHave() {
       dispatcher->addMessageToQueue(messageFactory->createBitfieldMessage());
     }
   } else {
-    for(std::vector<size_t>::iterator itr = indexes.begin();
-        itr != indexes.end(); ++itr) {
+    for(std::vector<size_t>::const_iterator itr = indexes.begin(),
+          eoi = indexes.end(); itr != eoi; ++itr) {
       dispatcher->addMessageToQueue(messageFactory->createHaveMessage(*itr));
     }
   }
@@ -380,8 +380,8 @@ void DefaultBtInteractive::cancelAllPiece() {
   if(_metadataGetMode && _downloadContext->getTotalLength() > 0) {
     std::vector<size_t> metadataRequests =
       _utMetadataRequestTracker->getAllTrackedIndex();
-    for(std::vector<size_t>::const_iterator i = metadataRequests.begin();
-        i != metadataRequests.end(); ++i) {
+    for(std::vector<size_t>::const_iterator i = metadataRequests.begin(),
+          eoi = metadataRequests.end(); i != eoi; ++i) {
       if(logger->debug()) {
         logger->debug("Cancel metadata: piece=%lu",
                       static_cast<unsigned long>(*i));
@@ -441,7 +441,8 @@ void DefaultBtInteractive::addPeerExchangeMessage()
     const std::deque<SharedHandle<Peer> >& peers = _peerStorage->getPeers();
     {
       for(std::deque<SharedHandle<Peer> >::const_iterator i =
-            peers.begin(); i != peers.end() && !m->freshPeersAreFull(); ++i) {
+            peers.begin(), eoi = peers.end();
+          i != eoi && !m->freshPeersAreFull(); ++i) {
         if(peer->ipaddr != (*i)->ipaddr) {
           m->addFreshPeer(*i);
         }
@@ -449,7 +450,8 @@ void DefaultBtInteractive::addPeerExchangeMessage()
     }
     {
       for(std::deque<SharedHandle<Peer> >::const_reverse_iterator i =
-            peers.rbegin(); i != peers.rend() && !m->droppedPeersAreFull();
+            peers.rbegin(), eoi = peers.rend();
+          i != eoi && !m->droppedPeersAreFull();
           ++i) {
         if(peer->ipaddr != (*i)->ipaddr) {
           m->addDroppedPeer(*i);
@@ -485,8 +487,8 @@ void DefaultBtInteractive::doInteractionProcessing() {
         // to other connection to request piece.
         std::vector<size_t> indexes =
           _utMetadataRequestTracker->removeTimeoutEntry();
-        for(std::vector<size_t>::const_iterator i = indexes.begin();
-            i != indexes.end(); ++i) {
+        for(std::vector<size_t>::const_iterator i = indexes.begin(),
+              eoi = indexes.end(); i != eoi; ++i) {
           _pieceStorage->cancelPiece(_pieceStorage->getPiece(*i));
         }
       }

+ 1 - 1
src/DefaultBtMessageDispatcher.cc

@@ -79,7 +79,7 @@ void DefaultBtMessageDispatcher::addMessageToQueue
 (const std::vector<SharedHandle<BtMessage> >& btMessages)
 {
   for(std::vector<SharedHandle<BtMessage> >::const_iterator itr =
-        btMessages.begin(); itr != btMessages.end(); ++itr) {
+        btMessages.begin(), eoi = btMessages.end(); itr != eoi; ++itr) {
     addMessageToQueue(*itr);
   }
 }

+ 2 - 2
src/DefaultBtProgressInfoFile.cc

@@ -182,8 +182,8 @@ void DefaultBtProgressInfoFile::save()
     std::vector<SharedHandle<Piece> > inFlightPieces;
     _pieceStorage->getInFlightPieces(inFlightPieces);
     for(std::vector<SharedHandle<Piece> >::const_iterator itr =
-          inFlightPieces.begin();
-        itr != inFlightPieces.end(); ++itr) {
+          inFlightPieces.begin(), eoi = inFlightPieces.end();
+        itr != eoi; ++itr) {
       uint32_t indexNL = htonl((*itr)->getIndex());
       o.write(reinterpret_cast<const char*>(&indexNL), sizeof(indexNL));
       uint32_t lengthNL = htonl((*itr)->getLength());

+ 11 - 10
src/DefaultBtRequestFactory.cc

@@ -142,8 +142,8 @@ void DefaultBtRequestFactory::doChokedAction()
 }
 
 void DefaultBtRequestFactory::removeAllTargetPiece() {
-  for(std::deque<SharedHandle<Piece> >::iterator itr = pieces.begin();
-      itr != pieces.end(); ++itr) {
+  for(std::deque<SharedHandle<Piece> >::iterator itr = pieces.begin(),
+        eoi = pieces.end(); itr != eoi; ++itr) {
     dispatcher->doAbortOutstandingRequestAction(*itr);
     _pieceStorage->cancelPiece(*itr);
   }
@@ -159,13 +159,13 @@ void DefaultBtRequestFactory::createRequestMessages
   size_t getnum = max-requests.size();
   std::vector<size_t> blockIndexes;
   blockIndexes.reserve(getnum);
-  for(std::deque<SharedHandle<Piece> >::iterator itr = pieces.begin();
-      itr != pieces.end() && getnum; ++itr) {
+  for(std::deque<SharedHandle<Piece> >::iterator itr = pieces.begin(),
+        eoi = pieces.end(); itr != eoi && getnum; ++itr) {
     SharedHandle<Piece>& piece = *itr;
     if(piece->getMissingUnusedBlockIndex(blockIndexes, getnum)) {
       getnum -= blockIndexes.size();
-      for(std::vector<size_t>::const_iterator i = blockIndexes.begin();
-          i != blockIndexes.end(); ++i) {
+      for(std::vector<size_t>::const_iterator i = blockIndexes.begin(),
+            eoi2 = blockIndexes.end(); i != eoi2; ++i) {
         if(_logger->debug()) {
           _logger->debug("Creating RequestMessage index=%u, begin=%u,"
                          " blockIndex=%u",
@@ -184,8 +184,8 @@ void DefaultBtRequestFactory::createRequestMessages
 void DefaultBtRequestFactory::createRequestMessagesOnEndGame
 (std::vector<SharedHandle<BtMessage> >& requests, size_t max)
 {
-  for(std::deque<SharedHandle<Piece> >::iterator itr = pieces.begin();
-      itr != pieces.end() && requests.size() < max; ++itr) {
+  for(std::deque<SharedHandle<Piece> >::iterator itr = pieces.begin(),
+        eoi = pieces.end(); itr != eoi && requests.size() < max; ++itr) {
     SharedHandle<Piece>& piece = *itr;
     const size_t mislen = piece->getBitfieldLength();
     array_ptr<unsigned char> misbitfield(new unsigned char[mislen]);
@@ -205,8 +205,9 @@ void DefaultBtRequestFactory::createRequestMessagesOnEndGame
     }
     std::random_shuffle(missingBlockIndexes.begin(), missingBlockIndexes.end(),
                         *(SimpleRandomizer::getInstance().get()));
-    for(std::vector<size_t>::const_iterator bitr = missingBlockIndexes.begin();
-        bitr != missingBlockIndexes.end() && requests.size() < max; bitr++) {
+    for(std::vector<size_t>::const_iterator bitr = missingBlockIndexes.begin(),
+          eoi2 = missingBlockIndexes.end();
+        bitr != eoi2 && requests.size() < max; ++bitr) {
       const size_t& blockIndex = *bitr;
       if(!dispatcher->isOutstandingRequest(piece->getIndex(),
                                            blockIndex)) {

+ 5 - 5
src/DefaultPeerStorage.cc

@@ -112,8 +112,8 @@ bool DefaultPeerStorage::addPeer(const SharedHandle<Peer>& peer) {
 
 void DefaultPeerStorage::addPeer(const std::vector<SharedHandle<Peer> >& peers)
 {
-  for(std::vector<SharedHandle<Peer> >::const_iterator itr = peers.begin();
-      itr != peers.end(); ++itr) {
+  for(std::vector<SharedHandle<Peer> >::const_iterator itr = peers.begin(),
+        eoi = peers.end(); itr != eoi; ++itr) {
     const SharedHandle<Peer>& peer = *itr;
     if(addPeer(peer)) {
       if(logger->debug()) {
@@ -224,7 +224,7 @@ TransferStat DefaultPeerStorage::calculateStat()
     struct timeval now;
     gettimeofday(&now, 0);
     for(std::vector<SharedHandle<Peer> >::const_iterator i =
-          activePeers.begin(); i != activePeers.end(); ++i) {
+          activePeers.begin(), eoi = activePeers.end(); i != eoi; ++i) {
       TransferStat s;
       s.downloadSpeed = (*i)->calculateDownloadSpeed(now);
       s.uploadSpeed = (*i)->calculateUploadSpeed(now);
@@ -267,8 +267,8 @@ TransferStat DefaultPeerStorage::getTransferStatFor
 
 void DefaultPeerStorage::deleteUnusedPeer(size_t delSize) {
   std::deque<SharedHandle<Peer> > temp;
-  for(std::deque<SharedHandle<Peer> >::reverse_iterator itr = peers.rbegin();
-      itr != peers.rend(); ++itr) {
+  for(std::deque<SharedHandle<Peer> >::const_reverse_iterator itr =
+        peers.rbegin(), eoi = peers.rend(); itr != eoi; ++itr) {
     const SharedHandle<Peer>& p = *itr;
     if(p->unused() && delSize > 0) {
       onErasingPeer(p);

+ 7 - 6
src/DefaultPieceStorage.cc

@@ -206,8 +206,8 @@ void DefaultPieceStorage::createFastIndexBitfield
 (BitfieldMan& bitfield, const SharedHandle<Peer>& peer)
 {
   for(std::vector<size_t>::const_iterator itr =
-        peer->getPeerAllowedIndexSet().begin();
-      itr != peer->getPeerAllowedIndexSet().end(); ++itr) {
+        peer->getPeerAllowedIndexSet().begin(),
+        eoi = peer->getPeerAllowedIndexSet().end(); itr != eoi; ++itr) {
     if(!bitfieldMan->isBitSet(*itr) && peer->hasPiece(*itr)) {
       bitfield.setBit(*itr);
     }
@@ -429,7 +429,8 @@ void DefaultPieceStorage::setupFileFilter()
     downloadContext->getFileEntries();
   bool allSelected = true;
   for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
-        fileEntries.begin(); i != fileEntries.end(); ++i) {
+        fileEntries.begin(), eoi = fileEntries.end();
+      i != eoi; ++i) {
     if(!(*i)->isRequested()) {
       allSelected = false;
       break;
@@ -439,7 +440,7 @@ void DefaultPieceStorage::setupFileFilter()
     return;
   }
   for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
-        fileEntries.begin(); i != fileEntries.end(); ++i) {
+        fileEntries.begin(), eoi = fileEntries.end(); i != eoi; ++i) {
     if((*i)->isRequested()) {
       bitfieldMan->addFilter((*i)->getOffset(), (*i)->getLength());
     }
@@ -544,8 +545,8 @@ DefaultPieceStorage::getAdvertisedPieceIndexes(std::vector<size_t>& indexes,
                                                int32_t myCuid,
                                                const Time& lastCheckTime)
 {
-  for(std::deque<HaveEntry>::const_iterator itr = haves.begin();
-      itr != haves.end(); ++itr) {
+  for(std::deque<HaveEntry>::const_iterator itr = haves.begin(),
+        eoi = haves.end(); itr != eoi; ++itr) {
     const HaveEntry& have = *itr;
     if(have.getCuid() == myCuid) {
       continue;

+ 3 - 2
src/DownloadContext.cc

@@ -129,7 +129,8 @@ void DownloadContext::setFileFilter(IntSequence seq)
     
   int32_t index = 1;
   for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
-        _fileEntries.begin(); i != _fileEntries.end(); ++i, ++index) {
+        _fileEntries.begin(), eoi = _fileEntries.end();
+      i != eoi; ++i, ++index) {
     (*i)->setRequested
       (selectAll ||
        std::binary_search(fileIndexes.begin(), fileIndexes.end(), index));
@@ -171,7 +172,7 @@ bool DownloadContext::hasAttribute(const std::string& key) const
 void DownloadContext::releaseRuntimeResource()
 {
   for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
-        _fileEntries.begin(); i != _fileEntries.end(); ++i) {
+        _fileEntries.begin(), eoi = _fileEntries.end(); i != eoi; ++i) {
     (*i)->releaseRuntimeResource();
   }
 }

+ 7 - 7
src/DownloadEngine.cc

@@ -282,7 +282,7 @@ void DownloadEngine::poolSocket(const std::string& ipaddr,
     }
     _lastSocketPoolScan.reset();
     for(std::multimap<std::string, SocketPoolEntry>::iterator i =
-          _socketPool.begin(); i != _socketPool.end(); ++i) {
+          _socketPool.begin(), eoi = _socketPool.end(); i != eoi; ++i) {
       if(!(*i).second.isTimeout()) {
         newPool.insert(*i);
       }
@@ -357,8 +357,8 @@ DownloadEngine::findSocketPoolEntry(const std::string& ipaddr, uint16_t port)
   std::pair<std::multimap<std::string, SocketPoolEntry>::iterator,
     std::multimap<std::string, SocketPoolEntry>::iterator> range =
     _socketPool.equal_range(addr);
-  for(std::multimap<std::string, SocketPoolEntry>::iterator i = range.first;
-      i != range.second; ++i) {
+  for(std::multimap<std::string, SocketPoolEntry>::iterator i =
+        range.first, eoi = range.second; i != eoi; ++i) {
     const SocketPoolEntry& e = (*i).second;
     if(!e.isTimeout()) {
       logger->info("Found socket for %s", addr.c_str());
@@ -401,8 +401,8 @@ DownloadEngine::popPooledSocket
 (const std::vector<std::string>& ipaddrs, uint16_t port)
 {
   SharedHandle<SocketCore> s;
-  for(std::vector<std::string>::const_iterator i = ipaddrs.begin();
-      i != ipaddrs.end(); ++i) {
+  for(std::vector<std::string>::const_iterator i = ipaddrs.begin(),
+        eoi = ipaddrs.end(); i != eoi; ++i) {
     s = popPooledSocket(*i, port);
     if(!s.isNull()) {
       break;
@@ -417,8 +417,8 @@ DownloadEngine::popPooledSocket
  const std::vector<std::string>& ipaddrs, uint16_t port)
 {
   SharedHandle<SocketCore> s;
-  for(std::vector<std::string>::const_iterator i = ipaddrs.begin();
-      i != ipaddrs.end(); ++i) {
+  for(std::vector<std::string>::const_iterator i = ipaddrs.begin(),
+        eoi = ipaddrs.end(); i != eoi; ++i) {
     s = popPooledSocket(options, *i, port);
     if(!s.isNull()) {
       break;

+ 2 - 1
src/EpollEventPoll.cc

@@ -347,7 +347,8 @@ void EpollEventPoll::poll(const struct timeval& tv)
   // their API. So we call ares_process_fd for all ares_channel and
   // re-register their sockets.
   for(std::deque<SharedHandle<AsyncNameResolverEntry> >::iterator i =
-        _nameResolverEntries.begin(); i != _nameResolverEntries.end(); ++i) {
+        _nameResolverEntries.begin(), eoi = _nameResolverEntries.end();
+      i != eoi; ++i) {
     (*i)->processTimeout();
     (*i)->removeSocketEvents(this);
     (*i)->addSocketEvents(this);

+ 2 - 2
src/ExtensionMessageRegistry.h

@@ -72,8 +72,8 @@ public:
 
   const std::string& getExtensionName(uint8_t id) const
   {
-    for(Extensions::const_iterator itr = _extensions.begin();
-        itr != _extensions.end(); ++itr) {
+    for(Extensions::const_iterator itr = _extensions.begin(),
+          eoi = _extensions.end(); itr != eoi; ++itr) {
       const Extensions::value_type& p = *itr;
       if(p.second == id) {
         return p.first;

+ 2 - 2
src/FeatureConfig.cc

@@ -151,8 +151,8 @@ bool FeatureConfig::isSupported(const std::string& feature) const
 std::string FeatureConfig::featureSummary() const
 {
   std::string s;
-  for(FeatureMap::const_iterator i = _features.begin();
-      i != _features.end(); ++i) {
+  for(FeatureMap::const_iterator i = _features.begin(), eoi = _features.end();
+      i != eoi; ++i) {
     if((*i).second) {
       s += (*i).first;
       s += ", ";

+ 4 - 4
src/FeedbackURISelector.cc

@@ -73,8 +73,8 @@ std::string FeedbackURISelector::select(FileEntry* fileEntry)
   size_t max = std::min(uris.size(), static_cast<size_t>(NUM_URI));
   std::deque<std::string>::iterator urisLast = uris.begin()+max;
   std::deque<std::pair<SharedHandle<ServerStat>, std::string> > cands;
-  for(std::deque<std::string>::iterator i = uris.begin();
-      i != urisLast; ++i) {
+  for(std::deque<std::string>::iterator i = uris.begin(), eoi = urisLast;
+      i != eoi; ++i) {
     Request r;
     r.setUrl(*i);
     SharedHandle<ServerStat> ss = _serverStatMan->find(r.getHost(),
@@ -84,8 +84,8 @@ std::string FeedbackURISelector::select(FileEntry* fileEntry)
     }
   }
   if(cands.empty()) {
-    for(std::deque<std::string>::iterator i = uris.begin();
-        i != uris.end(); ++i) {
+    for(std::deque<std::string>::iterator i = uris.begin(), eoi = uris.end();
+        i != eoi; ++i) {
       Request r;
       r.setUrl(*i);
       SharedHandle<ServerStat> ss = _serverStatMan->find(r.getHost(),

+ 2 - 2
src/File.cc

@@ -115,8 +115,8 @@ bool File::mkdirs() {
   if(util::startsWith(name, A2STR::SLASH_C)) {
     accDir = A2STR::SLASH_C;
   }
-  for(std::vector<std::string>::const_iterator itr = dirs.begin();
-      itr != dirs.end(); ++itr, accDir += A2STR::SLASH_C) {
+  for(std::vector<std::string>::const_iterator itr = dirs.begin(),
+        eoi = dirs.end(); itr != eoi; ++itr, accDir += A2STR::SLASH_C) {
     accDir += *itr;
     if(File(accDir).isDir()) {
       continue;

+ 4 - 2
src/FileEntry.cc

@@ -223,7 +223,8 @@ void FileEntry::poolRequest(const SharedHandle<Request>& request)
 bool FileEntry::removeRequest(const SharedHandle<Request>& request)
 {
   for(std::deque<SharedHandle<Request> >::iterator i =
-        _inFlightRequests.begin(); i != _inFlightRequests.end(); ++i) {
+        _inFlightRequests.begin(), eoi = _inFlightRequests.end();
+      i != eoi; ++i) {
     if((*i).get() == request.get()) {
       _inFlightRequests.erase(i);
       return true;
@@ -236,7 +237,8 @@ void FileEntry::removeURIWhoseHostnameIs(const std::string& hostname)
 {
   std::deque<std::string> newURIs;
   Request req;
-  for(std::deque<std::string>::const_iterator itr = _uris.begin(); itr != _uris.end(); ++itr) {
+  for(std::deque<std::string>::const_iterator itr = _uris.begin(),
+        eoi = _uris.end(); itr != eoi; ++itr) {
     if(((*itr).find(hostname) == std::string::npos) ||
        (req.setUrl(*itr) && (req.getHost() != hostname))) {
       newURIs.push_back(*itr);

+ 2 - 2
src/HandleRegistry.h

@@ -72,8 +72,8 @@ public:
   std::vector<SharedHandle<T> > getAll()
   {
     std::vector<SharedHandle<T> > l;
-    for(typename HandleMap::const_iterator itr = handleMap.begin();
-        itr != handleMap.end(); ++itr) {
+    for(typename HandleMap::const_iterator itr = handleMap.begin(),
+          eoi = handleMap.end(); itr != eoi; ++itr) {
       const typename HandleMap::value_type& p = *itr;
       l.push_back(p.second);
     }

+ 8 - 8
src/HandshakeExtensionMessage.cc

@@ -67,8 +67,8 @@ std::string HandshakeExtensionMessage::getPayload()
     dict["p"] = _tcpPort;
   }
   BDE extDict = BDE::dict();
-  for(std::map<std::string, uint8_t>::const_iterator itr = _extensions.begin();
-      itr != _extensions.end(); ++itr) {
+  for(std::map<std::string, uint8_t>::const_iterator itr = _extensions.begin(),
+        eoi = _extensions.end(); itr != eoi; ++itr) {
     const std::map<std::string, uint8_t>::value_type& vt = *itr;
     extDict[vt.first] = vt.second;
   }
@@ -91,8 +91,8 @@ std::string HandshakeExtensionMessage::toString() const
   if(_metadataSize) {
     strappend(s, ", metadataSize=", util::uitos(_metadataSize));
   }
-  for(std::map<std::string, uint8_t>::const_iterator itr = _extensions.begin();
-      itr != _extensions.end(); ++itr) {
+  for(std::map<std::string, uint8_t>::const_iterator itr = _extensions.begin(),
+        eoi = _extensions.end(); itr != eoi; ++itr) {
     const std::map<std::string, uint8_t>::value_type& vt = *itr;
     strappend(s, ", ", vt.first, "=", util::uitos(vt.second));
   }
@@ -105,8 +105,8 @@ void HandshakeExtensionMessage::doReceivedAction()
     _peer->port = _tcpPort;
     _peer->setIncomingPeer(false);
   }
-  for(std::map<std::string, uint8_t>::const_iterator itr = _extensions.begin();
-      itr != _extensions.end(); ++itr) {
+  for(std::map<std::string, uint8_t>::const_iterator itr = _extensions.begin(),
+        eoi = _extensions.end(); itr != eoi; ++itr) {
     const std::map<std::string, uint8_t>::value_type& vt = *itr;
     _peer->setExtension(vt.first, vt.second);
   }
@@ -182,8 +182,8 @@ HandshakeExtensionMessage::create(const unsigned char* data, size_t length)
   }
   const BDE& extDict = dict["m"];
   if(extDict.isDict()) {
-    for(BDE::Dict::const_iterator i = extDict.dictBegin();
-        i != extDict.dictEnd(); ++i) {
+    for(BDE::Dict::const_iterator i = extDict.dictBegin(),
+          eoi = extDict.dictEnd(); i != eoi; ++i) {
       if((*i).second.isInteger()) {
         msg->_extensions[(*i).first] = (*i).second.i();
       }

+ 2 - 2
src/HttpConnection.cc

@@ -152,8 +152,8 @@ SharedHandle<HttpResponse> HttpConnection::receiveResponse()
 
 bool HttpConnection::isIssued(const SharedHandle<Segment>& segment) const
 {
-  for(HttpRequestEntries::const_iterator itr = outstandingHttpRequests.begin();
-      itr != outstandingHttpRequests.end(); ++itr) {
+  for(HttpRequestEntries::const_iterator itr = outstandingHttpRequests.begin(),
+        eoi = outstandingHttpRequests.end(); itr != eoi; ++itr) {
     SharedHandle<HttpRequest> httpRequest = (*itr)->getHttpRequest();
     if(httpRequest->getSegment() == segment) {
       return true;

+ 2 - 1
src/HttpHeader.cc

@@ -96,7 +96,8 @@ bool HttpHeader::defined(const std::string& name) const {
 }
 
 const std::string& HttpHeader::getFirst(const std::string& name) const {
-  std::multimap<std::string, std::string>::const_iterator itr = table.find(util::toLower(name));
+  std::multimap<std::string, std::string>::const_iterator itr =
+    table.find(util::toLower(name));
   if(itr == table.end()) {
     return A2STR::NIL;
   } else {

+ 5 - 5
src/HttpRequest.cc

@@ -162,7 +162,7 @@ std::string HttpRequest::createRequest()
   builtinHds.push_back(std::make_pair("User-Agent:", userAgent));
   std::string acceptTypes = "*/*";
   for(std::vector<std::string>::const_iterator i = _acceptTypes.begin(),
-        end = _acceptTypes.end(); i != end; ++i) {
+        eoi = _acceptTypes.end(); i != eoi; ++i) {
     strappend(acceptTypes, ",", (*i));
   }
   builtinHds.push_back(std::make_pair("Accept:", acceptTypes));
@@ -223,15 +223,15 @@ std::string HttpRequest::createRequest()
                                    getProtocol() == Request::PROTO_HTTPS ?
                                    true : false);
     for(std::vector<Cookie>::const_iterator itr = cookies.begin(),
-          end = cookies.end(); itr != end; ++itr) {
+          eoi = cookies.end(); itr != eoi; ++itr) {
       strappend(cookiesValue, (*itr).toString(), ";");
     }
     if(!cookiesValue.empty()) {
       builtinHds.push_back(std::make_pair("Cookie:", cookiesValue));
     }
   }
-  for(std::vector<std::pair<std::string, std::string> >::iterator i =
-        builtinHds.begin(); i != builtinHds.end(); ++i) {
+  for(std::vector<std::pair<std::string, std::string> >::const_iterator i =
+        builtinHds.begin(), eoi = builtinHds.end(); i != eoi; ++i) {
     std::vector<std::string>::const_iterator j = _headers.begin();
     std::vector<std::string>::const_iterator jend = _headers.end();
     for(; j != jend; ++j) {
@@ -245,7 +245,7 @@ std::string HttpRequest::createRequest()
   }
   // append additional headers given by user.
   for(std::vector<std::string>::const_iterator i = _headers.begin(),
-        end = _headers.end(); i != end; ++i) {
+        eoi = _headers.end(); i != eoi; ++i) {
     strappend(requestLine, (*i), A2STR::CRLF);
   }
   requestLine += A2STR::CRLF;

+ 2 - 2
src/HttpRequestCommand.cc

@@ -134,8 +134,8 @@ bool HttpRequestCommand::executeInternal() {
                            _proxyRequest));
       _httpConnection->sendRequest(httpRequest);
     } else {
-      for(std::vector<SharedHandle<Segment> >::iterator itr = _segments.begin();
-          itr != _segments.end(); ++itr) {
+      for(std::vector<SharedHandle<Segment> >::const_iterator itr =
+            _segments.begin(), eoi = _segments.end(); itr != eoi; ++itr) {
         const SharedHandle<Segment>& segment = *itr;
         if(!_httpConnection->isIssued(segment)) {
           SharedHandle<HttpRequest> httpRequest

+ 2 - 2
src/HttpResponse.cc

@@ -114,8 +114,8 @@ std::string HttpResponse::determinFilename() const
 void HttpResponse::retrieveCookie()
 {
   std::vector<std::string> v = httpHeader->get(HttpHeader::SET_COOKIE);
-  for(std::vector<std::string>::const_iterator itr = v.begin(); itr != v.end();
-      ++itr) {
+  for(std::vector<std::string>::const_iterator itr = v.begin(), eoi = v.end();
+      itr != eoi; ++itr) {
     httpRequest->getCookieStorage()->parseAndStore(*itr,
                                                    httpRequest->getHost(),
                                                    httpRequest->getDir());

+ 2 - 2
src/InitiateConnectionCommand.cc

@@ -107,8 +107,8 @@ bool InitiateConnectionCommand::executeInternal() {
     logger->info(MSG_NAME_RESOLUTION_COMPLETE, cuid,
                  hostname.c_str(),
                  strjoin(addrs.begin(), addrs.end(), ", ").c_str());
-    for(std::vector<std::string>::const_iterator i = addrs.begin();
-        i != addrs.end(); ++i) {
+    for(std::vector<std::string>::const_iterator i = addrs.begin(),
+          eoi = addrs.end(); i != eoi; ++i) {
       e->cacheIPAddress(hostname, *i, port);
     }
     ipaddr = e->findCachedIPAddress(hostname, port);

+ 2 - 1
src/MSEHandshake.cc

@@ -465,7 +465,8 @@ bool MSEHandshake::receiveReceiverHashAndPadCLength
   unsigned char* rbufptr = _rbuf;
   SharedHandle<DownloadContext> downloadContext;
   for(std::vector<SharedHandle<DownloadContext> >::const_iterator i =
-        downloadContexts.begin(); i != downloadContexts.end(); ++i) {
+        downloadContexts.begin(), eoi = downloadContexts.end();
+      i != eoi; ++i) {
     unsigned char md[20];
     const BDE& torrentAttrs = (*i)->getAttribute(bittorrent::BITTORRENT);
     createReq23Hash(md, torrentAttrs[bittorrent::INFO_HASH].uc());

+ 8 - 8
src/Metalink2RequestGroup.cc

@@ -128,8 +128,9 @@ namespace {
 void removeMetalinkContentTypes(const SharedHandle<RequestGroup>& group)
 {
   for(std::vector<std::string>::const_iterator i =
-	DownloadHandlerConstants::getMetalinkContentTypes().begin();
-      i != DownloadHandlerConstants::getMetalinkContentTypes().end(); ++i) {
+	DownloadHandlerConstants::getMetalinkContentTypes().begin(),
+        eoi = DownloadHandlerConstants::getMetalinkContentTypes().end();
+      i != eoi; ++i) {
     group->removeAcceptType(*i);
   }
 }
@@ -148,9 +149,6 @@ Metalink2RequestGroup::createRequestGroup
   std::vector<int32_t> selectIndexes =
     util::parseIntRange(option->get(PREF_SELECT_FILE)).flush();
   std::sort(selectIndexes.begin(), selectIndexes.end());
-  std::vector<SharedHandle<MetalinkEntry> > selectedEntries;
-  selectedEntries.reserve(entries.size());
-
   std::vector<std::string> locations;
   if(option->defined(PREF_METALINK_LOCATION)) {
     util::split(option->get(PREF_METALINK_LOCATION),
@@ -162,10 +160,12 @@ Metalink2RequestGroup::createRequestGroup
   if(option->get(PREF_METALINK_PREFERRED_PROTOCOL) != V_NONE) {
     preferredProtocol = option->get(PREF_METALINK_PREFERRED_PROTOCOL);
   }
+  std::vector<SharedHandle<MetalinkEntry> > selectedEntries;
+  selectedEntries.reserve(entries.size());
   {
     int32_t count = 1;
     for(std::vector<SharedHandle<MetalinkEntry> >::const_iterator i =
-          entries.begin(); i != entries.end(); ++i, ++count) {
+          entries.begin(), eoi = entries.end(); i != eoi; ++i, ++count) {
       (*i)->dropUnsupportedResource();
       if((*i)->resources.empty() && (*i)->metaurls.empty()) {
         continue;
@@ -189,7 +189,7 @@ Metalink2RequestGroup::createRequestGroup
   MetalinkHelper::groupEntryByMetaurlName(entryGroups, selectedEntries);
   for(std::vector<std::pair<std::string,
         std::vector<SharedHandle<MetalinkEntry> > > >::const_iterator itr =
-        entryGroups.begin(); itr != entryGroups.end(); ++itr) {
+        entryGroups.begin(), eoi = entryGroups.end(); itr != eoi; ++itr) {
     const std::string& metaurl = (*itr).first;
     const std::vector<SharedHandle<MetalinkEntry> >& mes = (*itr).second;
     _logger->info("Processing metaurl group metaurl=%s", metaurl.c_str());
@@ -279,7 +279,7 @@ Metalink2RequestGroup::createRequestGroup
       std::vector<SharedHandle<FileEntry> > fileEntries;
       off_t offset = 0;
       for(std::vector<SharedHandle<MetalinkEntry> >::const_iterator i =
-            mes.begin(); i != mes.end(); ++i) {
+            mes.begin(), eoi = mes.end(); i != eoi; ++i) {
         _logger->info("Metalink: Queueing %s for download as a member.",
                       (*i)->getPath().c_str());
         _logger->debug("originalName = %s", (*i)->metaurls[0]->name.c_str());

+ 1 - 1
src/MetalinkHelper.cc

@@ -86,7 +86,7 @@ void MetalinkHelper::groupEntryByMetaurlName
  const std::vector<SharedHandle<MetalinkEntry> >& entries)
 {
   for(std::vector<SharedHandle<MetalinkEntry> >::const_iterator eiter =
-        entries.begin(); eiter != entries.end(); ++eiter) {
+        entries.begin(), eoi = entries.end(); eiter != eoi; ++eiter) {
     if((*eiter)->metaurls.empty()) {
       std::pair<std::string, std::vector<SharedHandle<MetalinkEntry> > > p;
       p.second.push_back(*eiter);

+ 35 - 28
src/MultiDiskAdaptor.cc

@@ -167,7 +167,7 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
   }
 
   for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
-        fileEntries.begin(); i != fileEntries.end(); ++i) {
+        fileEntries.begin(), eoi = fileEntries.end(); i != eoi; ++i) {
     diskWriterEntries.push_back
       (createDiskWriterEntry(*i, (*i)->isRequested()));
   }
@@ -176,10 +176,11 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
 
   // TODO Currently, pieceLength == 0 is used for unit testing only.
   if(pieceLength > 0) {
-    std::vector<SharedHandle<DiskWriterEntry> >::iterator done =
+    std::vector<SharedHandle<DiskWriterEntry> >::const_iterator done =
       diskWriterEntries.begin();
-    for(std::vector<SharedHandle<DiskWriterEntry> >::iterator itr =
-          diskWriterEntries.begin(); itr != diskWriterEntries.end();) {
+    for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator itr =
+          diskWriterEntries.begin(), eoi = diskWriterEntries.end();
+        itr != eoi;) {
       const SharedHandle<FileEntry>& fileEntry = (*itr)->getFileEntry();
 
       if(!fileEntry->isRequested()) {
@@ -189,7 +190,7 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
       off_t pieceStartOffset =
         (fileEntry->getOffset()/pieceLength)*pieceLength;
       if(itr != diskWriterEntries.begin()) {
-        for(std::vector<SharedHandle<DiskWriterEntry> >::iterator i =
+        for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
               itr-1; true; --i) {
           const SharedHandle<FileEntry>& fileEntry = (*i)->getFileEntry();
           if(pieceStartOffset <= fileEntry->getOffset() ||
@@ -217,7 +218,7 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
         ++itr;
         // adjacent backward files are not needed to be allocated. They
         // just requre DiskWriter
-        for(; itr != diskWriterEntries.end() &&
+        for(; itr != eoi &&
               (!(*itr)->getFileEntry()->isRequested() ||
                (*itr)->getFileEntry()->getLength() == 0); ++itr) {
           if(logger->debug()) {
@@ -244,8 +245,9 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
     }
   }
   DefaultDiskWriterFactory dwFactory;
-  for(std::vector<SharedHandle<DiskWriterEntry> >::iterator i =
-        diskWriterEntries.begin(); i != diskWriterEntries.end(); ++i) {
+  for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
+        diskWriterEntries.begin(), eoi = diskWriterEntries.end();
+      i != eoi; ++i) {
     if((*i)->needsFileAllocation() ||
        dwreq.find((*i)->getFileEntry()->getPath()) != dwreq.end() ||
        (*i)->fileExists()) {
@@ -267,7 +269,8 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
 void MultiDiskAdaptor::mkdir() const
 {
   for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
-        diskWriterEntries.begin(); i != diskWriterEntries.end(); ++i) {
+        diskWriterEntries.begin(), eoi = diskWriterEntries.end();
+      i != eoi; ++i) {
     (*i)->getFileEntry()->setupDir();
   }
 }
@@ -305,8 +308,8 @@ void MultiDiskAdaptor::openFile()
   mkdir();
   // Call DiskWriterEntry::openFile to make sure that zero-length files are
   // created.
-  for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
-      itr != diskWriterEntries.end(); ++itr) {
+  for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin(),
+        eoi = diskWriterEntries.end(); itr != eoi; ++itr) {
     openIfNot(*itr, &DiskWriterEntry::openFile);
   }
 }
@@ -316,8 +319,8 @@ void MultiDiskAdaptor::initAndOpenFile()
   resetDiskWriterEntries();
   mkdir();
   // Call DiskWriterEntry::initAndOpenFile to make files truncated.
-  for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
-      itr != diskWriterEntries.end(); ++itr) {
+  for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin(),
+        eoi = diskWriterEntries.end(); itr != eoi; ++itr) {
     openIfNot(*itr, &DiskWriterEntry::initAndOpenFile);
   }
 }
@@ -330,8 +333,8 @@ void MultiDiskAdaptor::openExistingFile()
 
 void MultiDiskAdaptor::closeFile()
 {
-  for(DiskWriterEntries::iterator itr = diskWriterEntries.begin();
-      itr != diskWriterEntries.end(); ++itr) {
+  for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin(),
+        eoi = diskWriterEntries.end(); itr != eoi; ++itr) {
     (*itr)->closeFile();
   }
 }
@@ -396,7 +399,8 @@ void MultiDiskAdaptor::writeData(const unsigned char* data, size_t len,
 
   size_t rem = len;
   off_t fileOffset = offset-(*first)->getFileEntry()->getOffset();
-  for(DiskWriterEntries::const_iterator i = first; i != diskWriterEntries.end(); ++i) {
+  for(DiskWriterEntries::const_iterator i = first,
+        eoi = diskWriterEntries.end(); i != eoi; ++i) {
     size_t writeLength = calculateLength(*i, fileOffset, rem);
 
     openIfNot(*i, &DiskWriterEntry::openFile);
@@ -416,12 +420,14 @@ void MultiDiskAdaptor::writeData(const unsigned char* data, size_t len,
 
 ssize_t MultiDiskAdaptor::readData(unsigned char* data, size_t len, off_t offset)
 {
-  DiskWriterEntries::const_iterator first = findFirstDiskWriterEntry(diskWriterEntries, offset);
+  DiskWriterEntries::const_iterator first =
+    findFirstDiskWriterEntry(diskWriterEntries, offset);
 
   size_t rem = len;
   size_t totalReadLength = 0;
   off_t fileOffset = offset-(*first)->getFileEntry()->getOffset();
-  for(DiskWriterEntries::const_iterator i = first; i != diskWriterEntries.end(); ++i) {
+  for(DiskWriterEntries::const_iterator i = first,
+        eoi = diskWriterEntries.end(); i != eoi; ++i) {
     size_t readLength = calculateLength(*i, fileOffset, rem);
 
     openIfNot(*i, &DiskWriterEntry::openFile);
@@ -443,8 +449,8 @@ ssize_t MultiDiskAdaptor::readData(unsigned char* data, size_t len, off_t offset
 
 bool MultiDiskAdaptor::fileExists()
 {
-  for(std::vector<SharedHandle<FileEntry> >::iterator i =
-        fileEntries.begin(); i != fileEntries.end(); ++i) {
+  for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
+        fileEntries.begin(), eoi = fileEntries.end(); i != eoi; ++i) {
     if((*i)->exists()) {
       return true;
     }
@@ -455,8 +461,8 @@ bool MultiDiskAdaptor::fileExists()
 uint64_t MultiDiskAdaptor::size()
 {
   uint64_t size = 0;
-  for(std::vector<SharedHandle<FileEntry> >::iterator i =
-        fileEntries.begin(); i != fileEntries.end(); ++i) {
+  for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
+        fileEntries.begin(), eoi = fileEntries.end(); i != eoi; ++i) {
     size += File((*i)->getPath()).size();
   }
   return size;
@@ -469,16 +475,16 @@ FileAllocationIteratorHandle MultiDiskAdaptor::fileAllocationIterator()
 
 void MultiDiskAdaptor::enableDirectIO()
 {
-  for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin();
-      itr != diskWriterEntries.end(); ++itr) {
+  for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin(),
+        eoi = diskWriterEntries.end(); itr != eoi; ++itr) {
     (*itr)->enableDirectIO();
   }
 }
 
 void MultiDiskAdaptor::disableDirectIO()
 {
-  for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin();
-      itr != diskWriterEntries.end(); ++itr) {
+  for(DiskWriterEntries::const_iterator itr = diskWriterEntries.begin(),
+        eoi = diskWriterEntries.end(); itr != eoi; ++itr) {
     (*itr)->disableDirectIO();
   }
 }
@@ -496,7 +502,8 @@ void MultiDiskAdaptor::disableReadOnly()
 void MultiDiskAdaptor::cutTrailingGarbage()
 {
   for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
-        diskWriterEntries.begin(); i != diskWriterEntries.end(); ++i) {
+        diskWriterEntries.begin(), eoi = diskWriterEntries.end();
+      i != eoi; ++i) {
     uint64_t length = (*i)->getFileEntry()->getLength();
     if(File((*i)->getFilePath()).size() > length) {
       // We need open file before calling DiskWriter::truncate(uint64_t)
@@ -515,7 +522,7 @@ size_t MultiDiskAdaptor::utime(const Time& actime, const Time& modtime)
 {
   size_t numOK = 0;
   for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
-        fileEntries.begin(); i != fileEntries.end(); ++i) {
+        fileEntries.begin(), eoi = fileEntries.end(); i != eoi; ++i) {
     if((*i)->isRequested()) {
       File f((*i)->getPath());
       if(f.isFile() && f.utime(actime, modtime)) {

+ 2 - 2
src/Netrc.cc

@@ -93,8 +93,8 @@ void Netrc::parse(const std::string& path)
     }
     std::vector<std::string> tokens;
     util::split(line, std::back_inserter(tokens), " \t", true);
-    for(std::vector<std::string>::const_iterator iter = tokens.begin();
-        iter != tokens.end(); ++iter) {
+    for(std::vector<std::string>::const_iterator iter = tokens.begin(),
+          eoi = tokens.end(); iter != eoi; ++iter) {
       const std::string& token = *iter;
       if(state == GET_TOKEN) {
         if(token == Netrc::MACHINE) {

+ 2 - 2
src/OptionHandlerImpl.h

@@ -480,8 +480,8 @@ public:
         msg += "''";
       } else {
         for(std::vector<std::string>::const_iterator itr =
-              _validParamValues.begin();
-            itr != _validParamValues.end(); ++itr) {
+              _validParamValues.begin(), eoi = _validParamValues.end();
+            itr != eoi; ++itr) {
           strappend(msg, "'", *itr, "' ");
         }
       }

+ 5 - 3
src/OptionParser.cc

@@ -209,8 +209,9 @@ void OptionParser::setOptionHandlers
 (const std::vector<SharedHandle<OptionHandler> >& optionHandlers)
 {
   _optionHandlers = optionHandlers;
-  for(std::vector<SharedHandle<OptionHandler> >::iterator i =
-        _optionHandlers.begin(); i != _optionHandlers.end(); ++i) {
+  for(std::vector<SharedHandle<OptionHandler> >::const_iterator i =
+        _optionHandlers.begin(), eoi = _optionHandlers.end();
+      i != eoi; ++i) {
     (*i)->setOptionID(++_idCounter);
   }
   std::sort(_optionHandlers.begin(), _optionHandlers.end(),
@@ -230,7 +231,8 @@ void OptionParser::addOptionHandler
 void OptionParser::parseDefaultValues(Option& option) const
 {
   for(std::vector<SharedHandle<OptionHandler> >::const_iterator i =
-        _optionHandlers.begin(); i != _optionHandlers.end(); ++i) {
+        _optionHandlers.begin(), eoi = _optionHandlers.end();
+      i != eoi; ++i) {
     if(!(*i)->getDefaultValue().empty()) {
       (*i)->parse(option, (*i)->getDefaultValue());
     }

+ 2 - 2
src/PStringBuildVisitor.cc

@@ -75,8 +75,8 @@ void PStringBuildVisitor::visit(PStringNumLoop& s)
 void PStringBuildVisitor::visit(PStringSelect& s)
 {
   const std::vector<std::string>& values = s.getValues();
-  for(std::vector<std::string>::const_iterator i = values.begin();
-      i != values.end(); ++i) {
+  for(std::vector<std::string>::const_iterator i = values.begin(),
+        eoi = values.end(); i != eoi; ++i) {
     PStringSegment(*i, s.getNext()).accept(*this);
   }
 }

+ 2 - 2
src/PeerListProcessor.h

@@ -60,8 +60,8 @@ public:
   template<typename OutputIterator>
   void extractPeerFromList(const BDE& peerData, OutputIterator dest)
   {
-    for(BDE::List::const_iterator itr = peerData.listBegin();
-        itr != peerData.listEnd(); ++itr) {
+    for(BDE::List::const_iterator itr = peerData.listBegin(),
+          eoi = peerData.listEnd(); itr != eoi; ++itr) {
       const BDE& peerDict = *itr;
       if(!peerDict.isDict()) {
         continue;

+ 2 - 2
src/PeerListenCommand.cc

@@ -75,8 +75,8 @@ bool PeerListenCommand::bindPort(uint16_t& port, IntSequence& seq)
   std::random_shuffle(randPorts.begin(), randPorts.end(),
                       *SimpleRandomizer::getInstance().get());
   
-  for(std::vector<int32_t>::const_iterator portItr = randPorts.begin();
-      portItr != randPorts.end(); ++portItr) {
+  for(std::vector<int32_t>::const_iterator portItr = randPorts.begin(),
+        eoi = randPorts.end(); portItr != eoi; ++portItr) {
     if(!(0 < (*portItr) && (*portItr) <= 65535)) {
       continue;
     }

+ 2 - 2
src/PeerSessionResource.cc

@@ -213,8 +213,8 @@ PeerSessionResource::getExtensionMessageID(const std::string& name) const
 
 std::string PeerSessionResource::getExtensionName(uint8_t id) const
 {
-  for(Extensions::const_iterator itr = _extensions.begin();
-      itr != _extensions.end(); ++itr) {
+  for(Extensions::const_iterator itr = _extensions.begin(),
+        eoi = _extensions.end(); itr != eoi; ++itr) {
     const Extensions::value_type& p = *itr;
     if(p.second == id) {
       return p.first;

+ 2 - 2
src/Piece.cc

@@ -176,8 +176,8 @@ size_t Piece::getMissingUnusedBlockIndex
 {
   size_t num = bitfield->getFirstNMissingUnusedIndex(indexes, n);
   if(num) {
-    for(std::vector<size_t>::const_iterator i = indexes.end()-num;
-        i != indexes.end(); ++i) {
+    for(std::vector<size_t>::const_iterator i = indexes.end()-num,
+          eoi = indexes.end(); i != eoi; ++i) {
       bitfield->setUseBit(*i);
     }
   }

+ 3 - 2
src/PieceStatMan.cc

@@ -81,8 +81,9 @@ PieceStatMan::PieceStatMan(size_t pieceNum, bool randomShuffle):
   }
   {
     size_t order = 0;
-    for(std::vector<SharedHandle<PieceStat> >::iterator i =
-          sortedPieceStats.begin(); i != sortedPieceStats.end(); ++i) {
+    for(std::vector<SharedHandle<PieceStat> >::const_iterator i =
+          sortedPieceStats.begin(), eoi = sortedPieceStats.end();
+        i != eoi; ++i) {
       _sortedPieceStatIndexes[order] = (*i)->getIndex();
       (*i)->setOrder(order++);
     }

+ 2 - 2
src/PriorityPieceSelector.cc

@@ -44,8 +44,8 @@ PriorityPieceSelector::PriorityPieceSelector
 bool PriorityPieceSelector::select
 (size_t& index, const unsigned char* bitfield, size_t nbits) const
 {
-  for(std::vector<size_t>::const_iterator i = _prioritizedPieces.begin();
-      i != _prioritizedPieces.end(); ++i) {
+  for(std::vector<size_t>::const_iterator i = _prioritizedPieces.begin(),
+        eoi = _prioritizedPieces.end(); i != eoi; ++i) {
     if(bitfield::test(bitfield, nbits, *i)) {
       index = *i;
       return true;

+ 6 - 6
src/RequestGroup.cc

@@ -339,8 +339,8 @@ void RequestGroup::createInitialCommand
         if(!torrentAttrs[bittorrent::NODES].empty() && DHTSetup::initialized()) {
           std::vector<std::pair<std::string, uint16_t> > entryPoints;
           const BDE& nodes = torrentAttrs[bittorrent::NODES];
-          for(BDE::List::const_iterator i = nodes.listBegin();
-              i != nodes.listEnd(); ++i) {
+          for(BDE::List::const_iterator i = nodes.listBegin(),
+                eoi = nodes.listEnd(); i != eoi; ++i) {
             std::pair<std::string, uint16_t> addr
               ((*i)[bittorrent::HOSTNAME].s(), (*i)[bittorrent::PORT].i());
             entryPoints.push_back(addr);
@@ -854,8 +854,8 @@ void RequestGroup::preDownloadProcessing()
   }
   try {
     for(std::vector<SharedHandle<PreDownloadHandler> >::const_iterator itr =
-          _preDownloadHandlers.begin();
-        itr != _preDownloadHandlers.end(); ++itr) {
+          _preDownloadHandlers.begin(), eoi = _preDownloadHandlers.end();
+        itr != eoi; ++itr) {
       if((*itr)->canHandle(this)) {
         (*itr)->execute(this);
         return;
@@ -880,8 +880,8 @@ void RequestGroup::postDownloadProcessing
   }
   try {
     for(std::vector<SharedHandle<PostDownloadHandler> >::const_iterator itr =
-          _postDownloadHandlers.begin();
-        itr != _postDownloadHandlers.end(); ++itr) {
+          _postDownloadHandlers.begin(), eoi = _postDownloadHandlers.end();
+        itr != eoi; ++itr) {
       if((*itr)->canHandle(this)) {
         (*itr)->getNextRequestGroups(groups, this);
         return;

+ 21 - 19
src/RequestGroupMan.cc

@@ -389,7 +389,7 @@ public:
         const std::vector<SharedHandle<PeerStat> >& peerStats =
           group->getSegmentMan()->getFastestPeerStats();
         for(std::vector<SharedHandle<PeerStat> >::const_iterator i =
-              peerStats.begin(); i != peerStats.end(); ++i) {
+              peerStats.begin(), eoi = peerStats.end(); i != eoi; ++i) {
           if((*i)->getHostname().empty() || (*i)->getProtocol().empty()) {
             continue;
           }
@@ -529,8 +529,8 @@ void RequestGroupMan::fillRequestGroupFromReserver(DownloadEngine* e)
 
 void RequestGroupMan::save()
 {
-  for(std::deque<SharedHandle<RequestGroup> >::iterator itr =
-        _requestGroups.begin(); itr != _requestGroups.end(); ++itr) {
+  for(std::deque<SharedHandle<RequestGroup> >::const_iterator itr =
+        _requestGroups.begin(), eoi = _requestGroups.end(); itr != eoi; ++itr) {
     if((*itr)->allDownloadFinished()) {
       (*itr)->removeControlFile();
     } else {
@@ -545,8 +545,8 @@ void RequestGroupMan::save()
 
 void RequestGroupMan::closeFile()
 {
-  for(std::deque<SharedHandle<RequestGroup> >::iterator itr =
-        _requestGroups.begin(); itr != _requestGroups.end(); ++itr) {
+  for(std::deque<SharedHandle<RequestGroup> >::const_iterator itr =
+        _requestGroups.begin(), eoi = _requestGroups.end(); itr != eoi; ++itr) {
     (*itr)->closeFile();
   }
 }
@@ -558,7 +558,8 @@ RequestGroupMan::DownloadStat RequestGroupMan::getDownloadStat() const
   size_t inprogress = 0;
   downloadresultcode::RESULT lastError = downloadresultcode::FINISHED;
   for(std::deque<SharedHandle<DownloadResult> >::const_iterator itr =
-        _downloadResults.begin(); itr != _downloadResults.end(); ++itr) {
+        _downloadResults.begin(), eoi = _downloadResults.end();
+      itr != eoi; ++itr) {
     if((*itr)->result == downloadresultcode::FINISHED) {
       ++finished;
     } else {
@@ -567,7 +568,7 @@ RequestGroupMan::DownloadStat RequestGroupMan::getDownloadStat() const
     }
   }
   for(std::deque<SharedHandle<RequestGroup> >::const_iterator itr =
-        _requestGroups.begin(); itr != _requestGroups.end(); ++itr) {
+        _requestGroups.begin(), eoi = _requestGroups.end(); itr != eoi; ++itr) {
     DownloadResultHandle result = (*itr)->createDownloadResult();
     if(result->result == downloadresultcode::FINISHED) {
       ++finished;
@@ -602,8 +603,9 @@ void RequestGroupMan::showDownloadResults(std::ostream& o) const
   int err = 0;
   int inpr = 0;
 
-  for(std::deque<SharedHandle<DownloadResult> >::const_iterator itr = _downloadResults.begin();
-      itr != _downloadResults.end(); ++itr) {
+  for(std::deque<SharedHandle<DownloadResult> >::const_iterator itr =
+        _downloadResults.begin(), eoi = _downloadResults.end();
+      itr != eoi; ++itr) {
     std::string status;
     if((*itr)->result == downloadresultcode::FINISHED) {
       status = MARK_OK;
@@ -618,7 +620,7 @@ void RequestGroupMan::showDownloadResults(std::ostream& o) const
     o << formatDownloadResult(status, *itr) << "\n";
   }
   for(std::deque<SharedHandle<RequestGroup> >::const_iterator itr =
-        _requestGroups.begin(); itr != _requestGroups.end(); ++itr) {
+        _requestGroups.begin(), eoi = _requestGroups.end(); itr != eoi; ++itr) {
     DownloadResultHandle result = (*itr)->createDownloadResult();
     std::string status;
     if(result->result == downloadresultcode::FINISHED) {
@@ -697,7 +699,7 @@ bool RequestGroupMan::isSameFileBeingDownloaded(RequestGroup* requestGroup) cons
   }
   std::vector<std::string> files;
   for(std::deque<SharedHandle<RequestGroup> >::const_iterator itr =
-        _requestGroups.begin(); itr != _requestGroups.end(); ++itr) {
+        _requestGroups.begin(), eoi = _requestGroups.end(); itr != eoi; ++itr) {
     if((*itr).get() != requestGroup) {
       const std::vector<SharedHandle<FileEntry> >& entries =
         (*itr)->getDownloadContext()->getFileEntries();
@@ -715,17 +717,17 @@ bool RequestGroupMan::isSameFileBeingDownloaded(RequestGroup* requestGroup) cons
 
 void RequestGroupMan::halt()
 {
-  for(std::deque<SharedHandle<RequestGroup> >::const_iterator itr =
-        _requestGroups.begin(); itr != _requestGroups.end(); ++itr) {
-    (*itr)->setHaltRequested(true);
+  for(std::deque<SharedHandle<RequestGroup> >::const_iterator i =
+        _requestGroups.begin(), eoi = _requestGroups.end(); i != eoi; ++i) {
+    (*i)->setHaltRequested(true);
   }
 }
 
 void RequestGroupMan::forceHalt()
 {
-  for(std::deque<SharedHandle<RequestGroup> >::const_iterator itr =
-        _requestGroups.begin(); itr != _requestGroups.end(); ++itr) {
-    (*itr)->setForceHaltRequested(true);
+  for(std::deque<SharedHandle<RequestGroup> >::const_iterator i =
+        _requestGroups.begin(), eoi = _requestGroups.end(); i != eoi; ++i) {
+    (*i)->setForceHaltRequested(true);
   }
 }
 
@@ -733,7 +735,7 @@ TransferStat RequestGroupMan::calculateStat()
 {
   TransferStat s;
   for(std::deque<SharedHandle<RequestGroup> >::const_iterator i =
-        _requestGroups.begin(); i != _requestGroups.end(); ++i) {
+        _requestGroups.begin(), eoi = _requestGroups.end(); i != eoi; ++i) {
     s += (*i)->calculateStat();
   }
   return s;
@@ -743,7 +745,7 @@ SharedHandle<DownloadResult>
 RequestGroupMan::findDownloadResult(int32_t gid) const
 {
   for(std::deque<SharedHandle<DownloadResult> >::const_iterator i =
-        _downloadResults.begin(); i != _downloadResults.end(); ++i) {
+        _downloadResults.begin(), eoi = _downloadResults.end(); i != eoi; ++i) {
     if((*i)->gid == gid) {
       return *i;
     }

+ 13 - 11
src/SegmentMan.cc

@@ -158,8 +158,8 @@ SharedHandle<Segment> SegmentMan::checkoutSegment
 void SegmentMan::getInFlightSegment
 (std::vector<SharedHandle<Segment> >& segments, cuid_t cuid)
 {
-  for(SegmentEntries::iterator itr = usedSegmentEntries.begin();
-      itr != usedSegmentEntries.end(); ++itr) {
+  for(SegmentEntries::const_iterator itr = usedSegmentEntries.begin(),
+        eoi = usedSegmentEntries.end(); itr != eoi; ++itr) {
     const SegmentEntryHandle& segmentEntry = *itr;
     if(segmentEntry->cuid == cuid) {
       segments.push_back(segmentEntry->segment);
@@ -199,8 +199,8 @@ void SegmentMan::getSegment
       segments.push_back(segment);
     }
   }
-  for(std::vector<SharedHandle<Segment> >::const_iterator i = pending.begin();
-      i != pending.end(); ++i) {
+  for(std::vector<SharedHandle<Segment> >::const_iterator i = pending.begin(),
+        eoi = pending.end(); i != eoi; ++i) {
     cancelSegment(cuid, *i);
   }
 }
@@ -223,11 +223,12 @@ void SegmentMan::cancelSegment(const SharedHandle<Segment>& segment)
 }
 
 void SegmentMan::cancelSegment(cuid_t cuid) {
-  for(SegmentEntries::iterator itr = usedSegmentEntries.begin();
-      itr != usedSegmentEntries.end();) {
+  for(SegmentEntries::iterator itr = usedSegmentEntries.begin(),
+        eoi = usedSegmentEntries.end(); itr != eoi;) {
     if((*itr)->cuid == cuid) {
       cancelSegment((*itr)->segment);
       itr = usedSegmentEntries.erase(itr);
+      eoi = usedSegmentEntries.end();
     } else {
       ++itr;
     }
@@ -237,11 +238,12 @@ void SegmentMan::cancelSegment(cuid_t cuid) {
 void SegmentMan::cancelSegment
 (cuid_t cuid, const SharedHandle<Segment>& segment)
 {
-  for(SegmentEntries::iterator itr = usedSegmentEntries.begin();
-      itr != usedSegmentEntries.end();) {
+  for(SegmentEntries::iterator itr = usedSegmentEntries.begin(),
+        eoi = usedSegmentEntries.end(); itr != eoi;) {
     if((*itr)->cuid == cuid && (*itr)->segment == segment) {
       cancelSegment((*itr)->segment);
       itr = usedSegmentEntries.erase(itr);
+      //eoi = usedSegmentEntries.end();
       break;
     } else {
       ++itr;
@@ -290,8 +292,8 @@ uint64_t SegmentMan::getDownloadLength() const {
 
 void SegmentMan::registerPeerStat(const SharedHandle<PeerStat>& peerStat)
 {
-  for(std::vector<SharedHandle<PeerStat> >::iterator i = peerStats.begin();
-      i != peerStats.end(); ++i) {
+  for(std::vector<SharedHandle<PeerStat> >::iterator i = peerStats.begin(),
+        eoi = peerStats.end(); i != eoi; ++i) {
     if((*i)->getStatus() == PeerStat::IDLE) {
       *i = peerStat;
       return;
@@ -338,7 +340,7 @@ unsigned int SegmentMan::calculateDownloadSpeed()
     _lastPeerStatDlspdMapUpdated.reset();
     _peerStatDlspdMap.clear();
     for(std::vector<SharedHandle<PeerStat> >::const_iterator i =
-          peerStats.begin(); i != peerStats.end(); ++i) {
+          peerStats.begin(), eoi = peerStats.end(); i != eoi; ++i) {
       if((*i)->getStatus() == PeerStat::ACTIVE) {
         unsigned int s = (*i)->calculateDownloadSpeed();
         _peerStatDlspdMap[(*i)->getCuid()] = s;

+ 11 - 10
src/SelectEventPoll.cc

@@ -179,10 +179,10 @@ void SelectEventPoll::poll(const struct timeval& tv)
 #endif // __MINGW32__
 #ifdef ENABLE_ASYNC_DNS
 
-  for(std::deque<SharedHandle<AsyncNameResolverEntry> >::iterator itr =
-        _nameResolverEntries.begin(); itr != _nameResolverEntries.end();
-      ++itr) {
-    SharedHandle<AsyncNameResolverEntry>& entry = *itr;
+  for(std::deque<SharedHandle<AsyncNameResolverEntry> >::const_iterator itr =
+        _nameResolverEntries.begin(), eoi = _nameResolverEntries.end();
+      itr != eoi; ++itr) {
+    const SharedHandle<AsyncNameResolverEntry>& entry = *itr;
     int fd = entry->getFds(&rfds, &wfds);
     // TODO force error if fd == 0
     if(_fdmax < fd) {
@@ -201,8 +201,8 @@ void SelectEventPoll::poll(const struct timeval& tv)
 #endif // !__MINGW32__
   } while(retval == -1 && errno == EINTR);
   if(retval > 0) {
-    for(std::deque<SharedHandle<SocketEntry> >::iterator i =
-          _socketEntries.begin(); i != _socketEntries.end(); ++i) {
+    for(std::deque<SharedHandle<SocketEntry> >::const_iterator i =
+          _socketEntries.begin(), eoi = _socketEntries.end(); i != eoi; ++i) {
       int events = 0;
       if(FD_ISSET((*i)->getSocket(), &rfds)) {
         events |= EventPoll::EVENT_READ;
@@ -215,8 +215,9 @@ void SelectEventPoll::poll(const struct timeval& tv)
   }
 #ifdef ENABLE_ASYNC_DNS
 
-  for(std::deque<SharedHandle<AsyncNameResolverEntry> >::iterator i =
-        _nameResolverEntries.begin(); i != _nameResolverEntries.end(); ++i) {
+  for(std::deque<SharedHandle<AsyncNameResolverEntry> >::const_iterator i =
+        _nameResolverEntries.begin(), eoi = _nameResolverEntries.end();
+      i != eoi; ++i) {
     (*i)->process(&rfds, &wfds);
   }
 
@@ -232,8 +233,8 @@ void SelectEventPoll::updateFdSet()
 #endif // !__MINGW32__
   FD_ZERO(&_rfdset);
   FD_ZERO(&_wfdset);
-  for(std::deque<SharedHandle<SocketEntry> >::iterator i =
-        _socketEntries.begin(); i != _socketEntries.end(); ++i) {
+  for(std::deque<SharedHandle<SocketEntry> >::const_iterator i =
+        _socketEntries.begin(), eoi = _socketEntries.end(); i != eoi; ++i) {
     sock_t fd = (*i)->getSocket();
     int events = (*i)->getEvents();
     if(events&EventPoll::EVENT_READ) {

+ 2 - 2
src/ServerStatMan.cc

@@ -105,8 +105,8 @@ bool ServerStatMan::load(std::istream& in)
     std::vector<std::string> items;
     util::split(line, std::back_inserter(items), ",");
     std::map<std::string, std::string> m;
-    for(std::vector<std::string>::const_iterator i = items.begin();
-        i != items.end(); ++i) {
+    for(std::vector<std::string>::const_iterator i = items.begin(),
+          eoi = items.end(); i != eoi; ++i) {
       std::pair<std::string, std::string> p = util::split(*i, "=");
       util::trimSelf(p.first);
       util::trimSelf(p.second);

+ 6 - 3
src/SocketCore.cc

@@ -307,7 +307,8 @@ void SocketCore::bind(uint16_t port, int flags)
     }
   } else {
     for(std::vector<std::pair<struct sockaddr_storage, socklen_t> >::
-          const_iterator i = _bindAddrs.begin(); i != _bindAddrs.end(); ++i) {
+          const_iterator i = _bindAddrs.begin(), eoi = _bindAddrs.end();
+        i != eoi; ++i) {
       char host[NI_MAXHOST];
       int s;
       s = getnameinfo(reinterpret_cast<const struct sockaddr*>(&(*i).first),
@@ -410,7 +411,8 @@ void SocketCore::establishConnection(const std::string& host, uint16_t port)
     if(!_bindAddrs.empty()) {
       bool bindSuccess = false;
       for(std::vector<std::pair<struct sockaddr_storage, socklen_t> >::
-            const_iterator i = _bindAddrs.begin(); i != _bindAddrs.end(); ++i) {
+            const_iterator i = _bindAddrs.begin(), eoi = _bindAddrs.end();
+          i != eoi; ++i) {
         if(::bind(fd,reinterpret_cast<const struct sockaddr*>(&(*i).first),
                   (*i).second) == -1) {
           if(LogFactory::getInstance()->debug()) {
@@ -1249,7 +1251,8 @@ void SocketCore::bindAddress(const std::string& iface)
   } else {
     _bindAddrs = bindAddrs;
     for(std::vector<std::pair<struct sockaddr_storage, socklen_t> >::
-          const_iterator i = _bindAddrs.begin(); i != _bindAddrs.end(); ++i) {
+          const_iterator i = _bindAddrs.begin(), eoi = _bindAddrs.end();
+        i != eoi; ++i) {
       char host[NI_MAXHOST];
       int s;
       s = getnameinfo(reinterpret_cast<const struct sockaddr*>(&(*i).first),

+ 5 - 4
src/UTMetadataRequestTracker.cc

@@ -68,8 +68,8 @@ std::vector<size_t> UTMetadataRequestTracker::removeTimeoutEntry()
 {
   std::vector<size_t> indexes;
   const time_t TIMEOUT = 20;
-  for(std::vector<RequestEntry>::iterator i = _trackedRequests.begin();
-      i != _trackedRequests.end();) {
+  for(std::vector<RequestEntry>::iterator i = _trackedRequests.begin(),
+        eoi = _trackedRequests.end(); i != eoi;) {
     if((*i).elapsed(TIMEOUT)) {
       if(_logger->debug()) {
         _logger->debug("ut_metadata request timeout. index=%lu",
@@ -77,6 +77,7 @@ std::vector<size_t> UTMetadataRequestTracker::removeTimeoutEntry()
       }
       indexes.push_back((*i)._index);
       i = _trackedRequests.erase(i);
+      eoi = _trackedRequests.end();
     } else {
       ++i;
     }
@@ -97,8 +98,8 @@ size_t UTMetadataRequestTracker::avail() const
 std::vector<size_t> UTMetadataRequestTracker::getAllTrackedIndex() const
 {
   std::vector<size_t> indexes;
-  for(std::vector<RequestEntry>::const_iterator i = _trackedRequests.begin();
-      i != _trackedRequests.end(); ++i) {
+  for(std::vector<RequestEntry>::const_iterator i = _trackedRequests.begin(),
+        eoi = _trackedRequests.end(); i != eoi; ++i) {
     indexes.push_back((*i)._index);
   }
   return indexes;

+ 2 - 2
src/UTPexExtensionMessage.cc

@@ -76,8 +76,8 @@ UTPexExtensionMessage::createCompactPeerListAndFlag
 {
   std::string addrstring;
   std::string flagstring;
-  for(std::vector<SharedHandle<Peer> >::const_iterator itr = peers.begin();
-      itr != peers.end(); ++itr) {
+  for(std::vector<SharedHandle<Peer> >::const_iterator itr = peers.begin(),
+        eoi = peers.end(); itr != eoi; ++itr) {
     unsigned char compact[6];
     if(bittorrent::createcompact(compact, (*itr)->ipaddr, (*itr)->port)) {
       addrstring.append(&compact[0], &compact[6]);

+ 2 - 2
src/XmlRpcMethod.cc

@@ -103,8 +103,8 @@ static void gatherOption
       const BDE& value = (*first).second;
       if((optionName == PREF_HEADER || optionName == PREF_INDEX_OUT) &&
          value.isList()){
-        for(BDE::List::const_iterator argiter = value.listBegin();
-            argiter != value.listEnd(); ++argiter) {
+        for(BDE::List::const_iterator argiter = value.listBegin(),
+              eoi = value.listEnd(); argiter != eoi; ++argiter) {
           if((*argiter).isString()) {
             optionHandler->parse(*option.get(), (*argiter).s());
           }

+ 23 - 22
src/XmlRpcMethodImpl.cc

@@ -168,8 +168,8 @@ static void getPosParam(const BDE& params, size_t posParamIndex,
 template<typename OutputIterator>
 static void extractUris(OutputIterator out, const BDE& src)
 {
-  for(BDE::List::const_iterator i = src.listBegin(), end = src.listEnd();
-      i != end; ++i) {
+  for(BDE::List::const_iterator i = src.listBegin(), eoi = src.listEnd();
+      i != eoi; ++i) {
     if((*i).isString()) {
       out++ = (*i).s();
     }
@@ -269,7 +269,7 @@ BDE AddMetalinkXmlRpcMethod::process
     }
     BDE gids = BDE::list();
     for(std::vector<SharedHandle<RequestGroup> >::const_iterator i =
-          result.begin(); i != result.end(); ++i) {
+          result.begin(), eoi = result.end(); i != eoi; ++i) {
       gids << BDE(util::itos((*i)->getGID()));
     }
     return gids;
@@ -325,8 +325,8 @@ static void createFileEntry(BDE& files, InputIterator first, InputIterator last)
     BDE uriList = BDE::list();
     std::vector<std::string> uris;
     (*first)->getUris(uris);
-    for(std::vector<std::string>::const_iterator i = uris.begin();
-        i != uris.end(); ++i) {
+    for(std::vector<std::string>::const_iterator i = uris.begin(),
+          eoi = uris.end(); i != eoi; ++i) {
       BDE uriEntry = BDE::dict();
       uriEntry[KEY_URI] = *i;
       uriList << uriEntry;
@@ -362,8 +362,8 @@ void gatherProgressCommon
   if(!group->followedBy().empty()) {
     BDE list = BDE::list();
     // The element is GID.
-    for(std::vector<int32_t>::const_iterator i = group->followedBy().begin();
-        i != group->followedBy().end(); ++i) {
+    for(std::vector<int32_t>::const_iterator i = group->followedBy().begin(),
+          eoi = group->followedBy().end(); i != eoi; ++i) {
       list << util::itos(*i);
     }
     entryDict[KEY_FOLLOWED_BY] = list;
@@ -395,11 +395,11 @@ void gatherBitTorrentMetadata(BDE& btDict, const BDE& torrentAttrs)
   // TODO Would it be good to add copy() method in BDE?
   const BDE& announceList = torrentAttrs[bittorrent::ANNOUNCE_LIST];
   BDE destAnnounceList = BDE::list();
-  for(BDE::List::const_iterator l = announceList.listBegin();
-      l != announceList.listEnd(); ++l) {
+  for(BDE::List::const_iterator l = announceList.listBegin(),
+        eoi = announceList.listEnd(); l != eoi; ++l) {
     BDE destAnnounceTier = BDE::list();
-    for(BDE::List::const_iterator t = (*l).listBegin();
-        t != (*l).listEnd(); ++t) {
+    for(BDE::List::const_iterator t = (*l).listBegin(),
+          eoi2 = (*l).listEnd(); t != eoi2; ++t) {
       destAnnounceTier <<  (*t);
     }
     destAnnounceList << destAnnounceTier;
@@ -435,7 +435,7 @@ static void gatherPeer(BDE& peers, const SharedHandle<PeerStorage>& ps)
   std::vector<SharedHandle<Peer> > activePeers;
   ps->getActivePeers(activePeers);
   for(std::vector<SharedHandle<Peer> >::const_iterator i =
-        activePeers.begin(); i != activePeers.end(); ++i) {
+        activePeers.begin(), eoi = activePeers.end(); i != eoi; ++i) {
     BDE peerEntry = BDE::dict();
     peerEntry[KEY_PEER_ID] = util::torrentUrlencode((*i)->getPeerId(),
                                                     PEER_ID_LENGTH);
@@ -483,8 +483,8 @@ void gatherStoppedDownload
   if(!ds->followedBy.empty()) {
     BDE list = BDE::list();
     // The element is GID.
-    for(std::vector<int32_t>::const_iterator i = ds->followedBy.begin();
-        i != ds->followedBy.end(); ++i) {
+    for(std::vector<int32_t>::const_iterator i = ds->followedBy.begin(),
+          eoi = ds->followedBy.end(); i != eoi; ++i) {
       list << util::itos(*i);
     }
     entryDict[KEY_FOLLOWED_BY] = list;
@@ -561,8 +561,8 @@ BDE GetUrisXmlRpcMethod::process
   if(!group->getDownloadContext()->getFileEntries().empty()) {
     std::vector<std::string> uris;
     group->getDownloadContext()->getFirstFileEntry()->getUris(uris);
-    for(std::vector<std::string>::const_iterator i = uris.begin();
-        i != uris.end(); ++i) {
+    for(std::vector<std::string>::const_iterator i = uris.begin(),
+          eoi = uris.end(); i != eoi; ++i) {
       BDE entry = BDE::dict();
       entry[KEY_URI] = *i;
       uriList << entry;
@@ -642,7 +642,7 @@ BDE TellActiveXmlRpcMethod::process
   const std::deque<SharedHandle<RequestGroup> >& groups =
     e->_requestGroupMan->getRequestGroups();
   for(std::deque<SharedHandle<RequestGroup> >::const_iterator i =
-        groups.begin(); i != groups.end(); ++i) {
+        groups.begin(), eoi = groups.end(); i != eoi; ++i) {
     BDE entryDict = BDE::dict();
     entryDict[KEY_STATUS] = BDE_ACTIVE;
     gatherProgress(entryDict, *i, e);
@@ -757,7 +757,8 @@ BDE GetVersionXmlRpcMethod::process
   result[KEY_VERSION] = std::string(PACKAGE_VERSION);
   BDE featureList = BDE::list();
   const FeatureMap& features = FeatureConfig::getInstance()->getFeatures();
-  for(FeatureMap::const_iterator i = features.begin(); i != features.end();++i){
+  for(FeatureMap::const_iterator i = features.begin(), eoi = features.end();
+      i != eoi;++i){
     if((*i).second) {
       featureList << (*i).first;
     }
@@ -803,8 +804,8 @@ BDE GetGlobalOptionXmlRpcMethod::process
 (const XmlRpcRequest& req, DownloadEngine* e)
 {
   BDE result = BDE::dict();
-  for(std::map<std::string, std::string>::const_iterator i = e->option->begin();
-      i != e->option->end(); ++i) {
+  for(std::map<std::string, std::string>::const_iterator i = e->option->begin(),
+        eoi = e->option->end(); i != eoi; ++i) {
     SharedHandle<OptionHandler> h = _optionParser->findByName((*i).first);
     if(!h.isNull() && !h->isHidden()) {
       result[(*i).first] = (*i).second;
@@ -861,8 +862,8 @@ BDE SystemMulticallXmlRpcMethod::process
   }
   const BDE& methodSpecs = params[0];
   BDE list = BDE::list();
-  for(BDE::List::const_iterator i = methodSpecs.listBegin();
-      i != methodSpecs.listEnd(); ++i) {
+  for(BDE::List::const_iterator i = methodSpecs.listBegin(),
+        eoi = methodSpecs.listEnd(); i != eoi; ++i) {
     if(!(*i).isDict()) {
       list << createErrorResponse
         (DL_ABORT_EX("system.multicall expected struct."));

+ 4 - 2
src/bencode.cc

@@ -212,7 +212,8 @@ static void encodeIter(std::ostream& o, const BDE& bde)
     o.write(s.data(), s.size());
   } else if(bde.isDict()) {
     o << "d";
-    for(BDE::Dict::const_iterator i = bde.dictBegin(); i != bde.dictEnd(); ++i){
+    for(BDE::Dict::const_iterator i = bde.dictBegin(), eoi = bde.dictEnd();
+        i != eoi; ++i){
       const std::string& key = (*i).first;
       o << key.size() << ":";
       o.write(key.data(), key.size());
@@ -221,7 +222,8 @@ static void encodeIter(std::ostream& o, const BDE& bde)
     o << "e";
   } else if(bde.isList()) {
     o << "l";
-    for(BDE::List::const_iterator i = bde.listBegin(); i != bde.listEnd(); ++i){
+    for(BDE::List::const_iterator i = bde.listBegin(), eoi = bde.listEnd();
+        i != eoi; ++i){
       encodeIter(o, *i);
     }
     o << "e";

+ 24 - 24
src/bittorrent_helper.cc

@@ -150,8 +150,8 @@ static void extractUrlList
 (BDE& torrent, std::vector<std::string>& uris, const BDE& bde)
 {
   if(bde.isList()) {
-    for(BDE::List::const_iterator itr = bde.listBegin();
-        itr != bde.listEnd(); ++itr) {
+    for(BDE::List::const_iterator itr = bde.listBegin(), eoi = bde.listEnd();
+        itr != eoi; ++itr) {
       if((*itr).isString()) {
         uris.push_back((*itr).s());
       }
@@ -221,8 +221,8 @@ static void extractFileEntries
     off_t offset = 0;
     // multi-file mode
     torrent[MODE] = MULTI;
-    for(BDE::List::const_iterator itr = filesList.listBegin();
-        itr != filesList.listEnd(); ++itr) {
+    for(BDE::List::const_iterator itr = filesList.listBegin(),
+          eoi = filesList.listEnd(); itr != eoi; ++itr) {
       const BDE& fileDict = *itr;
       if(!fileDict.isDict()) {
         continue;
@@ -277,8 +277,8 @@ static void extractFileEntries
     // For each uri in urlList, if it ends with '/', then
     // concatenate name to it. Specification just says so.
     std::vector<std::string> uris;
-    for(std::vector<std::string>::const_iterator i = urlList.begin();
-        i != urlList.end(); ++i) {
+    for(std::vector<std::string>::const_iterator i = urlList.begin(),
+          eoi = urlList.end(); i != eoi; ++i) {
       if(util::endsWith(*i, A2STR::SLASH_C)) {
         uris.push_back((*i)+name);
       } else {
@@ -305,10 +305,10 @@ static void extractAnnounce(BDE& torrent, const BDE& rootDict)
   if(announceList.isList()) {
     torrent[ANNOUNCE_LIST] = announceList;
     BDE& tiers = torrent[ANNOUNCE_LIST];
-    for(BDE::List::iterator tieriter = tiers.listBegin();
-        tieriter != tiers.listEnd(); ++tieriter) {
-      for(BDE::List::iterator uriiter = (*tieriter).listBegin();
-          uriiter != (*tieriter).listEnd(); ++uriiter) {
+    for(BDE::List::iterator tieriter = tiers.listBegin(),
+          eoi = tiers.listEnd(); tieriter != eoi; ++tieriter) {
+      for(BDE::List::iterator uriiter = (*tieriter).listBegin(),
+            eoi2 = (*tieriter).listEnd(); uriiter != eoi2; ++uriiter) {
         if((*uriiter).isString()) {
           *uriiter = util::trim((*uriiter).s());
         }
@@ -329,8 +329,8 @@ static void extractNodes(BDE& torrent, const BDE& nodesList)
 {
   BDE nodes = BDE::list();
   if(nodesList.isList()) {
-    for(BDE::List::const_iterator i = nodesList.listBegin();
-        i != nodesList.listEnd(); ++i) {
+    for(BDE::List::const_iterator i = nodesList.listBegin(),
+          eoi = nodesList.listEnd(); i != eoi; ++i) {
       const BDE& addrPairList = (*i);
       if(!addrPairList.isList() || addrPairList.size() != 2) {
         continue;
@@ -567,13 +567,13 @@ void print(std::ostream& o, const SharedHandle<DownloadContext>& dctx)
   o << "Mode: " << torrentAttrs[MODE].s() << "\n";
   o << "Announce:" << "\n";
   const BDE& announceList = torrentAttrs[ANNOUNCE_LIST];
-  for(BDE::List::const_iterator tieritr = announceList.listBegin();
-      tieritr != announceList.listEnd(); ++tieritr) {
+  for(BDE::List::const_iterator tieritr = announceList.listBegin(),
+        eoi = announceList.listEnd(); tieritr != eoi; ++tieritr) {
     if(!(*tieritr).isList()) {
       continue;
     }
-    for(BDE::List::const_iterator i = (*tieritr).listBegin();
-        i != (*tieritr).listEnd(); ++i) {
+    for(BDE::List::const_iterator i = (*tieritr).listBegin(),
+          eoi2 = (*tieritr).listEnd(); i != eoi2; ++i) {
       o << " " << (*i).s();
     }
     o << "\n";
@@ -586,8 +586,8 @@ void print(std::ostream& o, const SharedHandle<DownloadContext>& dctx)
   if(!torrentAttrs[URL_LIST].empty()) {
     const BDE& urlList = torrentAttrs[URL_LIST];
     o << "URL List: " << "\n";
-    for(BDE::List::const_iterator i = urlList.listBegin();
-        i != urlList.listEnd(); ++i) {
+    for(BDE::List::const_iterator i = urlList.listBegin(),
+          eoi = urlList.listEnd(); i != eoi; ++i) {
       o << " " << (*i).s() << "\n";
     }
   }
@@ -886,8 +886,8 @@ BDE parseMagnet(const std::string& magnet)
   BDE announceList = BDE::list();
   if(r.containsKey("tr")) {
     const BDE& uris = r["tr"];
-    for(BDE::List::const_iterator i = uris.listBegin(); i != uris.listEnd();
-        ++i) {
+    for(BDE::List::const_iterator i = uris.listBegin(), eoi = uris.listEnd();
+        i != eoi; ++i) {
       BDE tier = BDE::list();
       tier << *i;
       announceList << tier;
@@ -944,10 +944,10 @@ std::string torrent2Magnet(const BDE& attrs)
   }
   if(attrs.containsKey(ANNOUNCE_LIST)) {
     const BDE& tiers = attrs[ANNOUNCE_LIST];
-    for(BDE::List::const_iterator tieriter = tiers.listBegin();
-        tieriter != tiers.listEnd(); ++tieriter) {
-      for(BDE::List::const_iterator uriiter = (*tieriter).listBegin();
-          uriiter != (*tieriter).listEnd(); ++uriiter) {
+    for(BDE::List::const_iterator tieriter = tiers.listBegin(),
+          eoi = tiers.listEnd(); tieriter != eoi; ++tieriter) {
+      for(BDE::List::const_iterator uriiter = (*tieriter).listBegin(),
+            eoi2 = (*tieriter).listEnd(); uriiter != eoi2; ++uriiter) {
         uri += "&tr=";
         uri += util::urlencode((*uriiter).s());
       }

+ 6 - 5
src/download_helper.cc

@@ -156,8 +156,8 @@ static void unfoldURI
 {
   ParameterizedStringParser p;
   PStringBuildVisitor v;
-  for(std::vector<std::string>::const_iterator itr = args.begin();
-      itr != args.end(); ++itr) {
+  for(std::vector<std::string>::const_iterator itr = args.begin(),
+        eoi = args.end(); itr != eoi; ++itr) {
     v.reset();
     p.parse(*itr)->accept(v);
     result.insert(result.end(), v.getURIs().begin(), v.getURIs().end()); 
@@ -221,8 +221,8 @@ createBtRequestGroup(const std::string& torrentFilePath,
   std::istringstream indexOutIn(option->get(PREF_INDEX_OUT));
   std::map<size_t, std::string> indexPathMap =
     util::createIndexPathMap(indexOutIn);
-  for(std::map<size_t, std::string>::const_iterator i = indexPathMap.begin();
-      i != indexPathMap.end(); ++i) {
+  for(std::map<size_t, std::string>::const_iterator i = indexPathMap.begin(),
+        eoi = indexPathMap.end(); i != eoi; ++i) {
     dctx->setFilePathWithIndex
       ((*i).first, util::applyDir(dctx->getDir(), (*i).second));
   }
@@ -431,7 +431,8 @@ static void createRequestGroupForUriList
 
     SharedHandle<Option> requestOption(new Option(*option.get()));
     for(std::set<std::string>::const_iterator i =
-          listRequestOptions().begin(); i != listRequestOptions().end(); ++i) {
+          listRequestOptions().begin(), eoi = listRequestOptions().end();
+        i != eoi; ++i) {
       if(tempOption->defined(*i)) {
         requestOption->put(*i, tempOption->get(*i));
       }

+ 2 - 2
src/magnet.cc

@@ -49,8 +49,8 @@ BDE parse(const std::string& magnet)
   util::split(std::string(magnet.begin()+8, magnet.end()),
               std::back_inserter(queries), "&");
   BDE dict = BDE::dict();
-  for(std::vector<std::string>::const_iterator i = queries.begin();
-      i != queries.end(); ++i) {
+  for(std::vector<std::string>::const_iterator i = queries.begin(),
+        eoi = queries.end(); i != eoi; ++i) {
     std::pair<std::string, std::string> kv;
     util::split(kv, *i, '=');
     std::string value = util::urldecode(kv.second);

+ 2 - 2
src/main.cc

@@ -135,8 +135,8 @@ static void showFiles
 (const std::vector<std::string>& uris, const SharedHandle<Option>& op)
 {
   ProtocolDetector dt;
-  for(std::vector<std::string>::const_iterator i = uris.begin();
-      i != uris.end(); ++i) {
+  for(std::vector<std::string>::const_iterator i = uris.begin(),
+        eoi = uris.end(); i != eoi; ++i) {
     printf(">>> ");
     printf(MSG_SHOW_FILES, (*i).c_str());
     printf("\n");

+ 2 - 2
src/messageDigest.cc

@@ -132,8 +132,8 @@ std::string MessageDigestContext::getSupportedAlgoString()
 {
   const DigestAlgoMap& allAlgos = getDigestAlgos();
   std::string algos;
-  for(DigestAlgoMap::const_iterator itr = allAlgos.begin();
-      itr != allAlgos.end(); ++itr) {
+  for(DigestAlgoMap::const_iterator itr = allAlgos.begin(),
+        eoi = allAlgos.end(); itr != eoi; ++itr) {
     algos += (*itr).first;
     algos += ", ";
   }

+ 21 - 17
src/util.cc

@@ -295,8 +295,8 @@ std::string torrentUrlencode(const std::string& target)
 
 std::string urldecode(const std::string& target) {
   std::string result;
-  for(std::string::const_iterator itr = target.begin();
-      itr != target.end(); ++itr) {
+  for(std::string::const_iterator itr = target.begin(), eoi = target.end();
+      itr != eoi; ++itr) {
     if(*itr == '%') {
       if(itr+1 != target.end() && itr+2 != target.end() &&
          isHexDigit(*(itr+1)) && isHexDigit(*(itr+2))) {
@@ -543,7 +543,7 @@ static void computeHeadPieces
     return;
   }
   for(std::vector<SharedHandle<FileEntry> >::const_iterator fi =
-        fileEntries.begin(); fi != fileEntries.end(); ++fi) {
+        fileEntries.begin(), eoi = fileEntries.end(); fi != eoi; ++fi) {
     if((*fi)->getLength() == 0) {
       continue;
     }
@@ -566,7 +566,7 @@ static void computeTailPieces
     return;
   }
   for(std::vector<SharedHandle<FileEntry> >::const_iterator fi =
-        fileEntries.begin(); fi != fileEntries.end(); ++fi) {
+        fileEntries.begin(), eoi = fileEntries.end(); fi != eoi; ++fi) {
     if((*fi)->getLength() == 0) {
       continue;
     }
@@ -589,8 +589,8 @@ void parsePrioritizePieceRange
   std::vector<size_t> indexes;
   std::vector<std::string> parts;
   split(src, std::back_inserter(parts), ",", true);
-  for(std::vector<std::string>::const_iterator i = parts.begin();
-      i != parts.end(); ++i) {
+  for(std::vector<std::string>::const_iterator i = parts.begin(),
+        eoi = parts.end(); i != eoi; ++i) {
     if((*i) == "head") {
       computeHeadPieces(indexes, fileEntries, pieceLength, defaultSize);
     } else if(util::startsWith(*i, "head=")) {
@@ -632,7 +632,8 @@ static std::string trimBasename(const std::string& src)
 std::string iso8859ToUtf8(const std::string& src)
 {
   std::string dest;
-  for(std::string::const_iterator itr = src.begin(); itr != src.end(); ++itr) {
+  for(std::string::const_iterator itr = src.begin(), eoi = src.end();
+      itr != eoi; ++itr) {
     unsigned char c = *itr;
     if(0xa0 <= c) {
       if(c <= 0xbf) {
@@ -655,14 +656,14 @@ std::string getContentDispositionFilename(const std::string& header)
   std::string filename;
   std::vector<std::string> params;
   split(header, std::back_inserter(params), A2STR::SEMICOLON_C, true);
-  for(std::vector<std::string>::iterator i = params.begin();
-      i != params.end(); ++i) {
-    std::string& param = *i;
+  for(std::vector<std::string>::const_iterator i = params.begin(),
+        eoi = params.end(); i != eoi; ++i) {
+    const std::string& param = *i;
     static const std::string keyName = "filename";
     if(!startsWith(toLower(param), keyName) || param.size() == keyName.size()) {
       continue;
     }
-    std::string::iterator markeritr = param.begin()+keyName.size();
+    std::string::const_iterator markeritr = param.begin()+keyName.size();
     if(*markeritr == '*') {
       // See RFC2231 Section4 and draft-reschke-rfc2231-in-http.
       // Please note that this function doesn't do charset conversion
@@ -683,8 +684,8 @@ std::string getContentDispositionFilename(const std::string& header)
       }
       bool bad = false;
       const std::string& charset = extValues[0];
-      for(std::string::const_iterator j = charset.begin(); j != charset.end();
-          ++j) {
+      for(std::string::const_iterator j = charset.begin(), eoi = charset.end();
+          j != eoi; ++j) {
         // Since we first split parameter by ', we can safely assume
         // that ' is not included in charset.
         if(!inRFC2978MIMECharset(*j)) {
@@ -697,7 +698,8 @@ std::string getContentDispositionFilename(const std::string& header)
       }
       bad = false;
       value = extValues[2];
-      for(std::string::const_iterator j = value.begin(); j != value.end(); ++j){
+      for(std::string::const_iterator j = value.begin(), eoi = value.end();
+          j != eoi; ++j){
         if(*j == '%') {
           if(j+1 != value.end() && isHexDigit(*(j+1)) &&
              j+2 != value.end() && isHexDigit(*(j+2))) {
@@ -909,7 +911,8 @@ bool isNumber(const std::string& what)
   if(what.empty()) {
     return false;
   }
-  for(std::string::const_iterator i = what.begin(); i != what.end(); ++i) {
+  for(std::string::const_iterator i = what.begin(), eoi = what.end();
+      i != eoi; ++i) {
     if(!isDigit(*i)) {
       return false;
     }
@@ -1040,7 +1043,8 @@ getNumericNameInfo(const struct sockaddr* sockaddr, socklen_t len)
 std::string htmlEscape(const std::string& src)
 {
   std::string dest;
-  for(std::string::const_iterator i = src.begin(); i != src.end(); ++i) {
+  for(std::string::const_iterator i = src.begin(), eoi = src.end();
+      i != eoi; ++i) {
     char ch = *i;
     if(ch == '<') {
       dest += "&lt;";
@@ -1168,7 +1172,7 @@ bool inPrivateAddress(const std::string& ipv4addr)
 
 bool detectDirTraversal(const std::string& s)
 {
-  for(std::string::const_iterator i = s.begin(); i != s.end(); ++i) {
+  for(std::string::const_iterator i = s.begin(), eoi = s.end(); i != eoi; ++i) {
     if(0x00 <= (*i) && (*i) <= 0x1f) {
       return true;
     }