summaryrefslogtreecommitdiffstats
path: root/Source/cmStringCommand.cxx
diff options
context:
space:
mode:
authorOleksandr Koval <oleksandr.koval.dev@gmail.com>2020-09-03 20:25:37 (GMT)
committerOleksandr Koval <oleksandr.koval.dev@gmail.com>2020-09-03 20:25:37 (GMT)
commit38928ee3ee40179ec4ad295c72cf5aaa213f617e (patch)
tree3201e3a0c612cbf6dab0bf9ca44e87c688ae21ec /Source/cmStringCommand.cxx
parentca5babfd7a1da8e32f927ad086fdd91c2b09853b (diff)
downloadCMake-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.cxx12
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;
}