summaryrefslogtreecommitdiff
path: root/Source/cmMakefile.h
diff options
context:
space:
mode:
authorAaron Orenstein <aorenste@fb.com>2017-08-17 18:27:03 -0700
committerBrad King <brad.king@kitware.com>2017-09-20 14:10:47 -0400
commit3b95ab569345028a1a8fe521d5ecd81fa97f2653 (patch)
tree98aa64465c6607b9af1779e63fafb9556f7fe664 /Source/cmMakefile.h
parente018880350990565746a3b335b1606497ce94211 (diff)
downloadcmake-3b95ab569345028a1a8fe521d5ecd81fa97f2653.tar.gz
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.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h
index 272522c9ec..2cae659b65 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;