aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authorarkady-e1ppa <arkady-e1ppa@yandex-team.com>2024-07-02 15:28:09 +0300
committerarkady-e1ppa <arkady-e1ppa@yandex-team.com>2024-07-02 15:40:39 +0300
commit3336f268eb26aa0318cd3fa3f97116c43545f87b (patch)
tree047395a3b7bf0751a86c5676a9c103e168e47e3c /library/cpp
parentaa95a328ada306559bd361a96c5348829d0e562e (diff)
downloadydb-3336f268eb26aa0318cd3fa3f97116c43545f87b.tar.gz
YT-21868: Reorganize files to prevent unclear missing include errors
Moving files around so that include of either `string_builder.h` or `format.h` would result in being able to use both `Format` and `TStringBuilder` 8a2abbea2ae7027c1cd3a243ab3de55bdd5d3d27
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/yt/string/enum-inl.h1
-rw-r--r--library/cpp/yt/string/enum.h2
-rw-r--r--library/cpp/yt/string/format-inl.h177
-rw-r--r--library/cpp/yt/string/format.h75
-rw-r--r--library/cpp/yt/string/guid.cpp4
-rw-r--r--library/cpp/yt/string/guid.h8
-rw-r--r--library/cpp/yt/string/string-inl.h158
-rw-r--r--library/cpp/yt/string/string.h83
-rw-r--r--library/cpp/yt/string/string_builder-inl.h191
-rw-r--r--library/cpp/yt/string/string_builder.h78
10 files changed, 433 insertions, 344 deletions
diff --git a/library/cpp/yt/string/enum-inl.h b/library/cpp/yt/string/enum-inl.h
index d9f8239cbd..41f7197d15 100644
--- a/library/cpp/yt/string/enum-inl.h
+++ b/library/cpp/yt/string/enum-inl.h
@@ -9,6 +9,7 @@
#include <library/cpp/yt/exception/exception.h>
#include <util/string/printf.h>
+#include <util/string/strip.h>
namespace NYT {
diff --git a/library/cpp/yt/string/enum.h b/library/cpp/yt/string/enum.h
index b4b8d59171..792e09402d 100644
--- a/library/cpp/yt/string/enum.h
+++ b/library/cpp/yt/string/enum.h
@@ -1,6 +1,6 @@
#pragma once
-#include "string.h"
+#include "format_arg.h"
#include <library/cpp/yt/misc/enum.h>
diff --git a/library/cpp/yt/string/format-inl.h b/library/cpp/yt/string/format-inl.h
index 1ff2d816c5..4eaa70bef2 100644
--- a/library/cpp/yt/string/format-inl.h
+++ b/library/cpp/yt/string/format-inl.h
@@ -4,6 +4,7 @@
#include "format.h"
#endif
+#include "guid.h"
#include "enum.h"
#include "string.h"
@@ -33,6 +34,155 @@ namespace NYT {
////////////////////////////////////////////////////////////////////////////////
+inline char* TStringBuilderBase::Preallocate(size_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(size, MinBufferLength);
+ DoReserve(newLength);
+ Current_ = Begin_ + length;
+ }
+}
+
+inline size_t TStringBuilderBase::GetLength() const
+{
+ return Current_ ? Current_ - Begin_ : 0;
+}
+
+inline TStringBuf TStringBuilderBase::GetBuffer() const
+{
+ return TStringBuf(Begin_, Current_);
+}
+
+inline void TStringBuilderBase::Advance(size_t size)
+{
+ Current_ += size;
+ YT_ASSERT(Current_ <= End_);
+}
+
+inline void TStringBuilderBase::AppendChar(char ch)
+{
+ *Preallocate(1) = ch;
+ Advance(1);
+}
+
+inline void TStringBuilderBase::AppendChar(char ch, int n)
+{
+ YT_ASSERT(n >= 0);
+ if (Y_LIKELY(0 != n)) {
+ char* dst = Preallocate(n);
+ ::memset(dst, ch, n);
+ Advance(n);
+ }
+}
+
+inline void TStringBuilderBase::AppendString(TStringBuf str)
+{
+ if (Y_LIKELY(str)) {
+ char* dst = Preallocate(str.length());
+ ::memcpy(dst, str.begin(), str.length());
+ Advance(str.length());
+ }
+}
+
+inline void TStringBuilderBase::AppendString(const char* str)
+{
+ AppendString(TStringBuf(str));
+}
+
+inline void TStringBuilderBase::Reset()
+{
+ Begin_ = Current_ = End_ = nullptr;
+ DoReset();
+}
+
+template <class... TArgs>
+void TStringBuilderBase::AppendFormat(TStringBuf format, TArgs&& ... args)
+{
+ Format(this, TRuntimeFormat{format}, std::forward<TArgs>(args)...);
+}
+
+template <size_t Length, class... TArgs>
+void TStringBuilderBase::AppendFormat(const char (&format)[Length], TArgs&& ... args)
+{
+ Format(this, TRuntimeFormat{format}, std::forward<TArgs>(args)...);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+inline TString TStringBuilder::Flush()
+{
+ Buffer_.resize(GetLength());
+ auto result = std::move(Buffer_);
+ Reset();
+ return result;
+}
+
+inline void TStringBuilder::DoReset()
+{
+ Buffer_ = {};
+}
+
+inline void TStringBuilder::DoReserve(size_t newLength)
+{
+ Buffer_.ReserveAndResize(newLength);
+ auto capacity = Buffer_.capacity();
+ Buffer_.ReserveAndResize(capacity);
+ Begin_ = &*Buffer_.begin();
+ End_ = Begin_ + capacity;
+}
+
+inline void FormatValue(TStringBuilderBase* builder, const TStringBuilder& value, TStringBuf /*spec*/)
+{
+ builder->AppendString(value.GetBuffer());
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+TString ToStringViaBuilder(const T& value, TStringBuf spec)
+{
+ TStringBuilder builder;
+ FormatValue(&builder, value, spec);
+ return builder.Flush();
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+// Compatibility for users of NYT::ToString(nyt_type).
+template <CFormattable T>
+TString ToString(const T& t)
+{
+ return ToStringViaBuilder(t);
+}
+
+// Sometime we want to implement
+// FormatValue using util's ToString
+// However, if we inside the FormatValue
+// we cannot just call the ToString since
+// in this scope T is already CFormattable
+// and ToString will call the very
+// FormatValue we are implementing,
+// causing an infinite recursion loop.
+// This method is basically a call to
+// util's ToString default implementation.
+template <class T>
+TString ToStringIgnoringFormatValue(const T& t)
+{
+ TString s;
+ ::TStringOutput o(s);
+ o << t;
+ return s;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
// Helper functions for formatting.
namespace NDetail {
@@ -887,3 +1037,30 @@ TString FormatVector(
////////////////////////////////////////////////////////////////////////////////
} // namespace NYT
+
+#include <util/string/cast.h>
+
+// util/string/cast.h extension for yt and std types only
+// TODO(arkady-e1ppa): Abolish ::ToString in
+// favour of either NYT::ToString or
+// automatic formatting wherever it is needed.
+namespace NPrivate {
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+ requires (
+ (NYT::NDetail::IsNYTName<T>() ||
+ NYT::NDetail::IsStdName<T>()) &&
+ NYT::CFormattable<T>)
+struct TToString<T, false>
+{
+ static TString Cvt(const T& t)
+ {
+ return NYT::ToStringViaBuilder(t);
+ }
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+} // namespace NPrivate
diff --git a/library/cpp/yt/string/format.h b/library/cpp/yt/string/format.h
index 9e12d286b7..a6ab1f76f4 100644
--- a/library/cpp/yt/string/format.h
+++ b/library/cpp/yt/string/format.h
@@ -1,6 +1,8 @@
#pragma once
-#include "string_builder.h"
+#include "format_string.h"
+
+#include <util/generic/string.h>
namespace NYT {
@@ -55,12 +57,79 @@ namespace NYT {
*/
template <class... TArgs>
-void Format(TStringBuilderBase* builder, TFormatString<TArgs...> format, TArgs&&... args);
-template <class... TArgs>
TString Format(TFormatString<TArgs...> format, TArgs&&... args);
////////////////////////////////////////////////////////////////////////////////
+// StringBuilder(Base) definition.
+
+//! A simple helper for constructing strings by a sequence of appends.
+class TStringBuilderBase
+{
+public:
+ virtual ~TStringBuilderBase() = default;
+
+ char* Preallocate(size_t size);
+
+ void Reserve(size_t size);
+
+ size_t GetLength() const;
+
+ TStringBuf GetBuffer() const;
+
+ void Advance(size_t size);
+
+ void AppendChar(char ch);
+ void AppendChar(char ch, int n);
+
+ void AppendString(TStringBuf str);
+ void AppendString(const char* str);
+
+ template <size_t Length, class... TArgs>
+ void AppendFormat(const char (&format)[Length], TArgs&&... args);
+ template <class... TArgs>
+ void AppendFormat(TStringBuf format, TArgs&&... args);
+
+ void Reset();
+
+protected:
+ char* Begin_ = nullptr;
+ char* Current_ = nullptr;
+ char* End_ = nullptr;
+
+ virtual void DoReset() = 0;
+ virtual void DoReserve(size_t newLength) = 0;
+
+ static constexpr size_t MinBufferLength = 128;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+class TStringBuilder
+ : public TStringBuilderBase
+{
+public:
+ TString Flush();
+
+protected:
+ TString Buffer_;
+
+ void DoReset() override;
+ void DoReserve(size_t size) override;
+};
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class... TArgs>
+void Format(TStringBuilderBase* builder, TFormatString<TArgs...> format, TArgs&&... args);
+
+////////////////////////////////////////////////////////////////////////////////
+
+template <class T>
+TString ToStringViaBuilder(const T& value, TStringBuf spec = TStringBuf("v"));
+
+////////////////////////////////////////////////////////////////////////////////
+
template <class TRange, class TFormatter>
struct TFormattableView
{
diff --git a/library/cpp/yt/string/guid.cpp b/library/cpp/yt/string/guid.cpp
index 2a781d032d..b18ac3e128 100644
--- a/library/cpp/yt/string/guid.cpp
+++ b/library/cpp/yt/string/guid.cpp
@@ -1,10 +1,12 @@
#include "guid.h"
+#include "format.h"
+
namespace NYT {
////////////////////////////////////////////////////////////////////////////////
-void FormatValue(TStringBuilderBase* builder, TGuid value, TStringBuf /*format*/)
+void FormatValue(TStringBuilderBase* builder, TGuid value, TStringBuf /*spec*/)
{
char* begin = builder->Preallocate(MaxGuidStringSize);
char* end = WriteGuidToBuffer(begin, value);
diff --git a/library/cpp/yt/string/guid.h b/library/cpp/yt/string/guid.h
index de16993486..fd3943bafd 100644
--- a/library/cpp/yt/string/guid.h
+++ b/library/cpp/yt/string/guid.h
@@ -1,12 +1,14 @@
-#include <library/cpp/yt/misc/guid.h>
+#pragma once
+
+#include "format_arg.h"
-#include "format.h"
+#include <library/cpp/yt/misc/guid.h>
namespace NYT {
////////////////////////////////////////////////////////////////////////////////
-void FormatValue(TStringBuilderBase* builder, TGuid value, TStringBuf /*format*/);
+void FormatValue(TStringBuilderBase* builder, TGuid value, TStringBuf /*spec*/);
////////////////////////////////////////////////////////////////////////////////
diff --git a/library/cpp/yt/string/string-inl.h b/library/cpp/yt/string/string-inl.h
new file mode 100644
index 0000000000..baf789b4f1
--- /dev/null
+++ b/library/cpp/yt/string/string-inl.h
@@ -0,0 +1,158 @@
+#ifndef STRING_INL_H_
+#error "Direct inclusion of this file is not allowed, include string.h"
+// For the sake of sane code completion.
+#include "string.h"
+#endif
+
+#include "format.h"
+
+namespace NYT {
+
+////////////////////////////////////////////////////////////////////////////////
+
+//! Joins a range of items into a string intermixing them with the delimiter.
+/*!
+ * \param builder String builder where the output goes.
+ * \param begin Iterator pointing to the first item (inclusive).
+ * \param end Iterator pointing to the last item (not inclusive).
+ * \param formatter Formatter to apply to the items.
+ * \param delimiter A delimiter to be inserted between items: ", " by default.
+ * \return The resulting combined string.
+ */
+template <class TIterator, class TFormatter>
+void JoinToString(
+ TStringBuilderBase* builder,
+ const TIterator& begin,
+ const TIterator& end,
+ const TFormatter& formatter,
+ TStringBuf delimiter)
+{
+ for (auto current = begin; current != end; ++current) {
+ if (current != begin) {
+ builder->AppendString(delimiter);
+ }
+ formatter(builder, *current);
+ }
+}
+
+template <class TIterator, class TFormatter>
+TString JoinToString(
+ const TIterator& begin,
+ const TIterator& end,
+ const TFormatter& formatter,
+ TStringBuf delimiter)
+{
+ TStringBuilder builder;
+ JoinToString(&builder, begin, end, formatter, delimiter);
+ return builder.Flush();
+}
+
+//! A handy shortcut with default formatter.
+template <class TIterator>
+TString JoinToString(
+ const TIterator& begin,
+ const TIterator& end,
+ TStringBuf delimiter)
+{
+ return JoinToString(begin, end, TDefaultFormatter(), delimiter);
+}
+
+//! Joins a collection of given items into a string intermixing them with the delimiter.
+/*!
+ * \param collection A collection containing the items to be joined.
+ * \param formatter Formatter to apply to the items.
+ * \param delimiter A delimiter to be inserted between items; ", " by default.
+ */
+template <class TCollection, class TFormatter>
+TString JoinToString(
+ const TCollection& collection,
+ const TFormatter& formatter,
+ TStringBuf delimiter)
+{
+ using std::begin;
+ using std::end;
+ return JoinToString(begin(collection), end(collection), formatter, delimiter);
+}
+
+//! A handy shortcut with the default formatter.
+template <class TCollection>
+TString JoinToString(
+ const TCollection& collection,
+ TStringBuf delimiter)
+{
+ return JoinToString(collection, TDefaultFormatter(), delimiter);
+}
+
+//! Concatenates a bunch of TStringBuf-like instances into TString.
+template <class... Ts>
+TString ConcatToString(Ts... args)
+{
+ size_t length = 0;
+ ((length += args.length()), ...);
+
+ TString result;
+ result.reserve(length);
+ (result.append(args), ...);
+
+ return result;
+}
+
+//! Converts a range of items into strings.
+template <class TIter, class TFormatter>
+std::vector<TString> ConvertToStrings(
+ const TIter& begin,
+ const TIter& end,
+ const TFormatter& formatter,
+ size_t maxSize)
+{
+ std::vector<TString> result;
+ for (auto it = begin; it != end; ++it) {
+ TStringBuilder builder;
+ formatter(&builder, *it);
+ result.push_back(builder.Flush());
+ if (result.size() == maxSize) {
+ break;
+ }
+ }
+ return result;
+}
+
+//! A handy shortcut with the default formatter.
+template <class TIter>
+std::vector<TString> ConvertToStrings(
+ const TIter& begin,
+ const TIter& end,
+ size_t maxSize)
+{
+ return ConvertToStrings(begin, end, TDefaultFormatter(), maxSize);
+}
+
+//! Converts a given collection of items into strings.
+/*!
+ * \param collection A collection containing the items to be converted.
+ * \param formatter Formatter to apply to the items.
+ * \param maxSize Size limit for the resulting vector.
+ */
+template <class TCollection, class TFormatter>
+std::vector<TString> ConvertToStrings(
+ const TCollection& collection,
+ const TFormatter& formatter,
+ size_t maxSize)
+{
+ using std::begin;
+ using std::end;
+ return ConvertToStrings(begin(collection), end(collection), formatter, maxSize);
+}
+
+//! A handy shortcut with default formatter.
+template <class TCollection>
+std::vector<TString> ConvertToStrings(
+ const TCollection& collection,
+ size_t maxSize)
+{
+ return ConvertToStrings(collection, TDefaultFormatter(), maxSize);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
+} // namespace NYT
diff --git a/library/cpp/yt/string/string.h b/library/cpp/yt/string/string.h
index a131b40a2a..8257c1a5ea 100644
--- a/library/cpp/yt/string/string.h
+++ b/library/cpp/yt/string/string.h
@@ -1,6 +1,6 @@
#pragma once
-#include "string_builder.h"
+#include "format_arg.h"
#include <util/datetime/base.h>
@@ -52,37 +52,21 @@ void JoinToString(
const TIterator& begin,
const TIterator& end,
const TFormatter& formatter,
- TStringBuf delimiter = DefaultJoinToStringDelimiter)
-{
- for (auto current = begin; current != end; ++current) {
- if (current != begin) {
- builder->AppendString(delimiter);
- }
- formatter(builder, *current);
- }
-}
+ TStringBuf delimiter = DefaultJoinToStringDelimiter);
template <class TIterator, class TFormatter>
TString JoinToString(
const TIterator& begin,
const TIterator& end,
const TFormatter& formatter,
- TStringBuf delimiter = DefaultJoinToStringDelimiter)
-{
- TStringBuilder builder;
- JoinToString(&builder, begin, end, formatter, delimiter);
- return builder.Flush();
-}
+ TStringBuf delimiter = DefaultJoinToStringDelimiter);
//! A handy shortcut with default formatter.
template <class TIterator>
TString JoinToString(
const TIterator& begin,
const TIterator& end,
- TStringBuf delimiter = DefaultJoinToStringDelimiter)
-{
- return JoinToString(begin, end, TDefaultFormatter(), delimiter);
-}
+ TStringBuf delimiter = DefaultJoinToStringDelimiter);
//! Joins a collection of given items into a string intermixing them with the delimiter.
/*!
@@ -94,35 +78,17 @@ template <class TCollection, class TFormatter>
TString JoinToString(
const TCollection& collection,
const TFormatter& formatter,
- TStringBuf delimiter = DefaultJoinToStringDelimiter)
-{
- using std::begin;
- using std::end;
- return JoinToString(begin(collection), end(collection), formatter, delimiter);
-}
+ TStringBuf delimiter = DefaultJoinToStringDelimiter);
//! A handy shortcut with the default formatter.
template <class TCollection>
TString JoinToString(
const TCollection& collection,
- TStringBuf delimiter = DefaultJoinToStringDelimiter)
-{
- return JoinToString(collection, TDefaultFormatter(), delimiter);
-}
+ TStringBuf delimiter = DefaultJoinToStringDelimiter);
//! Concatenates a bunch of TStringBuf-like instances into TString.
template <class... Ts>
-TString ConcatToString(Ts... args)
-{
- size_t length = 0;
- ((length += args.length()), ...);
-
- TString result;
- result.reserve(length);
- (result.append(args), ...);
-
- return result;
-}
+TString ConcatToString(Ts... args);
//! Converts a range of items into strings.
template <class TIter, class TFormatter>
@@ -130,29 +96,14 @@ std::vector<TString> ConvertToStrings(
const TIter& begin,
const TIter& end,
const TFormatter& formatter,
- size_t maxSize = std::numeric_limits<size_t>::max())
-{
- std::vector<TString> result;
- for (auto it = begin; it != end; ++it) {
- TStringBuilder builder;
- formatter(&builder, *it);
- result.push_back(builder.Flush());
- if (result.size() == maxSize) {
- break;
- }
- }
- return result;
-}
+ size_t maxSize = std::numeric_limits<size_t>::max());
//! A handy shortcut with the default formatter.
template <class TIter>
std::vector<TString> ConvertToStrings(
const TIter& begin,
const TIter& end,
- size_t maxSize = std::numeric_limits<size_t>::max())
-{
- return ConvertToStrings(begin, end, TDefaultFormatter(), maxSize);
-}
+ size_t maxSize = std::numeric_limits<size_t>::max());
//! Converts a given collection of items into strings.
/*!
@@ -164,21 +115,13 @@ template <class TCollection, class TFormatter>
std::vector<TString> ConvertToStrings(
const TCollection& collection,
const TFormatter& formatter,
- size_t maxSize = std::numeric_limits<size_t>::max())
-{
- using std::begin;
- using std::end;
- return ConvertToStrings(begin(collection), end(collection), formatter, maxSize);
-}
+ size_t maxSize = std::numeric_limits<size_t>::max());
//! A handy shortcut with default formatter.
template <class TCollection>
std::vector<TString> ConvertToStrings(
const TCollection& collection,
- size_t maxSize = std::numeric_limits<size_t>::max())
-{
- return ConvertToStrings(collection, TDefaultFormatter(), maxSize);
-}
+ size_t maxSize = std::numeric_limits<size_t>::max());
////////////////////////////////////////////////////////////////////////////////
@@ -222,3 +165,7 @@ TStringBuf FormatBool(bool value);
////////////////////////////////////////////////////////////////////////////////
} // namespace NYT
+
+#define STRING_INL_H_
+#include "string-inl.h"
+#undef STRING_INL_H_
diff --git a/library/cpp/yt/string/string_builder-inl.h b/library/cpp/yt/string/string_builder-inl.h
deleted file mode 100644
index 24f1e33880..0000000000
--- a/library/cpp/yt/string/string_builder-inl.h
+++ /dev/null
@@ -1,191 +0,0 @@
-#ifndef STRING_BUILDER_INL_H_
-#error "Direct inclusion of this file is not allowed, include string.h"
-// For the sake of sane code completion.
-#include "string_builder.h"
-#endif
-
-#include <library/cpp/yt/assert/assert.h>
-
-#include <util/stream/str.h>
-
-namespace NYT {
-
-////////////////////////////////////////////////////////////////////////////////
-
-inline char* TStringBuilderBase::Preallocate(size_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(size, MinBufferLength);
- DoReserve(newLength);
- Current_ = Begin_ + length;
- }
-}
-
-inline size_t TStringBuilderBase::GetLength() const
-{
- return Current_ ? Current_ - Begin_ : 0;
-}
-
-inline TStringBuf TStringBuilderBase::GetBuffer() const
-{
- return TStringBuf(Begin_, Current_);
-}
-
-inline void TStringBuilderBase::Advance(size_t size)
-{
- Current_ += size;
- YT_ASSERT(Current_ <= End_);
-}
-
-inline void TStringBuilderBase::AppendChar(char ch)
-{
- *Preallocate(1) = ch;
- Advance(1);
-}
-
-inline void TStringBuilderBase::AppendChar(char ch, int n)
-{
- YT_ASSERT(n >= 0);
- if (Y_LIKELY(0 != n)) {
- char* dst = Preallocate(n);
- ::memset(dst, ch, n);
- Advance(n);
- }
-}
-
-inline void TStringBuilderBase::AppendString(TStringBuf str)
-{
- if (Y_LIKELY(str)) {
- char* dst = Preallocate(str.length());
- ::memcpy(dst, str.begin(), str.length());
- Advance(str.length());
- }
-}
-
-inline void TStringBuilderBase::AppendString(const char* str)
-{
- AppendString(TStringBuf(str));
-}
-
-inline void TStringBuilderBase::Reset()
-{
- Begin_ = Current_ = End_ = nullptr;
- DoReset();
-}
-
-template <class... TArgs>
-void TStringBuilderBase::AppendFormat(TStringBuf format, TArgs&& ... args)
-{
- Format(this, TRuntimeFormat{format}, std::forward<TArgs>(args)...);
-}
-
-template <size_t Length, class... TArgs>
-void TStringBuilderBase::AppendFormat(const char (&format)[Length], TArgs&& ... args)
-{
- Format(this, TRuntimeFormat{format}, std::forward<TArgs>(args)...);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-inline TString TStringBuilder::Flush()
-{
- Buffer_.resize(GetLength());
- auto result = std::move(Buffer_);
- Reset();
- return result;
-}
-
-inline void TStringBuilder::DoReset()
-{
- Buffer_ = {};
-}
-
-inline void TStringBuilder::DoReserve(size_t newLength)
-{
- Buffer_.ReserveAndResize(newLength);
- auto capacity = Buffer_.capacity();
- Buffer_.ReserveAndResize(capacity);
- Begin_ = &*Buffer_.begin();
- End_ = Begin_ + capacity;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-inline void FormatValue(TStringBuilderBase* builder, const TStringBuilder& value, TStringBuf /*spec*/)
-{
- builder->AppendString(value.GetBuffer());
-}
-
-template <class T>
-TString ToStringViaBuilder(const T& value, TStringBuf spec)
-{
- TStringBuilder builder;
- FormatValue(&builder, value, spec);
- return builder.Flush();
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-// Compatibility for users of NYT::ToString(nyt_type).
-template <CFormattable T>
-TString ToString(const T& t)
-{
- return ToStringViaBuilder(t);
-}
-
-// Sometime we want to implement
-// FormatValue using util's ToString
-// However, if we inside the FormatValue
-// we cannot just call the ToString since
-// in this scope T is already CFormattable
-// and ToString will call the very
-// FormatValue we are implementing,
-// causing an infinite recursion loop.
-// This method is basically a call to
-// util's ToString default implementation.
-template <class T>
-TString ToStringIgnoringFormatValue(const T& t)
-{
- TString s;
- ::TStringOutput o(s);
- o << t;
- return s;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NYT
-
-#include <util/string/cast.h>
-
-// util/string/cast.h extension for yt and std types only
-// TODO(arkady-e1ppa): Abolish ::ToString in
-// favour of either NYT::ToString or
-// automatic formatting wherever it is needed.
-namespace NPrivate {
-
-////////////////////////////////////////////////////////////////////////////////
-
-template <class T>
- requires (
- (NYT::NDetail::IsNYTName<T>() ||
- NYT::NDetail::IsStdName<T>()) &&
- NYT::CFormattable<T>)
-struct TToString<T, false>
-{
- static TString Cvt(const T& t)
- {
- return NYT::ToStringViaBuilder(t);
- }
-};
-
-////////////////////////////////////////////////////////////////////////////////
-
-} // namespace NPrivate
diff --git a/library/cpp/yt/string/string_builder.h b/library/cpp/yt/string/string_builder.h
index 4cba45bc72..de1c1abb1e 100644
--- a/library/cpp/yt/string/string_builder.h
+++ b/library/cpp/yt/string/string_builder.h
@@ -1,6 +1,6 @@
#pragma once
-#include "format_string.h"
+#include "format.h"
#include <util/generic/string.h>
@@ -8,78 +8,6 @@ namespace NYT {
////////////////////////////////////////////////////////////////////////////////
-// Forward declarations.
-class TStringBuilderBase;
-class TStringBuilder;
-class TDelimitedStringBuilderWrapper;
-
-template <class... TArgs>
-void Format(TStringBuilderBase* builder, TFormatString<TArgs...> fmt, TArgs&&... args);
-
-////////////////////////////////////////////////////////////////////////////////
-
-//! A simple helper for constructing strings by a sequence of appends.
-class TStringBuilderBase
-{
-public:
- virtual ~TStringBuilderBase() = default;
-
- char* Preallocate(size_t size);
-
- void Reserve(size_t size);
-
- size_t GetLength() const;
-
- TStringBuf GetBuffer() const;
-
- void Advance(size_t size);
-
- void AppendChar(char ch);
- void AppendChar(char ch, int n);
-
- void AppendString(TStringBuf str);
- void AppendString(const char* str);
-
- template <size_t Length, class... TArgs>
- void AppendFormat(const char (&format)[Length], TArgs&&... args);
- template <class... TArgs>
- void AppendFormat(TStringBuf format, TArgs&&... args);
-
- void Reset();
-
-protected:
- char* Begin_ = nullptr;
- char* Current_ = nullptr;
- char* End_ = nullptr;
-
- virtual void DoReset() = 0;
- virtual void DoReserve(size_t newLength) = 0;
-
- static constexpr size_t MinBufferLength = 128;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-
-class TStringBuilder
- : public TStringBuilderBase
-{
-public:
- TString Flush();
-
-protected:
- TString Buffer_;
-
- void DoReset() override;
- void DoReserve(size_t size) override;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-
-template <class T>
-TString ToStringViaBuilder(const T& value, TStringBuf spec = TStringBuf("v"));
-
-////////////////////////////////////////////////////////////////////////////////
-
//! Appends a certain delimiter starting from the second call.
class TDelimitedStringBuilderWrapper
: private TNonCopyable
@@ -111,7 +39,3 @@ private:
////////////////////////////////////////////////////////////////////////////////
} // namespace NYT
-
-#define STRING_BUILDER_INL_H_
-#include "string_builder-inl.h"
-#undef STRING_BUILDER_INL_H_