summaryrefslogtreecommitdiffstats
path: root/library/cpp/yt/yson_string
diff options
context:
space:
mode:
authorbabenko <[email protected]>2025-12-24 23:29:35 +0300
committerbabenko <[email protected]>2025-12-24 23:45:58 +0300
commit4dbf62fd2f8cc5ece53cc1446561cf71476bdd12 (patch)
tree9aab73c043bf8f6dc177b06f69dab4336dadfcba /library/cpp/yt/yson_string
parentdba8986f6b1a5fc7c4f230bee510113995a48970 (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.cpp25
-rw-r--r--library/cpp/yt/yson_string/string.h4
-rw-r--r--library/cpp/yt/yson_string/ya.make1
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