diff options
author | babenko <babenko@yandex-team.ru> | 2022-02-10 16:49:19 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:49:19 +0300 |
commit | cec37806d8847aa3db53bafc9e251d4aaf325c12 (patch) | |
tree | 4a61c191e93e31d9ab423e258c71ab43550ee3d2 /library/cpp/yt/yson_string/string.cpp | |
parent | 58cd0b86ed99a72df22479e26a20bc1c1e57e65e (diff) | |
download | ydb-cec37806d8847aa3db53bafc9e251d4aaf325c12.tar.gz |
Restoring authorship annotation for <babenko@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp/yt/yson_string/string.cpp')
-rw-r--r-- | library/cpp/yt/yson_string/string.cpp | 288 |
1 files changed, 144 insertions, 144 deletions
diff --git a/library/cpp/yt/yson_string/string.cpp b/library/cpp/yt/yson_string/string.cpp index 99d45e8616..3643a7107d 100644 --- a/library/cpp/yt/yson_string/string.cpp +++ b/library/cpp/yt/yson_string/string.cpp @@ -1,185 +1,185 @@ #include "string.h" - -#include <library/cpp/yt/assert/assert.h> - -#include <library/cpp/yt/misc/variant.h> - -#include <library/cpp/yt/memory/new.h> - -namespace NYT::NYson { - -//////////////////////////////////////////////////////////////////////////////// - -TYsonStringBuf::TYsonStringBuf() -{ - Type_ = EYsonType::Node; // fake - Null_ = true; -} - -TYsonStringBuf::TYsonStringBuf(const TYsonString& ysonString) -{ - if (ysonString) { - Data_ = ysonString.AsStringBuf(); - Type_ = ysonString.GetType(); - Null_ = false; - } else { - Type_ = EYsonType::Node; // fake - Null_ = true; - } -} - -TYsonStringBuf::TYsonStringBuf(const TString& data, EYsonType type) - : TYsonStringBuf(TStringBuf(data), type) -{ } - -TYsonStringBuf::TYsonStringBuf(TStringBuf data, EYsonType type) - : Data_(data) + +#include <library/cpp/yt/assert/assert.h> + +#include <library/cpp/yt/misc/variant.h> + +#include <library/cpp/yt/memory/new.h> + +namespace NYT::NYson { + +//////////////////////////////////////////////////////////////////////////////// + +TYsonStringBuf::TYsonStringBuf() +{ + Type_ = EYsonType::Node; // fake + Null_ = true; +} + +TYsonStringBuf::TYsonStringBuf(const TYsonString& ysonString) +{ + if (ysonString) { + Data_ = ysonString.AsStringBuf(); + Type_ = ysonString.GetType(); + Null_ = false; + } else { + Type_ = EYsonType::Node; // fake + Null_ = true; + } +} + +TYsonStringBuf::TYsonStringBuf(const TString& data, EYsonType type) + : TYsonStringBuf(TStringBuf(data), type) +{ } + +TYsonStringBuf::TYsonStringBuf(TStringBuf data, EYsonType type) + : Data_(data) , Type_(type) - , Null_(false) + , Null_(false) { } TYsonStringBuf::TYsonStringBuf(const char* data, EYsonType type) : TYsonStringBuf(TStringBuf(data), type) { } -TYsonStringBuf::operator bool() const -{ - return !Null_; -} - -TStringBuf TYsonStringBuf::AsStringBuf() const -{ - YT_VERIFY(*this); - return Data_; -} - -EYsonType TYsonStringBuf::GetType() const -{ - YT_VERIFY(*this); - return Type_; -} - -//////////////////////////////////////////////////////////////////////////////// - -TYsonString::TYsonString() -{ - Begin_ = nullptr; - Size_ = 0; - Type_ = EYsonType::Node; // fake -} - -TYsonString::TYsonString(const TYsonStringBuf& ysonStringBuf) -{ - if (ysonStringBuf) { - struct TCapturedYsonStringPayload - : public TRefCounted - , public TWithExtraSpace<TCapturedYsonStringPayload> - { - char* GetData() - { - return static_cast<char*>(GetExtraSpacePtr()); - } - }; - - auto data = ysonStringBuf.AsStringBuf(); - auto payload = NewWithExtraSpace<TCapturedYsonStringPayload>(data.length()); - ::memcpy(payload->GetData(), data.data(), data.length()); - Payload_ = payload; - Begin_ = payload->GetData(); - Size_ = data.Size(); - Type_ = ysonStringBuf.GetType(); +TYsonStringBuf::operator bool() const +{ + return !Null_; +} + +TStringBuf TYsonStringBuf::AsStringBuf() const +{ + YT_VERIFY(*this); + return Data_; +} + +EYsonType TYsonStringBuf::GetType() const +{ + YT_VERIFY(*this); + return Type_; +} + +//////////////////////////////////////////////////////////////////////////////// + +TYsonString::TYsonString() +{ + Begin_ = nullptr; + Size_ = 0; + Type_ = EYsonType::Node; // fake +} + +TYsonString::TYsonString(const TYsonStringBuf& ysonStringBuf) +{ + if (ysonStringBuf) { + struct TCapturedYsonStringPayload + : public TRefCounted + , public TWithExtraSpace<TCapturedYsonStringPayload> + { + char* GetData() + { + return static_cast<char*>(GetExtraSpacePtr()); + } + }; + + auto data = ysonStringBuf.AsStringBuf(); + auto payload = NewWithExtraSpace<TCapturedYsonStringPayload>(data.length()); + ::memcpy(payload->GetData(), data.data(), data.length()); + Payload_ = payload; + Begin_ = payload->GetData(); + Size_ = data.Size(); + Type_ = ysonStringBuf.GetType(); } else { - Begin_ = nullptr; - Size_ = 0; - Type_ = EYsonType::Node; // fake - } -} - -TYsonString::TYsonString( - TStringBuf data, - EYsonType type) - : TYsonString(TYsonStringBuf(data, type)) + Begin_ = nullptr; + Size_ = 0; + Type_ = EYsonType::Node; // fake + } +} + +TYsonString::TYsonString( + TStringBuf data, + EYsonType type) + : TYsonString(TYsonStringBuf(data, type)) { } #ifdef TSTRING_IS_STD_STRING -TYsonString::TYsonString( +TYsonString::TYsonString( const TString& data, - EYsonType type) + EYsonType type) : TYsonString(TYsonStringBuf(data, 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; -} + Payload_ = data; + Begin_ = data.data(); + Size_ = data.length(); + Type_ = type; +} #endif -TYsonString::TYsonString( - const TSharedRef& data, - EYsonType type) -{ - Payload_ = data.GetHolder(); - Begin_ = data.Begin(); - Size_ = data.Size(); - Type_ = type; +TYsonString::TYsonString( + const TSharedRef& data, + EYsonType type) +{ + Payload_ = data.GetHolder(); + Begin_ = data.Begin(); + Size_ = data.Size(); + Type_ = type; +} + +TYsonString::operator bool() const +{ + return !std::holds_alternative<TNullPayload>(Payload_); } -TYsonString::operator bool() const +EYsonType TYsonString::GetType() const { - return !std::holds_alternative<TNullPayload>(Payload_); -} - -EYsonType TYsonString::GetType() const + YT_VERIFY(*this); + return Type_; +} + +TStringBuf TYsonString::AsStringBuf() const { - YT_VERIFY(*this); - return Type_; + YT_VERIFY(*this); + return TStringBuf(Begin_, Begin_ + Size_); } -TStringBuf TYsonString::AsStringBuf() const +TString TYsonString::ToString() const { - YT_VERIFY(*this); - return TStringBuf(Begin_, Begin_ + Size_); -} - -TString TYsonString::ToString() const -{ - return Visit( - Payload_, - [] (const TNullPayload&) -> TString { - YT_ABORT(); - }, + return Visit( + Payload_, + [] (const TNullPayload&) -> TString { + YT_ABORT(); + }, [&] (const TRefCountedPtr&) { - return TString(AsStringBuf()); - }, - [] (const TString& payload) { - return payload; - }); + return TString(AsStringBuf()); + }, + [] (const TString& payload) { + return payload; + }); } -size_t TYsonString::ComputeHash() const +size_t TYsonString::ComputeHash() const { - return THash<TStringBuf>()(TStringBuf(Begin_, Begin_ + Size_)); + return THash<TStringBuf>()(TStringBuf(Begin_, Begin_ + Size_)); } -//////////////////////////////////////////////////////////////////////////////// - +//////////////////////////////////////////////////////////////////////////////// + TString ToString(const TYsonString& yson) -{ - return yson.ToString(); -} - +{ + return yson.ToString(); +} + TString ToString(const TYsonStringBuf& yson) { - return TString(yson.AsStringBuf()); + return TString(yson.AsStringBuf()); } -//////////////////////////////////////////////////////////////////////////////// - -} // namespace NYT::NYson +//////////////////////////////////////////////////////////////////////////////// + +} // namespace NYT::NYson |