Browse Source

ENH: string += is very slow, so don't use it

Bill Hoffman 20 years ago
parent
commit
dc43a3d265
1 changed files with 10 additions and 4 deletions
  1. 10 4
      Source/cmDependsC.cxx

+ 10 - 4
Source/cmDependsC.cxx

@@ -311,8 +311,10 @@ const char* cmDependsC::ParseFileName(const char* in, std::string& name)
 
   // Parse the possibly quoted file name.
   bool quoted = false;
+  char* buf = new char[strlen(in)+1];
+  char* pos = buf;
   for(;*c && (quoted ||
-              ((*c != ':' || name.size() == 1) && !isspace(*c))); ++c)
+              ((*c != ':' || pos > buf+1) && !isspace(*c))); ++c)
     {
     if(*c == '"')
       {
@@ -320,14 +322,18 @@ const char* cmDependsC::ParseFileName(const char* in, std::string& name)
       }
     else if(!quoted && *c == '\\' && isspace(*(c+1)))
       {
-      name += *(++c);
+      *pos =  *(++c);
+      pos++;
       }
     else
       {
-      name += *c;
+      *pos = *c;
+      pos++;
       }
     }
-
+  *pos =0;
+  name += pos;
+  delete [] buf;
   // Return the ending position.
   return c;
 }