diff options
author | Florian Jacomme <florian@jacomme.fr> | 2018-05-01 14:17:31 (GMT) |
---|---|---|
committer | Brad King <brad.king@kitware.com> | 2018-05-22 14:56:24 (GMT) |
commit | b1a05d6c762ceb6dbf47126a7ddcedadb45e02f5 (patch) | |
tree | 61dd702ca38457507a1b0416e61a1aae350ca90d /Source/cmListFileCache.h | |
parent | 743f24bac68010c0157dc0349958e09ed1784f5f (diff) | |
download | CMake-b1a05d6c762ceb6dbf47126a7ddcedadb45e02f5.zip CMake-b1a05d6c762ceb6dbf47126a7ddcedadb45e02f5.tar.gz CMake-b1a05d6c762ceb6dbf47126a7ddcedadb45e02f5.tar.bz2 |
Revise implementation of case-insensitive command names
Store both the as-written and lower-case command names and use
the latter to avoid case-insensitive string comparisons.
With this I obtain 2-6% speed increase (on Windows) for the configure
step with no significant changes in memory usage. A case-insensitive
comparison is a lot slower than just calling `==` because the operator
will use things like memcmp, so prefer the latter.
The `cmSystemTools::LowerCase` function allocates a new string each time
it is called, so before this change we were allocating in:
* cmMakefile::Configure two times for each function
(to look for `cmake_minimum_required` and `project`)
* cmMakefile::ExecuteCommand twice by function by calling
cmState::GetCommand and copying the name
Now we are only allocating once by function instead of four.
Diffstat (limited to 'Source/cmListFileCache.h')
-rw-r--r-- | Source/cmListFileCache.h | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/Source/cmListFileCache.h b/Source/cmListFileCache.h index 1f9e374..70f7166 100644 --- a/Source/cmListFileCache.h +++ b/Source/cmListFileCache.h @@ -23,11 +23,22 @@ class cmMessenger; struct cmCommandContext { - std::string Name; + struct cmCommandName + { + std::string Lower; + std::string Original; + cmCommandName() {} + cmCommandName(std::string const& name) { *this = name; } + cmCommandName& operator=(std::string const& name); + } Name; long Line; cmCommandContext() - : Name() - , Line(0) + : Line(0) + { + } + cmCommandContext(const char* name, int line) + : Name(name) + , Line(line) { } }; @@ -81,7 +92,7 @@ public: cmListFileContext lfc; lfc.FilePath = fileName; lfc.Line = lfcc.Line; - lfc.Name = lfcc.Name; + lfc.Name = lfcc.Name.Original; return lfc; } }; |