summaryrefslogtreecommitdiffstats
path: root/library/cpp/yt/yson_string/string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'library/cpp/yt/yson_string/string.cpp')
-rw-r--r--library/cpp/yt/yson_string/string.cpp25
1 files changed, 7 insertions, 18 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);
});
}