summaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authorbabenko <[email protected]>2026-05-18 18:23:26 +0300
committerbabenko <[email protected]>2026-05-18 18:44:09 +0300
commitb7add35b490546eabbcd8ee474117c90cd6819ac (patch)
treebc03314b91f85f2145dbd719169da527ab76b0fa /library/cpp
parentfdb5a72481f8924abbc5e3215b68d7fa9c04eedf (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.cpp34
-rw-r--r--library/cpp/yt/yson_string/string.h20
-rw-r--r--library/cpp/yt/yson_string/unittests/saveload_ut.cpp2
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);