diff options
| author | babenko <[email protected]> | 2026-05-18 18:23:26 +0300 |
|---|---|---|
| committer | babenko <[email protected]> | 2026-05-18 18:44:09 +0300 |
| commit | b7add35b490546eabbcd8ee474117c90cd6819ac (patch) | |
| tree | bc03314b91f85f2145dbd719169da527ab76b0fa /library/cpp | |
| parent | fdb5a72481f8924abbc5e3215b68d7fa9c04eedf (diff) | |
YT-22593: Migrate yt/yt/ytree to std::string
commit_hash:3466775b052bc8a85a2aa85e9605968e7a5ea025
Diffstat (limited to 'library/cpp')
| -rw-r--r-- | library/cpp/yt/yson_string/string.cpp | 34 | ||||
| -rw-r--r-- | library/cpp/yt/yson_string/string.h | 20 | ||||
| -rw-r--r-- | library/cpp/yt/yson_string/unittests/saveload_ut.cpp | 2 |
3 files changed, 36 insertions, 20 deletions
diff --git a/library/cpp/yt/yson_string/string.cpp b/library/cpp/yt/yson_string/string.cpp index c21783b204a..2680cdbcdcf 100644 --- a/library/cpp/yt/yson_string/string.cpp +++ b/library/cpp/yt/yson_string/string.cpp @@ -61,13 +61,6 @@ EYsonType TYsonStringBuf::GetType() const //////////////////////////////////////////////////////////////////////////////// -TYsonString::TYsonString() -{ - Begin_ = nullptr; - Size_ = 0; - Type_ = EYsonType::Node; // fake -} - TYsonString::TYsonString(const TYsonStringBuf& ysonStringBuf) { if (ysonStringBuf) { @@ -94,21 +87,32 @@ TYsonString::TYsonString( TYsonString::TYsonString( const TString& data, EYsonType type) - : Payload_(TCowString(data)) + : TYsonString(TCowString(data), type) +{ } + +TYsonString::TYsonString( + TCowString data, + EYsonType type) + : Payload_(std::move(data)) , Begin_(std::get<TCowString>(Payload_).data()) - , Size_(data.length()) + , Size_(std::get<TCowString>(Payload_).length()) , Type_(type) { } TYsonString::TYsonString( + std::string data, + EYsonType type) + : TYsonString(TCowString(std::move(data)), type) +{ } + +TYsonString::TYsonString( const TSharedRef& data, EYsonType type) -{ - Payload_ = data.GetHolder(); - Begin_ = data.Begin(); - Size_ = data.Size(); - Type_ = type; -} + : Payload_(data.GetHolder()) + , Begin_(data.Begin()) + , Size_(data.Size()) + , Type_(type) +{ } TYsonString::operator bool() const { diff --git a/library/cpp/yt/yson_string/string.h b/library/cpp/yt/yson_string/string.h index 45cec2fb8c1..c93240ebade 100644 --- a/library/cpp/yt/yson_string/string.h +++ b/library/cpp/yt/yson_string/string.h @@ -67,7 +67,7 @@ class TYsonString { public: //! Constructs a null instance. - TYsonString(); + TYsonString() = default; //! Constructs an instance from TYsonStringBuf. //! Copies the data into a ref-counted payload. @@ -85,6 +85,18 @@ public: const TString& data, EYsonType type = EYsonType::Node); + //! Constructs an instance from TCowString. + //! Zero-copy: retains the reference to TCowString in payload. + explicit TYsonString( + TCowString data, + EYsonType type = EYsonType::Node); + + //! Constructs an instance from std::string. + //! Moves #data into a ref-counted payload. + explicit TYsonString( + std::string data, + EYsonType type = EYsonType::Node); + //! Constructs an instance from TSharedRef. //! Zero-copy; retains the reference to TSharedRef holder in payload. explicit TYsonString( @@ -121,9 +133,9 @@ private: std::variant<TNullPayload, TSharedRangeHolderPtr, TCowString> Payload_; - const char* Begin_; - ui64 Size_ : 56; - EYsonType Type_ : 8; + const char* Begin_ = nullptr; + ui64 Size_ : 56 = 0; + EYsonType Type_ : 8 = EYsonType::Node; }; //////////////////////////////////////////////////////////////////////////////// diff --git a/library/cpp/yt/yson_string/unittests/saveload_ut.cpp b/library/cpp/yt/yson_string/unittests/saveload_ut.cpp index 33a98a30ea4..a7700fb2ff6 100644 --- a/library/cpp/yt/yson_string/unittests/saveload_ut.cpp +++ b/library/cpp/yt/yson_string/unittests/saveload_ut.cpp @@ -31,7 +31,7 @@ TEST(TYsonStringTest, SaveLoadString) TEST(TYsonStringTest, SaveLoadSharedRef) { - TSharedRef ref = TSharedRef::FromString("My tests data"); + auto ref = TSharedRef::FromString("My tests data"); const TYsonString expected(ref); TStringStream s; ::Save(&s, expected); |
