mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-28 01:49:23 -05:00
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.
This commit is contained in:
committed by
Brad King
parent
743f24bac6
commit
b1a05d6c76
@@ -13,6 +13,14 @@
|
||||
#include <assert.h>
|
||||
#include <sstream>
|
||||
|
||||
cmCommandContext::cmCommandName& cmCommandContext::cmCommandName::operator=(
|
||||
std::string const& name)
|
||||
{
|
||||
this->Original = name;
|
||||
this->Lower = cmSystemTools::LowerCase(name);
|
||||
return *this;
|
||||
}
|
||||
|
||||
struct cmListFileParser
|
||||
{
|
||||
cmListFileParser(cmListFile* lf, cmListFileBacktrace const& lfbt,
|
||||
|
||||
Reference in New Issue
Block a user