Răsfoiți Sursa

cmListCommand: Use cmRemoveIndices for REMOVE_AT subcommand.

Avoid repeatedly looping over the indices to process elements (even
without breaking out of the loop when the element is found).
Stephen Kelly 11 ani în urmă
părinte
comite
6a22e40147
1 a modificat fișierele cu 9 adăugiri și 16 ștergeri
  1. 9 16
      Source/cmListCommand.cxx

+ 9 - 16
Source/cmListCommand.cxx

@@ -527,26 +527,19 @@ bool cmListCommand::HandleRemoveAtCommand(
     removed.push_back(static_cast<size_t>(item));
     removed.push_back(static_cast<size_t>(item));
     }
     }
 
 
+  std::sort(removed.begin(), removed.end());
+  removed.erase(std::unique(removed.begin(), removed.end()), removed.end());
+
+  varArgsExpanded.erase(cmRemoveIndices(varArgsExpanded, removed),
+                        varArgsExpanded.end());
+
   std::string value;
   std::string value;
   const char* sep = "";
   const char* sep = "";
   for ( cc = 0; cc < varArgsExpanded.size(); ++ cc )
   for ( cc = 0; cc < varArgsExpanded.size(); ++ cc )
     {
     {
-    size_t kk;
-    bool found = false;
-    for ( kk = 0; kk < removed.size(); ++ kk )
-      {
-      if ( cc == removed[kk] )
-        {
-        found = true;
-        }
-      }
-
-    if ( !found )
-      {
-      value += sep;
-      value += varArgsExpanded[cc];
-      sep = ";";
-      }
+    value += sep;
+    value += varArgsExpanded[cc];
+    sep = ";";
     }
     }
 
 
   this->Makefile->AddDefinition(listName, value.c_str());
   this->Makefile->AddDefinition(listName, value.c_str());