summaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
authorAlexander Neundorf <neundorf@kde.org>2009-10-06 17:57:41 (GMT)
committerAlexander Neundorf <neundorf@kde.org>2009-10-06 17:57:41 (GMT)
commit8a5ae4c15efb027ad73e957ec077e9dc89bb5a17 (patch)
treea89a6e0a7fa22dcb83347515348976c309d91702 /Source
parent9000b5a4ded0d805ea1cd7b82f9e87e9abcf6c31 (diff)
downloadCMake-8a5ae4c15efb027ad73e957ec077e9dc89bb5a17.zip
CMake-8a5ae4c15efb027ad73e957ec077e9dc89bb5a17.tar.gz
CMake-8a5ae4c15efb027ad73e957ec077e9dc89bb5a17.tar.bz2
speedup C dependency scanning even more
Scanning the dependencies for kdelibs/khtml/ (when all files are scanned) is now down to 4.6 s from 6.3 s before this change (without the headerLocationCache it takes about 14 s here). It doesn't really make sense to include the complete include path as part of the key for the map, since the include path will be the same for all files in a project, so it doesn't add anything. Alex
Diffstat (limited to 'Source')
-rw-r--r--Source/cmDependsC.cxx30
1 files changed, 7 insertions, 23 deletions
diff --git a/Source/cmDependsC.cxx b/Source/cmDependsC.cxx
index d0c28a8..942cb3f 100644
--- a/Source/cmDependsC.cxx
+++ b/Source/cmDependsC.cxx
@@ -149,10 +149,8 @@ bool cmDependsC::WriteDependencies(const char *src, const char *obj,
std::set<cmStdString> dependencies;
std::set<cmStdString> scanned;
- // Use reserve to allocate enough memory for both strings,
+ // Use reserve to allocate enough memory for tempPathStr
// so that during the loops no memory is allocated or freed
- std::string cacheKey;
- cacheKey.reserve(4*1024);
std::string tempPathStr;
tempPathStr.reserve(4*1024);
@@ -181,22 +179,8 @@ bool cmDependsC::WriteDependencies(const char *src, const char *obj,
}
else
{
- // With GCC distribution of STL, assigning to a string directly
- // throws away the internal buffer of the left-hand-side. We
- // want to keep the pre-allocated buffer so we use C-style
- // string assignment and then operator+=. We could call
- // .clear() instead of assigning to an empty string but the
- // method does not exist on some older compilers.
- cacheKey = "";
- cacheKey += current.FileName;
-
- for(std::vector<std::string>::const_iterator i =
- this->IncludePath.begin(); i != this->IncludePath.end(); ++i)
- {
- cacheKey+=*i;
- }
std::map<cmStdString, cmStdString>::iterator
- headerLocationIt=this->HeaderLocationCache.find(cacheKey);
+ headerLocationIt=this->HeaderLocationCache.find(current.FileName);
if (headerLocationIt!=this->HeaderLocationCache.end())
{
fullName=headerLocationIt->second;
@@ -214,16 +198,16 @@ bool cmDependsC::WriteDependencies(const char *src, const char *obj,
}
else
{
- tempPathStr += *i;
- tempPathStr+="/";
- tempPathStr+=current.FileName;
+ tempPathStr += *i;
+ tempPathStr+="/";
+ tempPathStr+=current.FileName;
}
// Look for the file in this location.
if(cmSystemTools::FileExists(tempPathStr.c_str(), true))
{
- fullName = tempPathStr;
- HeaderLocationCache[cacheKey]=fullName;
+ fullName = tempPathStr;
+ HeaderLocationCache[current.FileName]=fullName;
break;
}
}