diff options
| author | babenko <[email protected]> | 2025-12-24 23:29:35 +0300 |
|---|---|---|
| committer | babenko <[email protected]> | 2025-12-24 23:45:58 +0300 |
| commit | 4dbf62fd2f8cc5ece53cc1446561cf71476bdd12 (patch) | |
| tree | 9aab73c043bf8f6dc177b06f69dab4336dadfcba /library/cpp/yt/yson_string | |
| parent | dba8986f6b1a5fc7c4f230bee510113995a48970 (diff) | |
Explicitly use TCowString in TYsonString
Для ревьюеров: изменения вне `library/cpp/yt` убирают `using namespace NYT` из хедера. Эта конструкция приводила к клешу имен глобального неймспейса и `NYT` и ошибкам сборки.
commit_hash:f598da488a6dd8671af9f1f02870ab5612ae46eb
Diffstat (limited to 'library/cpp/yt/yson_string')
| -rw-r--r-- | library/cpp/yt/yson_string/string.cpp | 25 | ||||
| -rw-r--r-- | library/cpp/yt/yson_string/string.h | 4 | ||||
| -rw-r--r-- | library/cpp/yt/yson_string/ya.make | 1 |
3 files changed, 11 insertions, 19 deletions
diff --git a/library/cpp/yt/yson_string/string.cpp b/library/cpp/yt/yson_string/string.cpp index 45a6aa7f099..c21783b204a 100644 --- a/library/cpp/yt/yson_string/string.cpp +++ b/library/cpp/yt/yson_string/string.cpp @@ -91,25 +91,14 @@ TYsonString::TYsonString( : TYsonString(TYsonStringBuf(data, type)) { } -#ifdef TSTRING_IS_STD_STRING TYsonString::TYsonString( const TString& data, EYsonType type) - : TYsonString(TYsonStringBuf(data, type)) + : Payload_(TCowString(data)) + , Begin_(std::get<TCowString>(Payload_).data()) + , Size_(data.length()) + , Type_(type) { } -#else -TYsonString::TYsonString( - const TString& data, - EYsonType type) -{ - // NOTE: CoW TString implementation is assumed - // Moving the payload MUST NOT invalidate its internal pointers - Payload_ = data; - Begin_ = data.data(); - Size_ = data.length(); - Type_ = type; -} -#endif TYsonString::TYsonString( const TSharedRef& data, @@ -148,8 +137,8 @@ TString TYsonString::ToString() const [&] (const TSharedRangeHolderPtr&) { return TString(AsStringBuf()); }, - [] (const TString& payload) { - return payload; + [] (const TCowString& payload) { + return TString(payload); }); } @@ -163,7 +152,7 @@ TSharedRef TYsonString::ToSharedRef() const [&] (const TSharedRangeHolderPtr& holder) { return TSharedRef(Begin_, Size_, holder); }, - [] (const TString& payload) { + [] (const TCowString& payload) { return TSharedRef::FromString(payload); }); } diff --git a/library/cpp/yt/yson_string/string.h b/library/cpp/yt/yson_string/string.h index 8fbe415e0fd..b9f44e6dccd 100644 --- a/library/cpp/yt/yson_string/string.h +++ b/library/cpp/yt/yson_string/string.h @@ -6,6 +6,8 @@ #include <library/cpp/yt/string/format.h> +#include <library/cpp/containers/cow_string/cow_string.h> + #include <variant> namespace NYT::NYson { @@ -117,7 +119,7 @@ private: struct TNullPayload { }; - std::variant<TNullPayload, TSharedRangeHolderPtr, TString> Payload_; + std::variant<TNullPayload, TSharedRangeHolderPtr, TCowString> Payload_; const char* Begin_; ui64 Size_ : 56; diff --git a/library/cpp/yt/yson_string/ya.make b/library/cpp/yt/yson_string/ya.make index ba693760f10..da180de5471 100644 --- a/library/cpp/yt/yson_string/ya.make +++ b/library/cpp/yt/yson_string/ya.make @@ -8,6 +8,7 @@ SRCS( ) PEERDIR( + library/cpp/containers/cow_string library/cpp/yt/assert library/cpp/yt/coding library/cpp/yt/exception |
