aboutsummaryrefslogtreecommitdiffstats
path: root/util/generic/string.h
diff options
context:
space:
mode:
authorignatloskutov <ignatloskutov@yandex-team.com>2023-08-10 19:38:26 +0300
committerignatloskutov <ignatloskutov@yandex-team.com>2023-08-10 21:04:00 +0300
commitea943290d0e41b41d577fc00e8953dbb963a8cc4 (patch)
treeca81e8aaf3e622ef95eeb6fa50ebca41361dd528 /util/generic/string.h
parent94c58b86cb9d905597638de1ea0932c364d1819d (diff)
downloadydb-ea943290d0e41b41d577fc00e8953dbb963a8cc4.tar.gz
TString: improve `operator+` rvalue overloads
The missing `(TCharType, TBasicString&&)` overload added, so no allocation is performed if the string has spare capacity.
Diffstat (limited to 'util/generic/string.h')
-rw-r--r--util/generic/string.h9
1 files changed, 7 insertions, 2 deletions
diff --git a/util/generic/string.h b/util/generic/string.h
index fd3c771749..4184ea3761 100644
--- a/util/generic/string.h
+++ b/util/generic/string.h
@@ -904,6 +904,11 @@ public:
return Join(TCharType(ch), s);
}
+ friend TBasicString operator+(TExplicitType<TCharType> ch, TBasicString&& s) Y_WARN_UNUSED_RESULT {
+ s.prepend(ch);
+ return std::move(s);
+ }
+
friend TBasicString operator+(const TBasicString& s1, const TBasicString& s2) Y_WARN_UNUSED_RESULT {
return Join(s1, s2);
}
@@ -939,11 +944,11 @@ public:
}
friend TBasicString operator+(std::basic_string<TCharType, TTraits> l, TBasicString r) {
- return l + r.ConstRef();
+ return std::move(l) + r.ConstRef();
}
friend TBasicString operator+(TBasicString l, std::basic_string<TCharType, TTraits> r) {
- return l.ConstRef() + r;
+ return l.ConstRef() + std::move(r);
}
// ~~~ Prepending ~~~ : FAMILY0(TBasicString&, prepend);