Forráskód Böngészése

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 16 éve
szülő
commit
72e475dfde
81 módosított fájl, 426 hozzáadás és 367 törlés
  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>
 2010-02-28  Tatsuhiro Tsujikawa  <t-tujikawa@users.sourceforge.net>
 
 
 	Use vector instead of deque for containers which is used for
 	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));
                  std::mem_fun_ref(&URIResult::getURI));
 
 
   if(_logger->debug()) {
   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"
       _logger->debug("AdaptiveURISelector: will retry server with increased"
                      " timeout (%d s): %s",
                      " timeout (%d s): %s",
                      _requestGroup->getTimeout(), (*i).c_str());
                      _requestGroup->getTimeout(), (*i).c_str());
@@ -257,8 +257,8 @@ std::string AdaptiveURISelector::getMaxDownloadSpeedUri
 {
 {
   int max = -1;
   int max = -1;
   std::string uri = A2STR::NIL;
   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);
     SharedHandle<ServerStat> ss = getServerStats(*i);
     if(ss.isNull())
     if(ss.isNull())
       continue;
       continue;
@@ -279,8 +279,8 @@ std::deque<std::string> AdaptiveURISelector::getUrisBySpeed
 (const std::deque<std::string>& uris, unsigned int min) const
 (const std::deque<std::string>& uris, unsigned int min) const
 {
 {
   std::deque<std::string> bests;
   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);
     SharedHandle<ServerStat> ss = getServerStats(*i);
     if(ss.isNull())
     if(ss.isNull())
       continue;
       continue;
@@ -304,8 +304,8 @@ std::string AdaptiveURISelector::selectRandomUri
 std::string AdaptiveURISelector::getFirstNotTestedUri
 std::string AdaptiveURISelector::getFirstNotTestedUri
 (const std::deque<std::string>& uris) const
 (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);
     SharedHandle<ServerStat> ss = getServerStats(*i);
     if(ss.isNull())
     if(ss.isNull())
       return *i;
       return *i;
@@ -318,8 +318,8 @@ std::string AdaptiveURISelector::getFirstToTestUri
 {
 {
   unsigned int counter;
   unsigned int counter;
   int power;
   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);
     SharedHandle<ServerStat> ss = getServerStats(*i);
     if(ss.isNull())
     if(ss.isNull())
       continue;
       continue;
@@ -348,8 +348,8 @@ unsigned int AdaptiveURISelector::getNbTestedServers
 (const std::deque<std::string>& uris) const
 (const std::deque<std::string>& uris) const
 {
 {
   unsigned int counter = 0;
   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);
     SharedHandle<ServerStat> ss = getServerStats(*i);
     if(ss.isNull())
     if(ss.isNull())
       ++counter;
       ++counter;

+ 6 - 6
src/AnnounceList.cc

@@ -63,15 +63,15 @@ AnnounceList::AnnounceList
 void AnnounceList::reconfigure(const BDE& announceList)
 void AnnounceList::reconfigure(const BDE& announceList)
 {
 {
   if(announceList.isList()) {
   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;
       const BDE& elemList = *itr;
       if(!elemList.isList()) {
       if(!elemList.isList()) {
         continue;
         continue;
       }
       }
       std::deque<std::string> urls;
       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;
         const BDE& data = *elemItr;
         if(data.isString()) {
         if(data.isString()) {
           urls.push_back(data.s());
           urls.push_back(data.s());
@@ -242,8 +242,8 @@ void AnnounceList::moveToCompletedAllowedTier() {
 }
 }
 
 
 void AnnounceList::shuffle() {
 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::deque<std::string>& urls = (*itr)->urls;
     std::random_shuffle(urls.begin(), urls.end(),
     std::random_shuffle(urls.begin(), urls.end(),
                         *(SimpleRandomizer::getInstance().get()));
                         *(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
         // Copy file path in _dependant's FileEntries to newly created
         // context's FileEntries to endorse the path structure of
         // context's FileEntries to endorse the path structure of
         // _dependant.  URIs and singleHostMultiConnection are also copied.
         // _dependant.  URIs and singleHostMultiConnection are also copied.
+        std::vector<SharedHandle<FileEntry> >::const_iterator ctxFilesEnd =
+          fileEntries.end();
         for(std::vector<SharedHandle<FileEntry> >::const_iterator s =
         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 =
           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()) {
             if((*d)->getOriginalName() == (*s)->getOriginalName()) {
               break;
               break;
             }
             }
           }
           }
-          if(d == context->getFileEntries().end()) {
+          if(d == ctxFilesEnd) {
             throw DL_ABORT_EX
             throw DL_ABORT_EX
               (StringFormat("No entry %s in torrent file",
               (StringFormat("No entry %s in torrent file",
                             (*s)->getOriginalName().c_str()).str());
                             (*s)->getOriginalName().c_str()).str());

+ 2 - 2
src/BtLeecherStateChoke.cc

@@ -165,8 +165,8 @@ void BtLeecherStateChoke::regularUnchoke(std::vector<PeerEntry>& peerEntries)
   if(fastOptUnchoker) {
   if(fastOptUnchoker) {
     std::random_shuffle(peerIter, peerEntries.end(),
     std::random_shuffle(peerIter, peerEntries.end(),
                         *(SimpleRandomizer::getInstance().get()));
                         *(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()) {
       if((*i).getPeer()->peerInterested()) {
         (*i).enableOptUnchoking();
         (*i).enableOptUnchoking();
         _logger->info("OU: %s", (*i).getPeer()->ipaddr.c_str());
         _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
 BtRegistry::getDownloadContext(const std::string& infoHash) const
 {
 {
   SharedHandle<DownloadContext> dctx;
   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 =
     const BDE& attrs =
       (*i).second._downloadContext->getAttribute(bittorrent::BITTORRENT);
       (*i).second._downloadContext->getAttribute(bittorrent::BITTORRENT);
     if(attrs[bittorrent::INFO_HASH].s() == infoHash) {
     if(attrs[bittorrent::INFO_HASH].s() == infoHash) {

+ 2 - 2
src/BtRegistry.h

@@ -101,8 +101,8 @@ public:
   template<typename OutputIterator>
   template<typename OutputIterator>
   OutputIterator getAllDownloadContext(OutputIterator dest)
   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;
       *dest++ = (*i).second._downloadContext;
     }
     }
     return dest;
     return dest;

+ 2 - 1
src/BtSeederStateChoke.cc

@@ -90,7 +90,8 @@ void BtSeederStateChoke::unchoke
   std::sort(peers.begin(), peers.end());
   std::sort(peers.begin(), peers.end());
 
 
   std::vector<PeerEntry>::iterator r = peers.begin();
   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);
     (*r).getPeer()->chokingRequired(false);
     _logger->info("RU: %s, ulspd=%u", (*r).getPeer()->ipaddr.c_str(),
     _logger->info("RU: %s, ulspd=%u", (*r).getPeer()->ipaddr.c_str(),
                   (*r).getUploadSpeed());
                   (*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;
         std::vector<std::pair<sockaddr_storage, socklen_t> > ifAddrs;
         getInterfaceAddress(ifAddrs, lpdInterface, AF_INET, AI_NUMERICHOST);
         getInterfaceAddress(ifAddrs, lpdInterface, AF_INET, AI_NUMERICHOST);
         for(std::vector<std::pair<sockaddr_storage, socklen_t> >::const_iterator
         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;
           sockaddr_in addr;
           memcpy(&addr, &(*i).first, (*i).second);
           memcpy(&addr, &(*i).first, (*i).second);
           if(receiver->init(inet_ntoa(addr.sin_addr))) {
           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(), '=');
   util::split(nameValue, terms.front(), '=');
 
 
   std::map<std::string, std::string> values;
   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;
     std::pair<std::string, std::string> nv;
     util::split(nv, *itr, '=');
     util::split(nv, *itr, '=');
     values[nv.first] = nv.second;
     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
 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";
     o << (*i).toNsCookieFormat() << "\n";
   }
   }
 }
 }
@@ -256,7 +256,8 @@ std::vector<Cookie> CookieStorage::criteriaFind(const std::string& requestHost,
     std::string domain = A2STR::DOT_C;
     std::string domain = A2STR::DOT_C;
     domain += domainComponents[0];
     domain += domainComponents[0];
     for(std::vector<std::string>::const_iterator di =
     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);
       domain = strconcat(A2STR::DOT_C, *di, domain);
       searchCookieByDomainSuffix(domain, _domains.begin(), _domains.end(),
       searchCookieByDomainSuffix(domain, _domains.begin(), _domains.end(),
                                  std::back_inserter(res),
                                  std::back_inserter(res),
@@ -275,8 +276,8 @@ std::vector<Cookie> CookieStorage::criteriaFind(const std::string& requestHost,
 size_t CookieStorage::size() const
 size_t CookieStorage::size() const
 {
 {
   size_t numCookie = 0;
   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();
     numCookie += (*i).countCookie();
   }
   }
   return numCookie;
   return numCookie;
@@ -327,8 +328,8 @@ bool CookieStorage::saveNsFormat(const std::string& filename)
                      filename.c_str(), strerror(errno));
                      filename.c_str(), strerror(errno));
       return false;
       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);
       (*i).writeCookie(o);
     }
     }
     o.flush();
     o.flush();

+ 2 - 2
src/CookieStorage.h

@@ -173,8 +173,8 @@ public:
   template<typename OutputIterator>
   template<typename OutputIterator>
   OutputIterator dumpCookie(OutputIterator out) const
   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);
       out = (*i).dumpCookie(out);
     }
     }
     return out;
     return out;

+ 9 - 6
src/DHTAbstractNodeLookupTask.cc

@@ -33,6 +33,10 @@
  */
  */
 /* copyright --> */
 /* copyright --> */
 #include "DHTAbstractNodeLookupTask.h"
 #include "DHTAbstractNodeLookupTask.h"
+
+#include <cstring>
+#include <algorithm>
+
 #include "DHTRoutingTable.h"
 #include "DHTRoutingTable.h"
 #include "DHTMessageDispatcher.h"
 #include "DHTMessageDispatcher.h"
 #include "DHTMessageFactory.h"
 #include "DHTMessageFactory.h"
@@ -44,8 +48,6 @@
 #include "Logger.h"
 #include "Logger.h"
 #include "util.h"
 #include "util.h"
 #include "DHTIDCloser.h"
 #include "DHTIDCloser.h"
-#include <cstring>
-#include <algorithm>
 
 
 namespace aria2 {
 namespace aria2 {
 
 
@@ -66,7 +68,7 @@ void DHTAbstractNodeLookupTask::onReceived(const SharedHandle<DHTMessage>& messa
 
 
   size_t count = 0;
   size_t count = 0;
   for(std::vector<SharedHandle<DHTNodeLookupEntry> >::const_iterator i =
   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) {
     if(memcmp(_localNode->getID(), (*i)->_node->getID(), DHT_ID_LENGTH) != 0) {
       _entries.push_front(*i);
       _entries.push_front(*i);
       ++count;
       ++count;
@@ -98,7 +100,8 @@ void DHTAbstractNodeLookupTask::onTimeout(const SharedHandle<DHTNode>& node)
                    util::toHex(node->getID(), DHT_ID_LENGTH).c_str());
                    util::toHex(node->getID(), DHT_ID_LENGTH).c_str());
   }
   }
   --_inFlightMessage;
   --_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) {
     if((*i)->_node == node) {
       _entries.erase(i);
       _entries.erase(i);
       break;
       break;
@@ -132,8 +135,8 @@ void DHTAbstractNodeLookupTask::sendMessageAndCheckFinish()
 void DHTAbstractNodeLookupTask::sendMessage()
 void DHTAbstractNodeLookupTask::sendMessage()
 {
 {
   for(std::deque<SharedHandle<DHTNodeLookupEntry> >::iterator i =
   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) {
     if((*i)->_used == false) {
       ++_inFlightMessage;
       ++_inFlightMessage;
       (*i)->_used = true;
       (*i)->_used = true;

+ 2 - 2
src/DHTAbstractNodeLookupTask.h

@@ -61,8 +61,8 @@ protected:
   void toEntries
   void toEntries
   (Container& entries, const std::vector<SharedHandle<DHTNode> >& nodes) const
   (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));
       SharedHandle<DHTNodeLookupEntry> e(new DHTNodeLookupEntry(*i));
       entries.push_back(e);
       entries.push_back(e);
     }
     }

+ 2 - 2
src/DHTAutoSaveCommand.cc

@@ -101,8 +101,8 @@ void DHTAutoSaveCommand::save()
   std::vector<SharedHandle<DHTNode> > nodes;
   std::vector<SharedHandle<DHTNode> > nodes;
   std::vector<SharedHandle<DHTBucket> > buckets;
   std::vector<SharedHandle<DHTBucket> > buckets;
   _routingTable->getBuckets(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;
     const SharedHandle<DHTBucket>& bucket = *i;
     std::vector<SharedHandle<DHTNode> > goodNodes;
     std::vector<SharedHandle<DHTNode> > goodNodes;
     bucket->getGoodNodes(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)
 bool DHTBucket::addNode(const SharedHandle<DHTNode>& node)
 {
 {
   notifyUpdate();
   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(itr == _nodes.end()) {
     if(_nodes.size() < K) {
     if(_nodes.size() < K) {
       _nodes.push_back(node);
       _nodes.push_back(node);
@@ -140,7 +141,8 @@ void DHTBucket::cacheNode(const SharedHandle<DHTNode>& node)
 void DHTBucket::dropNode(const SharedHandle<DHTNode>& node)
 void DHTBucket::dropNode(const SharedHandle<DHTNode>& node)
 {
 {
   if(_cachedNodes.size()) {
   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()) {
     if(itr != _nodes.end()) {
       _nodes.erase(itr);
       _nodes.erase(itr);
       _nodes.push_back(_cachedNodes.front());
       _nodes.push_back(_cachedNodes.front());
@@ -191,8 +193,8 @@ SharedHandle<DHTBucket> DHTBucket::split()
                                                 rMax, rMin, _localNode));
                                                 rMax, rMin, _localNode));
 
 
   std::deque<SharedHandle<DHTNode> > lNodes;
   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)) {
     if(rBucket->isInRange(*i)) {
       assert(rBucket->addNode(*i));
       assert(rBucket->addNode(*i));
     } else {
     } else {

+ 2 - 2
src/DHTBucketRefreshTask.cc

@@ -53,8 +53,8 @@ void DHTBucketRefreshTask::startup()
 {
 {
   std::vector<SharedHandle<DHTBucket> > buckets;
   std::vector<SharedHandle<DHTBucket> > buckets;
   _routingTable->getBuckets(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()) {
     if(_forceRefresh || (*i)->needsRefresh()) {
       (*i)->notifyUpdate();
       (*i)->notifyUpdate();
       unsigned char targetID[DHT_ID_LENGTH];
       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(),
   std::random_shuffle(randPorts.begin(), randPorts.end(),
                       *SimpleRandomizer::getInstance().get());
                       *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)) {
     if(!(0 < (*portItr) && (*portItr) <= 65535)) {
       continue;
       continue;
     }
     }

+ 4 - 4
src/DHTFindNodeReplyMessage.cc

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

+ 5 - 4
src/DHTGetPeersReplyMessage.cc

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

+ 2 - 2
src/DHTMessageFactoryImpl.cc

@@ -416,8 +416,8 @@ DHTMessageFactoryImpl::createGetPeersReplyMessageWithValues
   const BDE& valuesList = getList(rDict,
   const BDE& valuesList = getList(rDict,
                                   DHTGetPeersReplyMessage::VALUES);
                                   DHTGetPeersReplyMessage::VALUES);
   std::vector<SharedHandle<Peer> > peers;
   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;
     const BDE& data = *i;
     if(data.isString() && data.s().size() == 6) {
     if(data.isString() && data.s().size() == 6) {
       std::pair<std::string, uint16_t> addr =
       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);
                    util::toHex(tid.s()).c_str(), ipaddr.c_str(), port);
   }
   }
   for(std::deque<SharedHandle<DHTMessageTrackerEntry> >::iterator i =
   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)) {
     if((*i)->match(tid.s(), ipaddr, port)) {
       SharedHandle<DHTMessageTrackerEntry> entry = *i;
       SharedHandle<DHTMessageTrackerEntry> entry = *i;
       _entries.erase(i);
       _entries.erase(i);
@@ -113,12 +113,13 @@ DHTMessageTracker::messageArrived(const BDE& dict,
 
 
 void DHTMessageTracker::handleTimeout()
 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()) {
     if((*i)->isTimeout()) {
       try {
       try {
         SharedHandle<DHTMessageTrackerEntry> entry = *i;
         SharedHandle<DHTMessageTrackerEntry> entry = *i;
         i = _entries.erase(i);
         i = _entries.erase(i);
+        eoi = _entries.end();
         SharedHandle<DHTNode> node = entry->getTargetNode();
         SharedHandle<DHTNode> node = entry->getTargetNode();
         if(_logger->debug()) {
         if(_logger->debug()) {
           _logger->debug("Message timeout: To:%s:%u",
           _logger->debug("Message timeout: To:%s:%u",
@@ -149,9 +150,11 @@ void DHTMessageTracker::handleTimeout()
 SharedHandle<DHTMessageTrackerEntry>
 SharedHandle<DHTMessageTrackerEntry>
 DHTMessageTracker::getEntryFor(const SharedHandle<DHTMessage>& message) const
 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;
       return *i;
     }
     }
   }
   }

+ 2 - 2
src/DHTPeerAnnounceEntry.cc

@@ -95,8 +95,8 @@ bool DHTPeerAnnounceEntry::empty() const
 void DHTPeerAnnounceEntry::getPeers
 void DHTPeerAnnounceEntry::getPeers
 (std::vector<SharedHandle<Peer> >& peers) const
 (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()));
     SharedHandle<Peer> peer(new Peer((*i).getIPAddress(), (*i).getPort()));
     peers.push_back(peer);
     peers.push_back(peer);
   }
   }

+ 4 - 2
src/DHTPeerAnnounceStorage.cc

@@ -145,10 +145,12 @@ void DHTPeerAnnounceStorage::announcePeer()
   if(_logger->debug()) {
   if(_logger->debug()) {
     _logger->debug("Now announcing peer.");
     _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)) {
     if((*i)->getLastUpdated().elapsed(DHT_PEER_ANNOUNCE_INTERVAL)) {
       (*i)->notifyUpdate();
       (*i)->notifyUpdate();
-      SharedHandle<DHTTask> task = _taskFactory->createPeerAnnounceTask((*i)->getInfoHash());
+      SharedHandle<DHTTask> task =
+        _taskFactory->createPeerAnnounceTask((*i)->getInfoHash());
       _taskQueue->addPeriodicTask2(task);
       _taskQueue->addPeriodicTask2(task);
       if(_logger->debug()) {
       if(_logger->debug()) {
         _logger->debug("Added 1 peer announce: infoHash=%s",
         _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
   // send announce_peer message to K closest nodes
   size_t num = DHTBucket::K;
   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) {
     if((*i)->_used) {
       const SharedHandle<DHTNode>& node = (*i)->_node;
       const SharedHandle<DHTNode>& node = (*i)->_node;
       SharedHandle<DHTMessage> m = 
       SharedHandle<DHTMessage> m = 

+ 2 - 2
src/DHTRoutingTableSerializer.cc

@@ -101,8 +101,8 @@ void DHTRoutingTableSerializer::serialize(std::ostream& o)
   o.write(zero, 4);
   o.write(zero, 4);
 
 
   // nodes
   // 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;
     const SharedHandle<DHTNode>& node = *i;
     // Currently, only IPv4 address and IPv4-mapped address are saved.
     // Currently, only IPv4 address and IPv4-mapped address are saved.
     // 6bytes: write IP address + port in Compact IP-address/port info form.
     // 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 =
     const std::vector<SharedHandle<DHTNode> >& desnodes =
       deserializer.getNodes();
       deserializer.getNodes();
     for(std::vector<SharedHandle<DHTNode> >::const_iterator i =
     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);
       routingTable->addNode(*i);
     }
     }
     if(!desnodes.empty() && deserializer.getSerializedTime().elapsed(DHT_BUCKET_REFRESH_INTERVAL)) {
     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)
     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) {
         if((*i)._addr == addr) {
           return i;
           return i;
         }
         }
@@ -82,8 +82,8 @@ private:
 
 
     std::vector<AddrEntry>::const_iterator find(const std::string& addr) const
     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) {
         if((*i)._addr == addr) {
           return i;
           return i;
         }
         }
@@ -98,8 +98,8 @@ private:
 
 
     const std::string& getGoodAddr() const
     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) {
         if((*i)._good) {
           return (*i)._addr;
           return (*i)._addr;
         }
         }
@@ -110,8 +110,8 @@ private:
     template<typename OutputIterator>
     template<typename OutputIterator>
     void getAllGoodAddrs(OutputIterator out) const
     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) {
         if((*i)._good) {
           *out++ = (*i)._addr;
           *out++ = (*i)._addr;
         }
         }

+ 12 - 10
src/DefaultBtInteractive.cc

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

+ 1 - 1
src/DefaultBtMessageDispatcher.cc

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

+ 2 - 2
src/DefaultBtProgressInfoFile.cc

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

+ 11 - 10
src/DefaultBtRequestFactory.cc

@@ -142,8 +142,8 @@ void DefaultBtRequestFactory::doChokedAction()
 }
 }
 
 
 void DefaultBtRequestFactory::removeAllTargetPiece() {
 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);
     dispatcher->doAbortOutstandingRequestAction(*itr);
     _pieceStorage->cancelPiece(*itr);
     _pieceStorage->cancelPiece(*itr);
   }
   }
@@ -159,13 +159,13 @@ void DefaultBtRequestFactory::createRequestMessages
   size_t getnum = max-requests.size();
   size_t getnum = max-requests.size();
   std::vector<size_t> blockIndexes;
   std::vector<size_t> blockIndexes;
   blockIndexes.reserve(getnum);
   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;
     SharedHandle<Piece>& piece = *itr;
     if(piece->getMissingUnusedBlockIndex(blockIndexes, getnum)) {
     if(piece->getMissingUnusedBlockIndex(blockIndexes, getnum)) {
       getnum -= blockIndexes.size();
       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()) {
         if(_logger->debug()) {
           _logger->debug("Creating RequestMessage index=%u, begin=%u,"
           _logger->debug("Creating RequestMessage index=%u, begin=%u,"
                          " blockIndex=%u",
                          " blockIndex=%u",
@@ -184,8 +184,8 @@ void DefaultBtRequestFactory::createRequestMessages
 void DefaultBtRequestFactory::createRequestMessagesOnEndGame
 void DefaultBtRequestFactory::createRequestMessagesOnEndGame
 (std::vector<SharedHandle<BtMessage> >& requests, size_t max)
 (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;
     SharedHandle<Piece>& piece = *itr;
     const size_t mislen = piece->getBitfieldLength();
     const size_t mislen = piece->getBitfieldLength();
     array_ptr<unsigned char> misbitfield(new unsigned char[mislen]);
     array_ptr<unsigned char> misbitfield(new unsigned char[mislen]);
@@ -205,8 +205,9 @@ void DefaultBtRequestFactory::createRequestMessagesOnEndGame
     }
     }
     std::random_shuffle(missingBlockIndexes.begin(), missingBlockIndexes.end(),
     std::random_shuffle(missingBlockIndexes.begin(), missingBlockIndexes.end(),
                         *(SimpleRandomizer::getInstance().get()));
                         *(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;
       const size_t& blockIndex = *bitr;
       if(!dispatcher->isOutstandingRequest(piece->getIndex(),
       if(!dispatcher->isOutstandingRequest(piece->getIndex(),
                                            blockIndex)) {
                                            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)
 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;
     const SharedHandle<Peer>& peer = *itr;
     if(addPeer(peer)) {
     if(addPeer(peer)) {
       if(logger->debug()) {
       if(logger->debug()) {
@@ -224,7 +224,7 @@ TransferStat DefaultPeerStorage::calculateStat()
     struct timeval now;
     struct timeval now;
     gettimeofday(&now, 0);
     gettimeofday(&now, 0);
     for(std::vector<SharedHandle<Peer> >::const_iterator i =
     for(std::vector<SharedHandle<Peer> >::const_iterator i =
-          activePeers.begin(); i != activePeers.end(); ++i) {
+          activePeers.begin(), eoi = activePeers.end(); i != eoi; ++i) {
       TransferStat s;
       TransferStat s;
       s.downloadSpeed = (*i)->calculateDownloadSpeed(now);
       s.downloadSpeed = (*i)->calculateDownloadSpeed(now);
       s.uploadSpeed = (*i)->calculateUploadSpeed(now);
       s.uploadSpeed = (*i)->calculateUploadSpeed(now);
@@ -267,8 +267,8 @@ TransferStat DefaultPeerStorage::getTransferStatFor
 
 
 void DefaultPeerStorage::deleteUnusedPeer(size_t delSize) {
 void DefaultPeerStorage::deleteUnusedPeer(size_t delSize) {
   std::deque<SharedHandle<Peer> > temp;
   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;
     const SharedHandle<Peer>& p = *itr;
     if(p->unused() && delSize > 0) {
     if(p->unused() && delSize > 0) {
       onErasingPeer(p);
       onErasingPeer(p);

+ 7 - 6
src/DefaultPieceStorage.cc

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

+ 3 - 2
src/DownloadContext.cc

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

+ 7 - 7
src/DownloadEngine.cc

@@ -282,7 +282,7 @@ void DownloadEngine::poolSocket(const std::string& ipaddr,
     }
     }
     _lastSocketPoolScan.reset();
     _lastSocketPoolScan.reset();
     for(std::multimap<std::string, SocketPoolEntry>::iterator i =
     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()) {
       if(!(*i).second.isTimeout()) {
         newPool.insert(*i);
         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::pair<std::multimap<std::string, SocketPoolEntry>::iterator,
     std::multimap<std::string, SocketPoolEntry>::iterator> range =
     std::multimap<std::string, SocketPoolEntry>::iterator> range =
     _socketPool.equal_range(addr);
     _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;
     const SocketPoolEntry& e = (*i).second;
     if(!e.isTimeout()) {
     if(!e.isTimeout()) {
       logger->info("Found socket for %s", addr.c_str());
       logger->info("Found socket for %s", addr.c_str());
@@ -401,8 +401,8 @@ DownloadEngine::popPooledSocket
 (const std::vector<std::string>& ipaddrs, uint16_t port)
 (const std::vector<std::string>& ipaddrs, uint16_t port)
 {
 {
   SharedHandle<SocketCore> s;
   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);
     s = popPooledSocket(*i, port);
     if(!s.isNull()) {
     if(!s.isNull()) {
       break;
       break;
@@ -417,8 +417,8 @@ DownloadEngine::popPooledSocket
  const std::vector<std::string>& ipaddrs, uint16_t port)
  const std::vector<std::string>& ipaddrs, uint16_t port)
 {
 {
   SharedHandle<SocketCore> s;
   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);
     s = popPooledSocket(options, *i, port);
     if(!s.isNull()) {
     if(!s.isNull()) {
       break;
       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
   // their API. So we call ares_process_fd for all ares_channel and
   // re-register their sockets.
   // re-register their sockets.
   for(std::deque<SharedHandle<AsyncNameResolverEntry> >::iterator i =
   for(std::deque<SharedHandle<AsyncNameResolverEntry> >::iterator i =
-        _nameResolverEntries.begin(); i != _nameResolverEntries.end(); ++i) {
+        _nameResolverEntries.begin(), eoi = _nameResolverEntries.end();
+      i != eoi; ++i) {
     (*i)->processTimeout();
     (*i)->processTimeout();
     (*i)->removeSocketEvents(this);
     (*i)->removeSocketEvents(this);
     (*i)->addSocketEvents(this);
     (*i)->addSocketEvents(this);

+ 2 - 2
src/ExtensionMessageRegistry.h

@@ -72,8 +72,8 @@ public:
 
 
   const std::string& getExtensionName(uint8_t id) const
   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;
       const Extensions::value_type& p = *itr;
       if(p.second == id) {
       if(p.second == id) {
         return p.first;
         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 FeatureConfig::featureSummary() const
 {
 {
   std::string s;
   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) {
     if((*i).second) {
       s += (*i).first;
       s += (*i).first;
       s += ", ";
       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));
   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::string>::iterator urisLast = uris.begin()+max;
   std::deque<std::pair<SharedHandle<ServerStat>, std::string> > cands;
   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;
     Request r;
     r.setUrl(*i);
     r.setUrl(*i);
     SharedHandle<ServerStat> ss = _serverStatMan->find(r.getHost(),
     SharedHandle<ServerStat> ss = _serverStatMan->find(r.getHost(),
@@ -84,8 +84,8 @@ std::string FeedbackURISelector::select(FileEntry* fileEntry)
     }
     }
   }
   }
   if(cands.empty()) {
   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;
       Request r;
       r.setUrl(*i);
       r.setUrl(*i);
       SharedHandle<ServerStat> ss = _serverStatMan->find(r.getHost(),
       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)) {
   if(util::startsWith(name, A2STR::SLASH_C)) {
     accDir = 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;
     accDir += *itr;
     if(File(accDir).isDir()) {
     if(File(accDir).isDir()) {
       continue;
       continue;

+ 4 - 2
src/FileEntry.cc

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

+ 2 - 2
src/HandleRegistry.h

@@ -72,8 +72,8 @@ public:
   std::vector<SharedHandle<T> > getAll()
   std::vector<SharedHandle<T> > getAll()
   {
   {
     std::vector<SharedHandle<T> > l;
     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;
       const typename HandleMap::value_type& p = *itr;
       l.push_back(p.second);
       l.push_back(p.second);
     }
     }

+ 8 - 8
src/HandshakeExtensionMessage.cc

@@ -67,8 +67,8 @@ std::string HandshakeExtensionMessage::getPayload()
     dict["p"] = _tcpPort;
     dict["p"] = _tcpPort;
   }
   }
   BDE extDict = BDE::dict();
   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;
     const std::map<std::string, uint8_t>::value_type& vt = *itr;
     extDict[vt.first] = vt.second;
     extDict[vt.first] = vt.second;
   }
   }
@@ -91,8 +91,8 @@ std::string HandshakeExtensionMessage::toString() const
   if(_metadataSize) {
   if(_metadataSize) {
     strappend(s, ", metadataSize=", util::uitos(_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;
     const std::map<std::string, uint8_t>::value_type& vt = *itr;
     strappend(s, ", ", vt.first, "=", util::uitos(vt.second));
     strappend(s, ", ", vt.first, "=", util::uitos(vt.second));
   }
   }
@@ -105,8 +105,8 @@ void HandshakeExtensionMessage::doReceivedAction()
     _peer->port = _tcpPort;
     _peer->port = _tcpPort;
     _peer->setIncomingPeer(false);
     _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;
     const std::map<std::string, uint8_t>::value_type& vt = *itr;
     _peer->setExtension(vt.first, vt.second);
     _peer->setExtension(vt.first, vt.second);
   }
   }
@@ -182,8 +182,8 @@ HandshakeExtensionMessage::create(const unsigned char* data, size_t length)
   }
   }
   const BDE& extDict = dict["m"];
   const BDE& extDict = dict["m"];
   if(extDict.isDict()) {
   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()) {
       if((*i).second.isInteger()) {
         msg->_extensions[(*i).first] = (*i).second.i();
         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
 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();
     SharedHandle<HttpRequest> httpRequest = (*itr)->getHttpRequest();
     if(httpRequest->getSegment() == segment) {
     if(httpRequest->getSegment() == segment) {
       return true;
       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 {
 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()) {
   if(itr == table.end()) {
     return A2STR::NIL;
     return A2STR::NIL;
   } else {
   } else {

+ 5 - 5
src/HttpRequest.cc

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

+ 2 - 2
src/HttpRequestCommand.cc

@@ -134,8 +134,8 @@ bool HttpRequestCommand::executeInternal() {
                            _proxyRequest));
                            _proxyRequest));
       _httpConnection->sendRequest(httpRequest);
       _httpConnection->sendRequest(httpRequest);
     } else {
     } 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;
         const SharedHandle<Segment>& segment = *itr;
         if(!_httpConnection->isIssued(segment)) {
         if(!_httpConnection->isIssued(segment)) {
           SharedHandle<HttpRequest> httpRequest
           SharedHandle<HttpRequest> httpRequest

+ 2 - 2
src/HttpResponse.cc

@@ -114,8 +114,8 @@ std::string HttpResponse::determinFilename() const
 void HttpResponse::retrieveCookie()
 void HttpResponse::retrieveCookie()
 {
 {
   std::vector<std::string> v = httpHeader->get(HttpHeader::SET_COOKIE);
   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->getCookieStorage()->parseAndStore(*itr,
                                                    httpRequest->getHost(),
                                                    httpRequest->getHost(),
                                                    httpRequest->getDir());
                                                    httpRequest->getDir());

+ 2 - 2
src/InitiateConnectionCommand.cc

@@ -107,8 +107,8 @@ bool InitiateConnectionCommand::executeInternal() {
     logger->info(MSG_NAME_RESOLUTION_COMPLETE, cuid,
     logger->info(MSG_NAME_RESOLUTION_COMPLETE, cuid,
                  hostname.c_str(),
                  hostname.c_str(),
                  strjoin(addrs.begin(), addrs.end(), ", ").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);
       e->cacheIPAddress(hostname, *i, port);
     }
     }
     ipaddr = e->findCachedIPAddress(hostname, port);
     ipaddr = e->findCachedIPAddress(hostname, port);

+ 2 - 1
src/MSEHandshake.cc

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

+ 8 - 8
src/Metalink2RequestGroup.cc

@@ -128,8 +128,9 @@ namespace {
 void removeMetalinkContentTypes(const SharedHandle<RequestGroup>& group)
 void removeMetalinkContentTypes(const SharedHandle<RequestGroup>& group)
 {
 {
   for(std::vector<std::string>::const_iterator i =
   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);
     group->removeAcceptType(*i);
   }
   }
 }
 }
@@ -148,9 +149,6 @@ Metalink2RequestGroup::createRequestGroup
   std::vector<int32_t> selectIndexes =
   std::vector<int32_t> selectIndexes =
     util::parseIntRange(option->get(PREF_SELECT_FILE)).flush();
     util::parseIntRange(option->get(PREF_SELECT_FILE)).flush();
   std::sort(selectIndexes.begin(), selectIndexes.end());
   std::sort(selectIndexes.begin(), selectIndexes.end());
-  std::vector<SharedHandle<MetalinkEntry> > selectedEntries;
-  selectedEntries.reserve(entries.size());
-
   std::vector<std::string> locations;
   std::vector<std::string> locations;
   if(option->defined(PREF_METALINK_LOCATION)) {
   if(option->defined(PREF_METALINK_LOCATION)) {
     util::split(option->get(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) {
   if(option->get(PREF_METALINK_PREFERRED_PROTOCOL) != V_NONE) {
     preferredProtocol = option->get(PREF_METALINK_PREFERRED_PROTOCOL);
     preferredProtocol = option->get(PREF_METALINK_PREFERRED_PROTOCOL);
   }
   }
+  std::vector<SharedHandle<MetalinkEntry> > selectedEntries;
+  selectedEntries.reserve(entries.size());
   {
   {
     int32_t count = 1;
     int32_t count = 1;
     for(std::vector<SharedHandle<MetalinkEntry> >::const_iterator i =
     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();
       (*i)->dropUnsupportedResource();
       if((*i)->resources.empty() && (*i)->metaurls.empty()) {
       if((*i)->resources.empty() && (*i)->metaurls.empty()) {
         continue;
         continue;
@@ -189,7 +189,7 @@ Metalink2RequestGroup::createRequestGroup
   MetalinkHelper::groupEntryByMetaurlName(entryGroups, selectedEntries);
   MetalinkHelper::groupEntryByMetaurlName(entryGroups, selectedEntries);
   for(std::vector<std::pair<std::string,
   for(std::vector<std::pair<std::string,
         std::vector<SharedHandle<MetalinkEntry> > > >::const_iterator itr =
         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::string& metaurl = (*itr).first;
     const std::vector<SharedHandle<MetalinkEntry> >& mes = (*itr).second;
     const std::vector<SharedHandle<MetalinkEntry> >& mes = (*itr).second;
     _logger->info("Processing metaurl group metaurl=%s", metaurl.c_str());
     _logger->info("Processing metaurl group metaurl=%s", metaurl.c_str());
@@ -279,7 +279,7 @@ Metalink2RequestGroup::createRequestGroup
       std::vector<SharedHandle<FileEntry> > fileEntries;
       std::vector<SharedHandle<FileEntry> > fileEntries;
       off_t offset = 0;
       off_t offset = 0;
       for(std::vector<SharedHandle<MetalinkEntry> >::const_iterator i =
       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.",
         _logger->info("Metalink: Queueing %s for download as a member.",
                       (*i)->getPath().c_str());
                       (*i)->getPath().c_str());
         _logger->debug("originalName = %s", (*i)->metaurls[0]->name.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)
  const std::vector<SharedHandle<MetalinkEntry> >& entries)
 {
 {
   for(std::vector<SharedHandle<MetalinkEntry> >::const_iterator eiter =
   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()) {
     if((*eiter)->metaurls.empty()) {
       std::pair<std::string, std::vector<SharedHandle<MetalinkEntry> > > p;
       std::pair<std::string, std::vector<SharedHandle<MetalinkEntry> > > p;
       p.second.push_back(*eiter);
       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 =
   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
     diskWriterEntries.push_back
       (createDiskWriterEntry(*i, (*i)->isRequested()));
       (createDiskWriterEntry(*i, (*i)->isRequested()));
   }
   }
@@ -176,10 +176,11 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
 
 
   // TODO Currently, pieceLength == 0 is used for unit testing only.
   // TODO Currently, pieceLength == 0 is used for unit testing only.
   if(pieceLength > 0) {
   if(pieceLength > 0) {
-    std::vector<SharedHandle<DiskWriterEntry> >::iterator done =
+    std::vector<SharedHandle<DiskWriterEntry> >::const_iterator done =
       diskWriterEntries.begin();
       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();
       const SharedHandle<FileEntry>& fileEntry = (*itr)->getFileEntry();
 
 
       if(!fileEntry->isRequested()) {
       if(!fileEntry->isRequested()) {
@@ -189,7 +190,7 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
       off_t pieceStartOffset =
       off_t pieceStartOffset =
         (fileEntry->getOffset()/pieceLength)*pieceLength;
         (fileEntry->getOffset()/pieceLength)*pieceLength;
       if(itr != diskWriterEntries.begin()) {
       if(itr != diskWriterEntries.begin()) {
-        for(std::vector<SharedHandle<DiskWriterEntry> >::iterator i =
+        for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
               itr-1; true; --i) {
               itr-1; true; --i) {
           const SharedHandle<FileEntry>& fileEntry = (*i)->getFileEntry();
           const SharedHandle<FileEntry>& fileEntry = (*i)->getFileEntry();
           if(pieceStartOffset <= fileEntry->getOffset() ||
           if(pieceStartOffset <= fileEntry->getOffset() ||
@@ -217,7 +218,7 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
         ++itr;
         ++itr;
         // adjacent backward files are not needed to be allocated. They
         // adjacent backward files are not needed to be allocated. They
         // just requre DiskWriter
         // just requre DiskWriter
-        for(; itr != diskWriterEntries.end() &&
+        for(; itr != eoi &&
               (!(*itr)->getFileEntry()->isRequested() ||
               (!(*itr)->getFileEntry()->isRequested() ||
                (*itr)->getFileEntry()->getLength() == 0); ++itr) {
                (*itr)->getFileEntry()->getLength() == 0); ++itr) {
           if(logger->debug()) {
           if(logger->debug()) {
@@ -244,8 +245,9 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
     }
     }
   }
   }
   DefaultDiskWriterFactory dwFactory;
   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() ||
     if((*i)->needsFileAllocation() ||
        dwreq.find((*i)->getFileEntry()->getPath()) != dwreq.end() ||
        dwreq.find((*i)->getFileEntry()->getPath()) != dwreq.end() ||
        (*i)->fileExists()) {
        (*i)->fileExists()) {
@@ -267,7 +269,8 @@ void MultiDiskAdaptor::resetDiskWriterEntries()
 void MultiDiskAdaptor::mkdir() const
 void MultiDiskAdaptor::mkdir() const
 {
 {
   for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
   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();
     (*i)->getFileEntry()->setupDir();
   }
   }
 }
 }
@@ -305,8 +308,8 @@ void MultiDiskAdaptor::openFile()
   mkdir();
   mkdir();
   // Call DiskWriterEntry::openFile to make sure that zero-length files are
   // Call DiskWriterEntry::openFile to make sure that zero-length files are
   // created.
   // 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);
     openIfNot(*itr, &DiskWriterEntry::openFile);
   }
   }
 }
 }
@@ -316,8 +319,8 @@ void MultiDiskAdaptor::initAndOpenFile()
   resetDiskWriterEntries();
   resetDiskWriterEntries();
   mkdir();
   mkdir();
   // Call DiskWriterEntry::initAndOpenFile to make files truncated.
   // 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);
     openIfNot(*itr, &DiskWriterEntry::initAndOpenFile);
   }
   }
 }
 }
@@ -330,8 +333,8 @@ void MultiDiskAdaptor::openExistingFile()
 
 
 void MultiDiskAdaptor::closeFile()
 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();
     (*itr)->closeFile();
   }
   }
 }
 }
@@ -396,7 +399,8 @@ void MultiDiskAdaptor::writeData(const unsigned char* data, size_t len,
 
 
   size_t rem = len;
   size_t rem = len;
   off_t fileOffset = offset-(*first)->getFileEntry()->getOffset();
   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);
     size_t writeLength = calculateLength(*i, fileOffset, rem);
 
 
     openIfNot(*i, &DiskWriterEntry::openFile);
     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)
 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 rem = len;
   size_t totalReadLength = 0;
   size_t totalReadLength = 0;
   off_t fileOffset = offset-(*first)->getFileEntry()->getOffset();
   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);
     size_t readLength = calculateLength(*i, fileOffset, rem);
 
 
     openIfNot(*i, &DiskWriterEntry::openFile);
     openIfNot(*i, &DiskWriterEntry::openFile);
@@ -443,8 +449,8 @@ ssize_t MultiDiskAdaptor::readData(unsigned char* data, size_t len, off_t offset
 
 
 bool MultiDiskAdaptor::fileExists()
 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()) {
     if((*i)->exists()) {
       return true;
       return true;
     }
     }
@@ -455,8 +461,8 @@ bool MultiDiskAdaptor::fileExists()
 uint64_t MultiDiskAdaptor::size()
 uint64_t MultiDiskAdaptor::size()
 {
 {
   uint64_t size = 0;
   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();
     size += File((*i)->getPath()).size();
   }
   }
   return size;
   return size;
@@ -469,16 +475,16 @@ FileAllocationIteratorHandle MultiDiskAdaptor::fileAllocationIterator()
 
 
 void MultiDiskAdaptor::enableDirectIO()
 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();
     (*itr)->enableDirectIO();
   }
   }
 }
 }
 
 
 void MultiDiskAdaptor::disableDirectIO()
 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();
     (*itr)->disableDirectIO();
   }
   }
 }
 }
@@ -496,7 +502,8 @@ void MultiDiskAdaptor::disableReadOnly()
 void MultiDiskAdaptor::cutTrailingGarbage()
 void MultiDiskAdaptor::cutTrailingGarbage()
 {
 {
   for(std::vector<SharedHandle<DiskWriterEntry> >::const_iterator i =
   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();
     uint64_t length = (*i)->getFileEntry()->getLength();
     if(File((*i)->getFilePath()).size() > length) {
     if(File((*i)->getFilePath()).size() > length) {
       // We need open file before calling DiskWriter::truncate(uint64_t)
       // 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;
   size_t numOK = 0;
   for(std::vector<SharedHandle<FileEntry> >::const_iterator i =
   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()) {
     if((*i)->isRequested()) {
       File f((*i)->getPath());
       File f((*i)->getPath());
       if(f.isFile() && f.utime(actime, modtime)) {
       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;
     std::vector<std::string> tokens;
     util::split(line, std::back_inserter(tokens), " \t", true);
     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;
       const std::string& token = *iter;
       if(state == GET_TOKEN) {
       if(state == GET_TOKEN) {
         if(token == Netrc::MACHINE) {
         if(token == Netrc::MACHINE) {

+ 2 - 2
src/OptionHandlerImpl.h

@@ -480,8 +480,8 @@ public:
         msg += "''";
         msg += "''";
       } else {
       } else {
         for(std::vector<std::string>::const_iterator itr =
         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, "' ");
           strappend(msg, "'", *itr, "' ");
         }
         }
       }
       }

+ 5 - 3
src/OptionParser.cc

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

+ 2 - 2
src/PStringBuildVisitor.cc

@@ -75,8 +75,8 @@ void PStringBuildVisitor::visit(PStringNumLoop& s)
 void PStringBuildVisitor::visit(PStringSelect& s)
 void PStringBuildVisitor::visit(PStringSelect& s)
 {
 {
   const std::vector<std::string>& values = s.getValues();
   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);
     PStringSegment(*i, s.getNext()).accept(*this);
   }
   }
 }
 }

+ 2 - 2
src/PeerListProcessor.h

@@ -60,8 +60,8 @@ public:
   template<typename OutputIterator>
   template<typename OutputIterator>
   void extractPeerFromList(const BDE& peerData, OutputIterator dest)
   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;
       const BDE& peerDict = *itr;
       if(!peerDict.isDict()) {
       if(!peerDict.isDict()) {
         continue;
         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(),
   std::random_shuffle(randPorts.begin(), randPorts.end(),
                       *SimpleRandomizer::getInstance().get());
                       *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)) {
     if(!(0 < (*portItr) && (*portItr) <= 65535)) {
       continue;
       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
 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;
     const Extensions::value_type& p = *itr;
     if(p.second == id) {
     if(p.second == id) {
       return p.first;
       return p.first;

+ 2 - 2
src/Piece.cc

@@ -176,8 +176,8 @@ size_t Piece::getMissingUnusedBlockIndex
 {
 {
   size_t num = bitfield->getFirstNMissingUnusedIndex(indexes, n);
   size_t num = bitfield->getFirstNMissingUnusedIndex(indexes, n);
   if(num) {
   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);
       bitfield->setUseBit(*i);
     }
     }
   }
   }

+ 3 - 2
src/PieceStatMan.cc

@@ -81,8 +81,9 @@ PieceStatMan::PieceStatMan(size_t pieceNum, bool randomShuffle):
   }
   }
   {
   {
     size_t order = 0;
     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();
       _sortedPieceStatIndexes[order] = (*i)->getIndex();
       (*i)->setOrder(order++);
       (*i)->setOrder(order++);
     }
     }

+ 2 - 2
src/PriorityPieceSelector.cc

@@ -44,8 +44,8 @@ PriorityPieceSelector::PriorityPieceSelector
 bool PriorityPieceSelector::select
 bool PriorityPieceSelector::select
 (size_t& index, const unsigned char* bitfield, size_t nbits) const
 (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)) {
     if(bitfield::test(bitfield, nbits, *i)) {
       index = *i;
       index = *i;
       return true;
       return true;

+ 6 - 6
src/RequestGroup.cc

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

+ 21 - 19
src/RequestGroupMan.cc

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

+ 13 - 11
src/SegmentMan.cc

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

+ 11 - 10
src/SelectEventPoll.cc

@@ -179,10 +179,10 @@ void SelectEventPoll::poll(const struct timeval& tv)
 #endif // __MINGW32__
 #endif // __MINGW32__
 #ifdef ENABLE_ASYNC_DNS
 #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);
     int fd = entry->getFds(&rfds, &wfds);
     // TODO force error if fd == 0
     // TODO force error if fd == 0
     if(_fdmax < fd) {
     if(_fdmax < fd) {
@@ -201,8 +201,8 @@ void SelectEventPoll::poll(const struct timeval& tv)
 #endif // !__MINGW32__
 #endif // !__MINGW32__
   } while(retval == -1 && errno == EINTR);
   } while(retval == -1 && errno == EINTR);
   if(retval > 0) {
   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;
       int events = 0;
       if(FD_ISSET((*i)->getSocket(), &rfds)) {
       if(FD_ISSET((*i)->getSocket(), &rfds)) {
         events |= EventPoll::EVENT_READ;
         events |= EventPoll::EVENT_READ;
@@ -215,8 +215,9 @@ void SelectEventPoll::poll(const struct timeval& tv)
   }
   }
 #ifdef ENABLE_ASYNC_DNS
 #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);
     (*i)->process(&rfds, &wfds);
   }
   }
 
 
@@ -232,8 +233,8 @@ void SelectEventPoll::updateFdSet()
 #endif // !__MINGW32__
 #endif // !__MINGW32__
   FD_ZERO(&_rfdset);
   FD_ZERO(&_rfdset);
   FD_ZERO(&_wfdset);
   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();
     sock_t fd = (*i)->getSocket();
     int events = (*i)->getEvents();
     int events = (*i)->getEvents();
     if(events&EventPoll::EVENT_READ) {
     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;
     std::vector<std::string> items;
     util::split(line, std::back_inserter(items), ",");
     util::split(line, std::back_inserter(items), ",");
     std::map<std::string, std::string> m;
     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, "=");
       std::pair<std::string, std::string> p = util::split(*i, "=");
       util::trimSelf(p.first);
       util::trimSelf(p.first);
       util::trimSelf(p.second);
       util::trimSelf(p.second);

+ 6 - 3
src/SocketCore.cc

@@ -307,7 +307,8 @@ void SocketCore::bind(uint16_t port, int flags)
     }
     }
   } else {
   } else {
     for(std::vector<std::pair<struct sockaddr_storage, socklen_t> >::
     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];
       char host[NI_MAXHOST];
       int s;
       int s;
       s = getnameinfo(reinterpret_cast<const struct sockaddr*>(&(*i).first),
       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()) {
     if(!_bindAddrs.empty()) {
       bool bindSuccess = false;
       bool bindSuccess = false;
       for(std::vector<std::pair<struct sockaddr_storage, socklen_t> >::
       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),
         if(::bind(fd,reinterpret_cast<const struct sockaddr*>(&(*i).first),
                   (*i).second) == -1) {
                   (*i).second) == -1) {
           if(LogFactory::getInstance()->debug()) {
           if(LogFactory::getInstance()->debug()) {
@@ -1249,7 +1251,8 @@ void SocketCore::bindAddress(const std::string& iface)
   } else {
   } else {
     _bindAddrs = bindAddrs;
     _bindAddrs = bindAddrs;
     for(std::vector<std::pair<struct sockaddr_storage, socklen_t> >::
     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];
       char host[NI_MAXHOST];
       int s;
       int s;
       s = getnameinfo(reinterpret_cast<const struct sockaddr*>(&(*i).first),
       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;
   std::vector<size_t> indexes;
   const time_t TIMEOUT = 20;
   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((*i).elapsed(TIMEOUT)) {
       if(_logger->debug()) {
       if(_logger->debug()) {
         _logger->debug("ut_metadata request timeout. index=%lu",
         _logger->debug("ut_metadata request timeout. index=%lu",
@@ -77,6 +77,7 @@ std::vector<size_t> UTMetadataRequestTracker::removeTimeoutEntry()
       }
       }
       indexes.push_back((*i)._index);
       indexes.push_back((*i)._index);
       i = _trackedRequests.erase(i);
       i = _trackedRequests.erase(i);
+      eoi = _trackedRequests.end();
     } else {
     } else {
       ++i;
       ++i;
     }
     }
@@ -97,8 +98,8 @@ size_t UTMetadataRequestTracker::avail() const
 std::vector<size_t> UTMetadataRequestTracker::getAllTrackedIndex() const
 std::vector<size_t> UTMetadataRequestTracker::getAllTrackedIndex() const
 {
 {
   std::vector<size_t> indexes;
   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);
     indexes.push_back((*i)._index);
   }
   }
   return indexes;
   return indexes;

+ 2 - 2
src/UTPexExtensionMessage.cc

@@ -76,8 +76,8 @@ UTPexExtensionMessage::createCompactPeerListAndFlag
 {
 {
   std::string addrstring;
   std::string addrstring;
   std::string flagstring;
   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];
     unsigned char compact[6];
     if(bittorrent::createcompact(compact, (*itr)->ipaddr, (*itr)->port)) {
     if(bittorrent::createcompact(compact, (*itr)->ipaddr, (*itr)->port)) {
       addrstring.append(&compact[0], &compact[6]);
       addrstring.append(&compact[0], &compact[6]);

+ 2 - 2
src/XmlRpcMethod.cc

@@ -103,8 +103,8 @@ static void gatherOption
       const BDE& value = (*first).second;
       const BDE& value = (*first).second;
       if((optionName == PREF_HEADER || optionName == PREF_INDEX_OUT) &&
       if((optionName == PREF_HEADER || optionName == PREF_INDEX_OUT) &&
          value.isList()){
          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()) {
           if((*argiter).isString()) {
             optionHandler->parse(*option.get(), (*argiter).s());
             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>
 template<typename OutputIterator>
 static void extractUris(OutputIterator out, const BDE& src)
 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()) {
     if((*i).isString()) {
       out++ = (*i).s();
       out++ = (*i).s();
     }
     }
@@ -269,7 +269,7 @@ BDE AddMetalinkXmlRpcMethod::process
     }
     }
     BDE gids = BDE::list();
     BDE gids = BDE::list();
     for(std::vector<SharedHandle<RequestGroup> >::const_iterator i =
     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()));
       gids << BDE(util::itos((*i)->getGID()));
     }
     }
     return gids;
     return gids;
@@ -325,8 +325,8 @@ static void createFileEntry(BDE& files, InputIterator first, InputIterator last)
     BDE uriList = BDE::list();
     BDE uriList = BDE::list();
     std::vector<std::string> uris;
     std::vector<std::string> uris;
     (*first)->getUris(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();
       BDE uriEntry = BDE::dict();
       uriEntry[KEY_URI] = *i;
       uriEntry[KEY_URI] = *i;
       uriList << uriEntry;
       uriList << uriEntry;
@@ -362,8 +362,8 @@ void gatherProgressCommon
   if(!group->followedBy().empty()) {
   if(!group->followedBy().empty()) {
     BDE list = BDE::list();
     BDE list = BDE::list();
     // The element is GID.
     // 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);
       list << util::itos(*i);
     }
     }
     entryDict[KEY_FOLLOWED_BY] = list;
     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?
   // TODO Would it be good to add copy() method in BDE?
   const BDE& announceList = torrentAttrs[bittorrent::ANNOUNCE_LIST];
   const BDE& announceList = torrentAttrs[bittorrent::ANNOUNCE_LIST];
   BDE destAnnounceList = BDE::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();
     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);
       destAnnounceTier <<  (*t);
     }
     }
     destAnnounceList << destAnnounceTier;
     destAnnounceList << destAnnounceTier;
@@ -435,7 +435,7 @@ static void gatherPeer(BDE& peers, const SharedHandle<PeerStorage>& ps)
   std::vector<SharedHandle<Peer> > activePeers;
   std::vector<SharedHandle<Peer> > activePeers;
   ps->getActivePeers(activePeers);
   ps->getActivePeers(activePeers);
   for(std::vector<SharedHandle<Peer> >::const_iterator i =
   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();
     BDE peerEntry = BDE::dict();
     peerEntry[KEY_PEER_ID] = util::torrentUrlencode((*i)->getPeerId(),
     peerEntry[KEY_PEER_ID] = util::torrentUrlencode((*i)->getPeerId(),
                                                     PEER_ID_LENGTH);
                                                     PEER_ID_LENGTH);
@@ -483,8 +483,8 @@ void gatherStoppedDownload
   if(!ds->followedBy.empty()) {
   if(!ds->followedBy.empty()) {
     BDE list = BDE::list();
     BDE list = BDE::list();
     // The element is GID.
     // 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);
       list << util::itos(*i);
     }
     }
     entryDict[KEY_FOLLOWED_BY] = list;
     entryDict[KEY_FOLLOWED_BY] = list;
@@ -561,8 +561,8 @@ BDE GetUrisXmlRpcMethod::process
   if(!group->getDownloadContext()->getFileEntries().empty()) {
   if(!group->getDownloadContext()->getFileEntries().empty()) {
     std::vector<std::string> uris;
     std::vector<std::string> uris;
     group->getDownloadContext()->getFirstFileEntry()->getUris(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();
       BDE entry = BDE::dict();
       entry[KEY_URI] = *i;
       entry[KEY_URI] = *i;
       uriList << entry;
       uriList << entry;
@@ -642,7 +642,7 @@ BDE TellActiveXmlRpcMethod::process
   const std::deque<SharedHandle<RequestGroup> >& groups =
   const std::deque<SharedHandle<RequestGroup> >& groups =
     e->_requestGroupMan->getRequestGroups();
     e->_requestGroupMan->getRequestGroups();
   for(std::deque<SharedHandle<RequestGroup> >::const_iterator i =
   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();
     BDE entryDict = BDE::dict();
     entryDict[KEY_STATUS] = BDE_ACTIVE;
     entryDict[KEY_STATUS] = BDE_ACTIVE;
     gatherProgress(entryDict, *i, e);
     gatherProgress(entryDict, *i, e);
@@ -757,7 +757,8 @@ BDE GetVersionXmlRpcMethod::process
   result[KEY_VERSION] = std::string(PACKAGE_VERSION);
   result[KEY_VERSION] = std::string(PACKAGE_VERSION);
   BDE featureList = BDE::list();
   BDE featureList = BDE::list();
   const FeatureMap& features = FeatureConfig::getInstance()->getFeatures();
   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) {
     if((*i).second) {
       featureList << (*i).first;
       featureList << (*i).first;
     }
     }
@@ -803,8 +804,8 @@ BDE GetGlobalOptionXmlRpcMethod::process
 (const XmlRpcRequest& req, DownloadEngine* e)
 (const XmlRpcRequest& req, DownloadEngine* e)
 {
 {
   BDE result = BDE::dict();
   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);
     SharedHandle<OptionHandler> h = _optionParser->findByName((*i).first);
     if(!h.isNull() && !h->isHidden()) {
     if(!h.isNull() && !h->isHidden()) {
       result[(*i).first] = (*i).second;
       result[(*i).first] = (*i).second;
@@ -861,8 +862,8 @@ BDE SystemMulticallXmlRpcMethod::process
   }
   }
   const BDE& methodSpecs = params[0];
   const BDE& methodSpecs = params[0];
   BDE list = BDE::list();
   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()) {
     if(!(*i).isDict()) {
       list << createErrorResponse
       list << createErrorResponse
         (DL_ABORT_EX("system.multicall expected struct."));
         (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());
     o.write(s.data(), s.size());
   } else if(bde.isDict()) {
   } else if(bde.isDict()) {
     o << "d";
     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;
       const std::string& key = (*i).first;
       o << key.size() << ":";
       o << key.size() << ":";
       o.write(key.data(), key.size());
       o.write(key.data(), key.size());
@@ -221,7 +222,8 @@ static void encodeIter(std::ostream& o, const BDE& bde)
     o << "e";
     o << "e";
   } else if(bde.isList()) {
   } else if(bde.isList()) {
     o << "l";
     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);
       encodeIter(o, *i);
     }
     }
     o << "e";
     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)
 (BDE& torrent, std::vector<std::string>& uris, const BDE& bde)
 {
 {
   if(bde.isList()) {
   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()) {
       if((*itr).isString()) {
         uris.push_back((*itr).s());
         uris.push_back((*itr).s());
       }
       }
@@ -221,8 +221,8 @@ static void extractFileEntries
     off_t offset = 0;
     off_t offset = 0;
     // multi-file mode
     // multi-file mode
     torrent[MODE] = MULTI;
     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;
       const BDE& fileDict = *itr;
       if(!fileDict.isDict()) {
       if(!fileDict.isDict()) {
         continue;
         continue;
@@ -277,8 +277,8 @@ static void extractFileEntries
     // For each uri in urlList, if it ends with '/', then
     // For each uri in urlList, if it ends with '/', then
     // concatenate name to it. Specification just says so.
     // concatenate name to it. Specification just says so.
     std::vector<std::string> uris;
     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)) {
       if(util::endsWith(*i, A2STR::SLASH_C)) {
         uris.push_back((*i)+name);
         uris.push_back((*i)+name);
       } else {
       } else {
@@ -305,10 +305,10 @@ static void extractAnnounce(BDE& torrent, const BDE& rootDict)
   if(announceList.isList()) {
   if(announceList.isList()) {
     torrent[ANNOUNCE_LIST] = announceList;
     torrent[ANNOUNCE_LIST] = announceList;
     BDE& tiers = torrent[ANNOUNCE_LIST];
     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()) {
         if((*uriiter).isString()) {
           *uriiter = util::trim((*uriiter).s());
           *uriiter = util::trim((*uriiter).s());
         }
         }
@@ -329,8 +329,8 @@ static void extractNodes(BDE& torrent, const BDE& nodesList)
 {
 {
   BDE nodes = BDE::list();
   BDE nodes = BDE::list();
   if(nodesList.isList()) {
   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);
       const BDE& addrPairList = (*i);
       if(!addrPairList.isList() || addrPairList.size() != 2) {
       if(!addrPairList.isList() || addrPairList.size() != 2) {
         continue;
         continue;
@@ -567,13 +567,13 @@ void print(std::ostream& o, const SharedHandle<DownloadContext>& dctx)
   o << "Mode: " << torrentAttrs[MODE].s() << "\n";
   o << "Mode: " << torrentAttrs[MODE].s() << "\n";
   o << "Announce:" << "\n";
   o << "Announce:" << "\n";
   const BDE& announceList = torrentAttrs[ANNOUNCE_LIST];
   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()) {
     if(!(*tieritr).isList()) {
       continue;
       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 << " " << (*i).s();
     }
     }
     o << "\n";
     o << "\n";
@@ -586,8 +586,8 @@ void print(std::ostream& o, const SharedHandle<DownloadContext>& dctx)
   if(!torrentAttrs[URL_LIST].empty()) {
   if(!torrentAttrs[URL_LIST].empty()) {
     const BDE& urlList = torrentAttrs[URL_LIST];
     const BDE& urlList = torrentAttrs[URL_LIST];
     o << "URL List: " << "\n";
     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";
       o << " " << (*i).s() << "\n";
     }
     }
   }
   }
@@ -886,8 +886,8 @@ BDE parseMagnet(const std::string& magnet)
   BDE announceList = BDE::list();
   BDE announceList = BDE::list();
   if(r.containsKey("tr")) {
   if(r.containsKey("tr")) {
     const BDE& uris = r["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();
       BDE tier = BDE::list();
       tier << *i;
       tier << *i;
       announceList << tier;
       announceList << tier;
@@ -944,10 +944,10 @@ std::string torrent2Magnet(const BDE& attrs)
   }
   }
   if(attrs.containsKey(ANNOUNCE_LIST)) {
   if(attrs.containsKey(ANNOUNCE_LIST)) {
     const BDE& tiers = attrs[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 += "&tr=";
         uri += util::urlencode((*uriiter).s());
         uri += util::urlencode((*uriiter).s());
       }
       }

+ 6 - 5
src/download_helper.cc

@@ -156,8 +156,8 @@ static void unfoldURI
 {
 {
   ParameterizedStringParser p;
   ParameterizedStringParser p;
   PStringBuildVisitor v;
   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();
     v.reset();
     p.parse(*itr)->accept(v);
     p.parse(*itr)->accept(v);
     result.insert(result.end(), v.getURIs().begin(), v.getURIs().end()); 
     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::istringstream indexOutIn(option->get(PREF_INDEX_OUT));
   std::map<size_t, std::string> indexPathMap =
   std::map<size_t, std::string> indexPathMap =
     util::createIndexPathMap(indexOutIn);
     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
     dctx->setFilePathWithIndex
       ((*i).first, util::applyDir(dctx->getDir(), (*i).second));
       ((*i).first, util::applyDir(dctx->getDir(), (*i).second));
   }
   }
@@ -431,7 +431,8 @@ static void createRequestGroupForUriList
 
 
     SharedHandle<Option> requestOption(new Option(*option.get()));
     SharedHandle<Option> requestOption(new Option(*option.get()));
     for(std::set<std::string>::const_iterator i =
     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)) {
       if(tempOption->defined(*i)) {
         requestOption->put(*i, tempOption->get(*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()),
   util::split(std::string(magnet.begin()+8, magnet.end()),
               std::back_inserter(queries), "&");
               std::back_inserter(queries), "&");
   BDE dict = BDE::dict();
   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;
     std::pair<std::string, std::string> kv;
     util::split(kv, *i, '=');
     util::split(kv, *i, '=');
     std::string value = util::urldecode(kv.second);
     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)
 (const std::vector<std::string>& uris, const SharedHandle<Option>& op)
 {
 {
   ProtocolDetector dt;
   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(">>> ");
     printf(MSG_SHOW_FILES, (*i).c_str());
     printf(MSG_SHOW_FILES, (*i).c_str());
     printf("\n");
     printf("\n");

+ 2 - 2
src/messageDigest.cc

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