From 3b95ab569345028a1a8fe521d5ecd81fa97f2653 Mon Sep 17 00:00:00 2001 From: Aaron Orenstein Date: Thu, 17 Aug 2017 18:27:03 -0700 Subject: Performance: Improve efficiency of source file lookup in cmMakefile Add an unordered map to cmMakefile to speed up GetSource() lookups. --- Source/cmMakefile.h | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'Source/cmMakefile.h') 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 #include #include +#include #include #include "cmAlgorithms.h" @@ -808,7 +809,17 @@ protected: // libraries, classes, and executables mutable cmTargets Targets; std::map AliasTargets; + std::vector 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 SourceFileSet; + typedef std::unordered_map SourceFileMap; + SourceFileMap SourceFileSearchIndex; // Tests std::map Tests; -- cgit v1.2.1