From 87ce390379440febee9caa500e527afa3fa55bef Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Fri, 9 Jun 2023 07:46:15 -0700 Subject: The previous code was using `memmove` under the hood (`string::append`). This patch makes it use `memcpy` for performance and consistency with other overloads. PiperOrigin-RevId: 539079130 Change-Id: I5aea9dd9b8a1ce708c787df7d6c9a75ae419c484 --- absl/strings/str_cat.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/absl/strings/str_cat.cc b/absl/strings/str_cat.cc index 6c198f85..2e49c31b 100644 --- a/absl/strings/str_cat.cc +++ b/absl/strings/str_cat.cc @@ -146,7 +146,13 @@ void AppendPieces(std::string* dest, void StrAppend(std::string* dest, const AlphaNum& a) { ASSERT_NO_OVERLAP(*dest, a); - dest->append(a.data(), a.size()); + std::string::size_type old_size = dest->size(); + strings_internal::STLStringResizeUninitializedAmortized(dest, + old_size + a.size()); + char* const begin = &(*dest)[0]; + char* out = begin + old_size; + out = Append(out, a); + assert(out == begin + dest->size()); } void StrAppend(std::string* dest, const AlphaNum& a, const AlphaNum& b) { -- cgit v1.2.3