diff options
author | Oleksandr Koval <oleksandr.koval.dev@gmail.com> | 2020-09-03 20:25:37 (GMT) |
---|---|---|
committer | Oleksandr Koval <oleksandr.koval.dev@gmail.com> | 2020-09-03 20:25:37 (GMT) |
commit | 38928ee3ee40179ec4ad295c72cf5aaa213f617e (patch) | |
tree | 3201e3a0c612cbf6dab0bf9ca44e87c688ae21ec /Source/cmStringCommand.cxx | |
parent | ca5babfd7a1da8e32f927ad086fdd91c2b09853b (diff) | |
download | CMake-38928ee3ee40179ec4ad295c72cf5aaa213f617e.zip CMake-38928ee3ee40179ec4ad295c72cf5aaa213f617e.tar.gz CMake-38928ee3ee40179ec4ad295c72cf5aaa213f617e.tar.bz2 |
cmStringAlgorithms: Add faster cmJoin overloads for strings
cmJoin() is often used with std::string ranges. Generic implementation
uses std::ostringstream which is not optimal. With strings we can avoid
operator<<() and make much faster implementation. Additional 'initial'
argument is useful for cmStringCommand.cxx:HandleAppendCommand().
Diffstat (limited to 'Source/cmStringCommand.cxx')
-rw-r--r-- | Source/cmStringCommand.cxx | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/Source/cmStringCommand.cxx b/Source/cmStringCommand.cxx index 653b383..4000a7d 100644 --- a/Source/cmStringCommand.cxx +++ b/Source/cmStringCommand.cxx @@ -11,6 +11,7 @@ #include <memory> #include <cm/iterator> +#include <cm/string_view> #include <cmext/string_view> #include "cmsys/RegularExpression.hxx" @@ -534,11 +535,14 @@ bool HandleAppendCommand(std::vector<std::string> const& args, return true; } - const std::string& variable = args[1]; + auto const& variableName = args[1]; + + cm::string_view oldView{ status.GetMakefile().GetSafeDefinition( + variableName) }; + + auto const newValue = cmJoin(cmMakeRange(args).advance(2), {}, oldView); + status.GetMakefile().AddDefinition(variableName, newValue); - std::string value = status.GetMakefile().GetSafeDefinition(variable); - value += cmJoin(cmMakeRange(args).advance(2), std::string()); - status.GetMakefile().AddDefinition(variable, value); return true; } |