Browse Source

c++: prefer vectors over lists

None of these usages of `std::list` were inserting or removing elements
in the middle of the structure, so there were no benefits to using it.

Other uses were related to C pointers being stable in a list of strings
whereas in a vector of strings, small pointer optimizations could be
moved and become invalid after a modification to the hosting vector.
None of these uses modified the vector after handing out a C string to
an external store.
Ben Boeckel 8 years ago
parent
commit
3e027d9def

+ 3 - 3
Source/CPack/WiX/cmWIXPatchParser.h

@@ -7,8 +7,8 @@
 
 #include "cmXMLParser.h"
 
-#include <list>
 #include <map>
+#include <vector>
 
 struct cmWIXPatchNode
 {
@@ -36,7 +36,7 @@ struct cmWIXPatchElement : cmWIXPatchNode
 
   ~cmWIXPatchElement();
 
-  typedef std::list<cmWIXPatchNode*> child_list_t;
+  typedef std::vector<cmWIXPatchNode*> child_list_t;
   typedef std::map<std::string, std::string> attributes_t;
 
   std::string name;
@@ -84,7 +84,7 @@ private:
 
   fragment_map_t& Fragments;
 
-  std::list<cmWIXPatchElement*> ElementStack;
+  std::vector<cmWIXPatchElement*> ElementStack;
 };
 
 #endif

+ 3 - 3
Source/CPack/cmCPackGenerator.cxx

@@ -6,7 +6,6 @@
 #include "cmsys/Glob.hxx"
 #include "cmsys/RegularExpression.hxx"
 #include <algorithm>
-#include <list>
 #include <utility>
 
 #include "cmCPackComponentGroup.h"
