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 | |
parent | aeb2aad9549aee2e15061a058a58dece9bc09542 (diff) | |
download | ydb-b1e6ce7af7491ef60cd45899e905e4f2247f1bca.tar.gz |
YT: Support multiple literals in YPathJoin
-rw-r--r-- | library/cpp/yt/string/string_builder-inl.h | 15 | ||||
-rw-r--r-- | library/cpp/yt/string/string_builder.h | 6 |
2 files changed, 14 insertions, 7 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(); diff --git a/library/cpp/yt/string/string_builder.h b/library/cpp/yt/string/string_builder.h index 9fddacba11..4ac9020177 100644 --- a/library/cpp/yt/string/string_builder.h +++ b/library/cpp/yt/string/string_builder.h @@ -26,6 +26,8 @@ public: char* Preallocate(size_t size); + void Reserve(size_t size); + size_t GetLength() const; TStringBuf GetBuffer() const; @@ -51,7 +53,7 @@ protected: char* End_ = nullptr; virtual void DoReset() = 0; - virtual void DoPreallocate(size_t newLength) = 0; + virtual void DoReserve(size_t newLength) = 0; static constexpr size_t MinBufferLength = 128; }; @@ -68,7 +70,7 @@ protected: TString Buffer_; void DoReset() override; - void DoPreallocate(size_t size) override; + void DoReserve(size_t size) override; }; //////////////////////////////////////////////////////////////////////////////// |