From a6e8811cf0d0b9dbb09c984d427e651eb29d9faf Mon Sep 17 00:00:00 2001 From: Nicolas van Kempen Date: Mon, 3 Jul 2023 17:05:01 -0400 Subject: cmList: Fix performance regression in Join / to_string Refactoring in commit 45f17e5a85 (cmList: Add container conversion to string, 2023-06-20) accidentally introduced unnecessary string copies and allocations. Remove unnecessary copies. --- Source/cmList.h | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/Source/cmList.h b/Source/cmList.h index 9ee4a46..dc5850a 100644 --- a/Source/cmList.h +++ b/Source/cmList.h @@ -1211,13 +1211,12 @@ private: const auto sep = std::string{ glue }; - return std::accumulate( - std::next(std::begin(r)), std::end(r), cmList::ToString(*std::begin(r)), - [&sep](std::string const& a, - typename std::iterator_traits::value_type const& b) -> std::string { - return a + sep + cmList::ToString(b); - }); + std::string joined = cmList::ToString(*std::begin(r)); + for (auto it = std::next(std::begin(r)); it != std::end(r); ++it) { + joined += sep + cmList::ToString(*it); + } + + return joined; } container_type Values; -- cgit v0.12