diff options
author | dgolear <dgolear@yandex-team.com> | 2022-10-18 10:14:10 +0300 |
---|---|---|
committer | dgolear <dgolear@yandex-team.com> | 2022-10-18 10:14:10 +0300 |
commit | b1e6ce7af7491ef60cd45899e905e4f2247f1bca (patch) | |
tree | 0e2b15bbe943946e19401686cd1b4fb93827e98b /library/cpp/yt/string/string_builder-inl.h | |
parent | aeb2aad9549aee2e15061a058a58dece9bc09542 (diff) | |
download | ydb-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.h | 15 |
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(); |