@@ -314,7 +313,7 @@ int cmCPackGenerator::InstallProjectViaInstalledDirectories(
     const std::string& tempDir = tempInstallDirectory;
     for (it = installDirectoriesVector.begin();
          it != installDirectoriesVector.end(); ++it) {
-      std::list<std::pair<std::string, std::string> > symlinkedFiles;
+      std::vector<std::pair<std::string, std::string> > symlinkedFiles;
       cmCPackLogger(cmCPackLog::LOG_DEBUG, "Find files" << std::endl);
       cmsys::Glob gl;
       std::string top = *it;
@@ -378,7 +377,8 @@ int cmCPackGenerator::InstallProjectViaInstalledDirectories(
       }
       /* rebuild symlinks in the installed tree */
       if (!symlinkedFiles.empty()) {
-        std::list<std::pair<std::string, std::string> >::iterator symlinkedIt;
+        std::vector<std::pair<std::string, std::string> >::iterator
+          symlinkedIt;
         std::string curDir = cmSystemTools::GetCurrentWorkingDirectory();
         std::string goToDir = tempDir;
         goToDir += "/" + subdir;

+ 6 - 6
Source/CTest/cmCTestSVN.cxx

@@ -103,8 +103,8 @@ bool cmCTestSVN::NoteOldRevision()
     return false;
   }
 
-  std::list<SVNInfo>::iterator itbeg = this->Repositories.begin();
-  std::list<SVNInfo>::iterator itend = this->Repositories.end();
+  std::vector<SVNInfo>::iterator itbeg = this->Repositories.begin();
+  std::vector<SVNInfo>::iterator itend = this->Repositories.end();
   for (; itbeg != itend; itbeg++) {
     SVNInfo& svninfo = *itbeg;
     svninfo.OldRevision = this->LoadInfo(svninfo);
@@ -127,8 +127,8 @@ bool cmCTestSVN::NoteNewRevision()
     return false;
   }
 
-  std::list<SVNInfo>::iterator itbeg = this->Repositories.begin();
-  std::list<SVNInfo>::iterator itend = this->Repositories.end();
+  std::vector<SVNInfo>::iterator itbeg = this->Repositories.begin();
+  std::vector<SVNInfo>::iterator itend = this->Repositories.end();
   for (; itbeg != itend; itbeg++) {
     SVNInfo& svninfo = *itbeg;
     svninfo.NewRevision = this->LoadInfo(svninfo);
@@ -380,8 +380,8 @@ bool cmCTestSVN::LoadRevisions()
 {
   bool result = true;
   // Get revisions for all the external repositories
-  std::list<SVNInfo>::iterator itbeg = this->Repositories.begin();
-  std::list<SVNInfo>::iterator itend = this->Repositories.end();
+  std::vector<SVNInfo>::iterator itbeg = this->Repositories.begin();
+  std::vector<SVNInfo>::iterator itend = this->Repositories.end();
   for (; itbeg != itend; itbeg++) {
     SVNInfo& svninfo = *itbeg;
     result = this->LoadRevisions(svninfo) && result;

+ 1 - 2
Source/CTest/cmCTestSVN.h

@@ -8,7 +8,6 @@
 #include "cmCTestGlobalVC.h"
 
 #include <iosfwd>
-#include <list>
 #include <string>
 #include <vector>
 
@@ -71,7 +70,7 @@ private:
   friend struct Revision;
 
   // Info of all the repositories (root, externals and nested ones).
-  std::list<SVNInfo> Repositories;
+  std::vector<SVNInfo> Repositories;
 
   // Pointer to the infos of the root repository.
   SVNInfo* RootInfo;

+ 5 - 5
Source/cmFileCommand.cxx

@@ -10,11 +10,11 @@
 #include "cmsys/String.hxx"
 #include <algorithm>
 #include <assert.h>
-#include <list>
 #include <sstream>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <vector>
 
 #include "cmAlgorithms.h"
 #include "cmCommandArgumentsHelper.h"
@@ -2618,7 +2618,7 @@ bool cmFileCommand::HandleDownloadCommand(std::vector<std::string> const& args)
   bool showProgress = false;
   std::string userpwd;
 
-  std::list<std::string> curl_headers;
+  std::vector<std::string> curl_headers;
 
   while (i != args.end()) {
     if (*i == "TIMEOUT") {
@@ -2862,7 +2862,7 @@ bool cmFileCommand::HandleDownloadCommand(std::vector<std::string> const& args)
   }
 
   struct curl_slist* headers = CM_NULLPTR;
-  for (std::list<std::string>::const_iterator h = curl_headers.begin();
+  for (std::vector<std::string>::const_iterator h = curl_headers.begin();
        h != curl_headers.end(); ++h) {
     headers = ::curl_slist_append(headers, h->c_str());
   }
@@ -2952,7 +2952,7 @@ bool cmFileCommand::HandleUploadCommand(std::vector<std::string> const& args)
   bool showProgress = false;
   std::string userpwd;
 
-  std::list<std::string> curl_headers;
+  std::vector<std::string> curl_headers;
 
   while (i != args.end()) {
     if (*i == "TIMEOUT") {
@@ -3120,7 +3120,7 @@ bool cmFileCommand::HandleUploadCommand(std::vector<std::string> const& args)
   }
 
   struct curl_slist* headers = CM_NULLPTR;
-  for (std::list<std::string>::const_iterator h = curl_headers.begin();
+  for (std::vector<std::string>::const_iterator h = curl_headers.begin();
        h != curl_headers.end(); ++h) {
     headers = ::curl_slist_append(headers, h->c_str());
   }

+ 3 - 3
Source/cmFileLockPool.h

@@ -5,8 +5,8 @@
 
 #include "cmConfigure.h"
 
-#include <list>
 #include <string>
+#include <vector>
 
 class cmFileLock;
 class cmFileLockResult;
@@ -70,14 +70,14 @@ private:
     bool IsAlreadyLocked(const std::string& filename) const;
 
   private:
-    typedef std::list<cmFileLock*> List;
+    typedef std::vector<cmFileLock*> List;
     typedef List::iterator It;
     typedef List::const_iterator CIt;
 
     List Locks;
   };
 
-  typedef std::list<ScopePool*> List;
+  typedef std::vector<ScopePool*> List;
 
   typedef List::iterator It;
   typedef List::const_iterator CIt;

+ 3 - 2
Source/cmGlobalVisualStudio7Generator.cxx

@@ -12,6 +12,7 @@
 #include "cmsys/Encoding.hxx"
 
 #include <assert.h>
+#include <vector>
 #include <windows.h>
 
 static cmVS7FlagTable cmVS7ExtraFlagTable[] = {
@@ -680,10 +681,10 @@ std::set<std::string> cmGlobalVisualStudio7Generator::IsPartOfDefaultBuild(
   // default build if another target depends on it
   int type = target->GetType();
   if (type == cmStateEnums::GLOBAL_TARGET) {
-    std::list<std::string> targetNames;
+    std::vector<std::string> targetNames;
     targetNames.push_back("INSTALL");
     targetNames.push_back("PACKAGE");
-    for (std::list<std::string>::const_iterator t = targetNames.begin();
+    for (std::vector<std::string>::const_iterator t = targetNames.begin();
          t != targetNames.end(); ++t) {
       // check if target <*t> is part of default build
       if (target->GetName() == *t) {