diff options
author | Aaron Orenstein <aorenste@fb.com> | 2017-08-18 01:27:03 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2017-09-20 18:10:47 (GMT) |
commit | 3b95ab569345028a1a8fe521d5ecd81fa97f2653 (patch) | |
tree | 98aa64465c6607b9af1779e63fafb9556f7fe664 /Source/cmMakefile.h | |
parent | e018880350990565746a3b335b1606497ce94211 (diff) | |
download | CMake-3b95ab569345028a1a8fe521d5ecd81fa97f2653.zip CMake-3b95ab569345028a1a8fe521d5ecd81fa97f2653.tar.gz CMake-3b95ab569345028a1a8fe521d5ecd81fa97f2653.tar.bz2 |
Performance: Improve efficiency of source file lookup in cmMakefile
Add an unordered map to cmMakefile to speed up GetSource() lookups.
Diffstat (limited to 'Source/cmMakefile.h')
-rw-r--r-- | Source/cmMakefile.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index 272522c..2cae659 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -13,6 +13,7 @@ #include <stddef.h> #include <string> #include <unordered_map> +#include <unordered_set> #include <vector> #include "cmAlgorithms.h" @@ -808,7 +809,17 @@ protected: // libraries, classes, and executables mutable cmTargets Targets; std::map<std::string, std::string> AliasTargets; + std::vector<cmSourceFile*> SourceFiles; + // Because cmSourceFile names are compared in a fuzzy way (see + // cmSourceFileLocation::Match()) we can't have a straight mapping from + // filename to cmSourceFile. To make lookups more efficient we store the + // Name portion of the cmSourceFileLocation and then compare on the list of + // cmSourceFiles that might match that name. Note that on platforms which + // have a case-insensitive filesystem we store the key in all lowercase. + typedef std::unordered_set<cmSourceFile*> SourceFileSet; + typedef std::unordered_map<std::string, SourceFileSet> SourceFileMap; + SourceFileMap SourceFileSearchIndex; // Tests std::map<std::string, cmTest*> Tests; |