aboutsummaryrefslogtreecommitdiffstats
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
parentaeb2aad9549aee2e15061a058a58dece9bc09542 (diff)
downloadydb-b1e6ce7af7491ef60cd45899e905e4f2247f1bca.tar.gz
YT: Support multiple literals in YPathJoin
-rw-r--r--library/cpp/yt/string/string_builder-inl.h15
-rw-r--r--library/cpp/yt/string/string_builder.h6
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;
};
////////////////////////////////////////////////////////////////////////////////