diff options
author | Devtools Arcadia <arcadia-devtools@yandex-team.ru> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <arcadia-devtools@mous.vla.yp-c.yandex.net> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /library/cpp/yson_pull/scalar.cpp | |
download | ydb-1110808a9d39d4b808aef724c861a2e1a38d2a69.tar.gz |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'library/cpp/yson_pull/scalar.cpp')
-rw-r--r-- | library/cpp/yson_pull/scalar.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/library/cpp/yson_pull/scalar.cpp b/library/cpp/yson_pull/scalar.cpp new file mode 100644 index 0000000000..4325542e7a --- /dev/null +++ b/library/cpp/yson_pull/scalar.cpp @@ -0,0 +1,57 @@ +#include "scalar.h" + +#include <library/cpp/yson_pull/detail/cescape.h> + +#include <util/stream/output.h> + +using namespace NYsonPull; + +template <> +void Out<TScalar>(IOutputStream& out, const TScalar& value) { + out << '(' << value.Type(); + if (value.Type() != EScalarType::Entity) { + out << ' '; + } + switch (value.Type()) { + case EScalarType::Boolean: + out << (value.AsBoolean() ? "true" : "false"); + break; + case EScalarType::String: + out << NYsonPull::NDetail::NCEscape::quote(value.AsString()); + break; + case EScalarType::Int64: + out << value.AsInt64(); + break; + case EScalarType::UInt64: + out << value.AsUInt64(); + break; + case EScalarType::Float64: + out << value.AsFloat64(); + break; + default: + break; + } + out << ')'; +} + +bool NYsonPull::operator==(const TScalar& left, const TScalar& right) noexcept { + if (left.Type() != right.Type()) { + return false; + } + switch (left.Type()) { + case EScalarType::Boolean: + return left.AsBoolean() == right.AsBoolean(); + case EScalarType::String: + return left.AsString() == right.AsString(); + case EScalarType::Int64: + return left.AsInt64() == right.AsInt64(); + case EScalarType::UInt64: + return left.AsUInt64() == right.AsUInt64(); + case EScalarType::Float64: + return left.AsFloat64() == right.AsFloat64(); + case EScalarType::Entity: + return true; + default: + Y_UNREACHABLE(); + } +} |