diff options
author | Alexander Neundorf <neundorf@kde.org> | 2009-10-06 17:57:41 (GMT) |
---|---|---|
committer | Alexander Neundorf <neundorf@kde.org> | 2009-10-06 17:57:41 (GMT) |
commit | 8a5ae4c15efb027ad73e957ec077e9dc89bb5a17 (patch) | |
tree | a89a6e0a7fa22dcb83347515348976c309d91702 /Source/cmDependsC.cxx | |
parent | 9000b5a4ded0d805ea1cd7b82f9e87e9abcf6c31 (diff) | |
download | CMake-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/cmDependsC.cxx')
-rw-r--r-- | Source/cmDependsC.cxx | 30 |
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; } } |