aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/yt/string/string_builder-inl.h
diff options
context:
space:
mode:
authordgolear <dgolear@yandex-team.com>2022-10-18 10:14:10 +0300
committerdgolear <dgolear@yandex-team.com>2022-10-18 10:14:10 +0300
commitb1e6ce7af7491ef60cd45899e905e4f2247f1bca (patch)
tree0e2b15bbe943946e19401686cd1b4fb93827e98b /library/cpp/yt/string/string_builder-inl.h
parentaeb2aad9549aee2e15061a058a58dece9bc09542 (diff)
downloadydb-b1e6ce7af7491ef60cd45899e905e4f2247f1bca.tar.gz
YT: Support multiple literals in YPathJoin
Diffstat (limited to 'library/cpp/yt/string/string_builder-inl.h')
-rw-r--r--library/cpp/yt/string/string_builder-inl.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/library/cpp/yt/string/string_builder-inl.h b/library/cpp/yt/string/string_builder-inl.h
index 151fcabf7f..414667954f 100644
--- a/library/cpp/yt/string/string_builder-inl.h
+++ b/library/cpp/yt/string/string_builder-inl.h
@@ -12,13 +12,18 @@ namespace NYT {
inline char* TStringBuilderBase::Preallocate(size_t size)
{
- if (Y_UNLIKELY(End_ - Current_ < static_cast<ssize_t>(size))) {
+ Reserve(size + GetLength());
+ return Current_;
+}
+
+inline void TStringBuilderBase::Reserve(size_t size)
+{
+ if (Y_UNLIKELY(End_ - Begin_ < static_cast<ssize_t>(size))) {
size_t length = GetLength();
- auto newLength = std::max(length + size, MinBufferLength);
- DoPreallocate(newLength);
+ auto newLength = std::max(size, MinBufferLength);
+ DoReserve(newLength);
Current_ = Begin_ + length;
}
- return Current_;
}
inline size_t TStringBuilderBase::GetLength() const
@@ -100,7 +105,7 @@ inline void TStringBuilder::DoReset()
Buffer_ = {};
}
-inline void TStringBuilder::DoPreallocate(size_t newLength)
+inline void TStringBuilder::DoReserve(size_t newLength)
{
Buffer_.ReserveAndResize(newLength);
auto capacity = Buffer_.capacity();