diff options
author | inngonch <inngonch@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 | 7622df751aca736b9e1e20015e6787d5a65643b0 (patch) | |
tree | 5d5cb817648f650d76cf1076100726fd9b8448e8 /library | |
parent | 259606d47f0a87d4980322c10899f41f246ad20c (diff) | |
download | ydb-7622df751aca736b9e1e20015e6787d5a65643b0.tar.gz |
Restoring authorship annotation for <inngonch@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'library')
-rw-r--r-- | library/cpp/yson/node/node.h | 78 | ||||
-rw-r--r-- | library/cpp/yson/node/node_ut.cpp | 50 | ||||
-rw-r--r-- | library/cpp/yson/node/pybind/node.cpp | 180 | ||||
-rw-r--r-- | library/cpp/yson/node/pybind/node.h | 12 | ||||
-rw-r--r-- | library/cpp/yson/node/pybind/ya.make | 26 |
5 files changed, 173 insertions, 173 deletions
diff --git a/library/cpp/yson/node/node.h b/library/cpp/yson/node/node.h index 704d35254d..5f90f95df0 100644 --- a/library/cpp/yson/node/node.h +++ b/library/cpp/yson/node/node.h @@ -1,7 +1,7 @@ #pragma once #include <util/generic/bt_exception.h> -#include <util/generic/cast.h> +#include <util/generic/cast.h> #include <util/generic/hash.h> #include <util/generic/variant.h> #include <util/generic/vector.h> @@ -159,12 +159,12 @@ public: TListType& UncheckedAsList() noexcept; TMapType& UncheckedAsMap() noexcept; - // integer types cast + // integer types cast // makes overflow checks template<typename T> T IntCast() const; - // integers <-> double <-> string + // integers <-> double <-> string // makes overflow checks template<typename T> T ConvertTo() const; @@ -296,49 +296,49 @@ inline bool TNode::IsArithmetic() const { template<typename T> inline T TNode::IntCast() const { - if constexpr (std::is_integral<T>::value) { - try { - switch (GetType()) { - case TNode::Uint64: - return SafeIntegerCast<T>(AsUint64()); - case TNode::Int64: - return SafeIntegerCast<T>(AsInt64()); - default: - ythrow TTypeError() << "IntCast() called for type " << GetType(); + if constexpr (std::is_integral<T>::value) { + try { + switch (GetType()) { + case TNode::Uint64: + return SafeIntegerCast<T>(AsUint64()); + case TNode::Int64: + return SafeIntegerCast<T>(AsInt64()); + default: + ythrow TTypeError() << "IntCast() called for type " << GetType(); } - } catch(TBadCastException& exc) { - ythrow TTypeError() << "TBadCastException during IntCast(): " << exc.what(); - } - } else { - static_assert(sizeof(T) != sizeof(T), "implemented only for std::is_integral types"); + } catch(TBadCastException& exc) { + ythrow TTypeError() << "TBadCastException during IntCast(): " << exc.what(); + } + } else { + static_assert(sizeof(T) != sizeof(T), "implemented only for std::is_integral types"); } } template<typename T> inline T TNode::ConvertTo() const { - if constexpr (std::is_integral<T>::value) { - switch (GetType()) { - case NYT::TNode::String: - return ::FromString(AsString()); - case NYT::TNode::Int64: - case NYT::TNode::Uint64: - return IntCast<T>(); - case NYT::TNode::Double: + if constexpr (std::is_integral<T>::value) { + switch (GetType()) { + case NYT::TNode::String: + return ::FromString(AsString()); + case NYT::TNode::Int64: + case NYT::TNode::Uint64: + return IntCast<T>(); + case NYT::TNode::Double: if (AsDouble() < Min<T>() || AsDouble() > MaxFloor<T>() || !std::isfinite(AsDouble())) { - ythrow TTypeError() << AsDouble() << " can't be converted to " << TypeName<T>(); - } - return AsDouble(); - case NYT::TNode::Bool: - return AsBool(); - case NYT::TNode::List: - case NYT::TNode::Map: - case NYT::TNode::Null: - case NYT::TNode::Undefined: - ythrow TTypeError() << "ConvertTo<" << TypeName<T>() << ">() called for type " << GetType(); - }; - } else { - static_assert(sizeof(T) != sizeof(T), "should have template specialization"); - } + ythrow TTypeError() << AsDouble() << " can't be converted to " << TypeName<T>(); + } + return AsDouble(); + case NYT::TNode::Bool: + return AsBool(); + case NYT::TNode::List: + case NYT::TNode::Map: + case NYT::TNode::Null: + case NYT::TNode::Undefined: + ythrow TTypeError() << "ConvertTo<" << TypeName<T>() << ">() called for type " << GetType(); + }; + } else { + static_assert(sizeof(T) != sizeof(T), "should have template specialization"); + } } template<> diff --git a/library/cpp/yson/node/node_ut.cpp b/library/cpp/yson/node/node_ut.cpp index fcf6adc52b..448e99f575 100644 --- a/library/cpp/yson/node/node_ut.cpp +++ b/library/cpp/yson/node/node_ut.cpp @@ -282,11 +282,11 @@ Y_UNIT_TEST_SUITE(YtNodeTest) { Y_UNIT_TEST(TestIntCast) { TNode node = 1ull << 31; UNIT_ASSERT(node.IsUint64()); - UNIT_ASSERT_EXCEPTION(node.IntCast<i32>(), TNode::TTypeError); - UNIT_ASSERT(node.IntCast<ui32>() == static_cast<ui32>(node.AsUint64())); - UNIT_ASSERT(node.IntCast<i64>() == static_cast<i64>(node.AsUint64())); + UNIT_ASSERT_EXCEPTION(node.IntCast<i32>(), TNode::TTypeError); + UNIT_ASSERT(node.IntCast<ui32>() == static_cast<ui32>(node.AsUint64())); + UNIT_ASSERT(node.IntCast<i64>() == static_cast<i64>(node.AsUint64())); UNIT_ASSERT(node.IntCast<ui64>() == node.AsUint64()); - + node = 1ull << 63; UNIT_ASSERT(node.IsUint64()); UNIT_ASSERT_EXCEPTION(node.IntCast<i64>(), TNode::TTypeError); @@ -294,24 +294,24 @@ Y_UNIT_TEST_SUITE(YtNodeTest) { node = 12345; UNIT_ASSERT(node.IsInt64()); - UNIT_ASSERT_EXCEPTION(node.IntCast<i8>(), TNode::TTypeError); - UNIT_ASSERT_EXCEPTION(node.IntCast<ui8>(), TNode::TTypeError); - UNIT_ASSERT(node.IntCast<i16>() == static_cast<i16>(node.AsInt64())); - UNIT_ASSERT(node.IntCast<ui16>() == static_cast<ui16>(node.AsInt64())); - UNIT_ASSERT(node.IntCast<i32>() == static_cast<i32>(node.AsInt64())); - UNIT_ASSERT(node.IntCast<ui32>() == static_cast<ui32>(node.AsInt64())); + UNIT_ASSERT_EXCEPTION(node.IntCast<i8>(), TNode::TTypeError); + UNIT_ASSERT_EXCEPTION(node.IntCast<ui8>(), TNode::TTypeError); + UNIT_ASSERT(node.IntCast<i16>() == static_cast<i16>(node.AsInt64())); + UNIT_ASSERT(node.IntCast<ui16>() == static_cast<ui16>(node.AsInt64())); + UNIT_ASSERT(node.IntCast<i32>() == static_cast<i32>(node.AsInt64())); + UNIT_ASSERT(node.IntCast<ui32>() == static_cast<ui32>(node.AsInt64())); UNIT_ASSERT(node.IntCast<i64>() == node.AsInt64()); UNIT_ASSERT(node.IntCast<ui64>() == static_cast<ui64>(node.AsInt64())); - + node = -5; UNIT_ASSERT(node.IsInt64()); - UNIT_ASSERT(node.IntCast<i8>() == static_cast<i8>(node.AsInt64())); - UNIT_ASSERT(node.IntCast<i16>() == static_cast<i16>(node.AsInt64())); - UNIT_ASSERT(node.IntCast<i32>() == static_cast<i32>(node.AsInt64())); + UNIT_ASSERT(node.IntCast<i8>() == static_cast<i8>(node.AsInt64())); + UNIT_ASSERT(node.IntCast<i16>() == static_cast<i16>(node.AsInt64())); + UNIT_ASSERT(node.IntCast<i32>() == static_cast<i32>(node.AsInt64())); UNIT_ASSERT(node.IntCast<i64>() == node.AsInt64()); - UNIT_ASSERT_EXCEPTION(node.IntCast<ui8>(), TNode::TTypeError); - UNIT_ASSERT_EXCEPTION(node.IntCast<ui16>(), TNode::TTypeError); - UNIT_ASSERT_EXCEPTION(node.IntCast<ui32>(), TNode::TTypeError); + UNIT_ASSERT_EXCEPTION(node.IntCast<ui8>(), TNode::TTypeError); + UNIT_ASSERT_EXCEPTION(node.IntCast<ui16>(), TNode::TTypeError); + UNIT_ASSERT_EXCEPTION(node.IntCast<ui32>(), TNode::TTypeError); UNIT_ASSERT_EXCEPTION(node.IntCast<ui64>(), TNode::TTypeError); } @@ -335,20 +335,20 @@ Y_UNIT_TEST_SUITE(YtNodeTest) { } Y_UNIT_TEST(TestConvertDoubleInt) { - UNIT_ASSERT_VALUES_EQUAL(TNode(5.3).ConvertTo<i8>(), 5); - UNIT_ASSERT_VALUES_EQUAL(TNode(5.3).ConvertTo<ui8>(), 5); - UNIT_ASSERT_VALUES_EQUAL(TNode(5.3).ConvertTo<i64>(), 5); + UNIT_ASSERT_VALUES_EQUAL(TNode(5.3).ConvertTo<i8>(), 5); + UNIT_ASSERT_VALUES_EQUAL(TNode(5.3).ConvertTo<ui8>(), 5); + UNIT_ASSERT_VALUES_EQUAL(TNode(5.3).ConvertTo<i64>(), 5); UNIT_ASSERT_VALUES_EQUAL(TNode(5.3).ConvertTo<ui64>(), 5); - - UNIT_ASSERT_VALUES_EQUAL(TNode(-5.3).ConvertTo<i8>(), -5); + + UNIT_ASSERT_VALUES_EQUAL(TNode(-5.3).ConvertTo<i8>(), -5); UNIT_ASSERT_VALUES_EQUAL(TNode(-5.3).ConvertTo<i64>(), -5); - UNIT_ASSERT_EXCEPTION(TNode(-5.3).ConvertTo<ui8>(), TNode::TTypeError); + UNIT_ASSERT_EXCEPTION(TNode(-5.3).ConvertTo<ui8>(), TNode::TTypeError); UNIT_ASSERT_EXCEPTION(TNode(-5.3).ConvertTo<ui64>(), TNode::TTypeError); - + UNIT_ASSERT_VALUES_EQUAL(TNode(127.0).ConvertTo<i8>(), 127); UNIT_ASSERT_EXCEPTION(TNode(128.0).ConvertTo<i8>(), TNode::TTypeError); UNIT_ASSERT_VALUES_EQUAL(TNode(255.0).ConvertTo<ui8>(), 255); - UNIT_ASSERT_EXCEPTION(TNode(256.0).ConvertTo<ui8>(), TNode::TTypeError); + UNIT_ASSERT_EXCEPTION(TNode(256.0).ConvertTo<ui8>(), TNode::TTypeError); UNIT_ASSERT_EXCEPTION(TNode(1e100).ConvertTo<i64>(), TNode::TTypeError); UNIT_ASSERT_EXCEPTION(TNode(1e100).ConvertTo<ui64>(), TNode::TTypeError); { diff --git a/library/cpp/yson/node/pybind/node.cpp b/library/cpp/yson/node/pybind/node.cpp index 810815c357..79beba3647 100644 --- a/library/cpp/yson/node/pybind/node.cpp +++ b/library/cpp/yson/node/pybind/node.cpp @@ -1,59 +1,59 @@ -#include "node.h" - +#include "node.h" + #include <library/cpp/yson/node/node.h> - + #include <library/cpp/pybind/cast.h> - -#include <Python.h> - -namespace NYT { - - PyObject* BuildPyObject(const TNode& node) { - switch (node.GetType()) { - case TNode::Bool: - return NPyBind::BuildPyObject(node.AsBool()); - case TNode::Int64: - return NPyBind::BuildPyObject(node.AsInt64()); - case TNode::Uint64: - return NPyBind::BuildPyObject(node.AsUint64()); - case TNode::Double: - return NPyBind::BuildPyObject(node.AsDouble()); - case TNode::String: - return NPyBind::BuildPyObject(node.AsString()); - case TNode::List: - return NPyBind::BuildPyObject(node.AsList()); - case TNode::Map: - return NPyBind::BuildPyObject(node.AsMap()); - case TNode::Null: - Py_RETURN_NONE; - case TNode::Undefined: - ythrow TNode::TTypeError() << "BuildPyObject called for undefined TNode"; - } - } - -} // namespace NYT - -namespace NPyBind { - - template <> - bool FromPyObject(PyObject* obj, NYT::TNode& res) { - if (obj == Py_None) { - res = NYT::TNode::CreateEntity(); - return true; - } - if (PyBool_Check(obj)) { - res = false; - return FromPyObject(obj, res.As<bool>()); - } - if (PyFloat_Check(obj)) { - res = 0.0; - return FromPyObject(obj, res.As<double>()); - } + +#include <Python.h> + +namespace NYT { + + PyObject* BuildPyObject(const TNode& node) { + switch (node.GetType()) { + case TNode::Bool: + return NPyBind::BuildPyObject(node.AsBool()); + case TNode::Int64: + return NPyBind::BuildPyObject(node.AsInt64()); + case TNode::Uint64: + return NPyBind::BuildPyObject(node.AsUint64()); + case TNode::Double: + return NPyBind::BuildPyObject(node.AsDouble()); + case TNode::String: + return NPyBind::BuildPyObject(node.AsString()); + case TNode::List: + return NPyBind::BuildPyObject(node.AsList()); + case TNode::Map: + return NPyBind::BuildPyObject(node.AsMap()); + case TNode::Null: + Py_RETURN_NONE; + case TNode::Undefined: + ythrow TNode::TTypeError() << "BuildPyObject called for undefined TNode"; + } + } + +} // namespace NYT + +namespace NPyBind { + + template <> + bool FromPyObject(PyObject* obj, NYT::TNode& res) { + if (obj == Py_None) { + res = NYT::TNode::CreateEntity(); + return true; + } + if (PyBool_Check(obj)) { + res = false; + return FromPyObject(obj, res.As<bool>()); + } + if (PyFloat_Check(obj)) { + res = 0.0; + return FromPyObject(obj, res.As<double>()); + } #if PY_MAJOR_VERSION < 3 - if (PyString_Check(obj)) { - res = TString(); - return FromPyObject(obj, res.As<TString>()); - } + if (PyString_Check(obj)) { + res = TString(); + return FromPyObject(obj, res.As<TString>()); + } #else if (PyUnicode_Check(obj)) { res = TString(); @@ -64,42 +64,42 @@ namespace NPyBind { return FromPyObject(obj, res.As<TString>()); } #endif - if (PyList_Check(obj)) { - res = NYT::TNode::CreateList(); - return FromPyObject(obj, res.AsList()); - } - if (PyDict_Check(obj)) { - res = NYT::TNode::CreateMap(); - return FromPyObject(obj, res.AsMap()); - } + if (PyList_Check(obj)) { + res = NYT::TNode::CreateList(); + return FromPyObject(obj, res.AsList()); + } + if (PyDict_Check(obj)) { + res = NYT::TNode::CreateMap(); + return FromPyObject(obj, res.AsMap()); + } #if PY_MAJOR_VERSION < 3 - if (PyInt_Check(obj)) { - auto valAsLong = PyInt_AsLong(obj); - if (valAsLong == -1 && PyErr_Occurred()) { - return false; - } - res = valAsLong; - return true; - } + if (PyInt_Check(obj)) { + auto valAsLong = PyInt_AsLong(obj); + if (valAsLong == -1 && PyErr_Occurred()) { + return false; + } + res = valAsLong; + return true; + } #endif - if (PyLong_Check(obj)) { - int overflow = 0; - auto valAsLong = PyLong_AsLongAndOverflow(obj, &overflow); - if (!overflow) { - if (valAsLong == -1 && PyErr_Occurred()) { - return false; - } - res = valAsLong; - return true; - } - auto valAsULong = PyLong_AsUnsignedLong(obj); - if (valAsULong == static_cast<decltype(valAsULong)>(-1) && PyErr_Occurred()) { - return false; - } - res = valAsULong; - return true; - } - return false; - } - -} // namespace NPyBind + if (PyLong_Check(obj)) { + int overflow = 0; + auto valAsLong = PyLong_AsLongAndOverflow(obj, &overflow); + if (!overflow) { + if (valAsLong == -1 && PyErr_Occurred()) { + return false; + } + res = valAsLong; + return true; + } + auto valAsULong = PyLong_AsUnsignedLong(obj); + if (valAsULong == static_cast<decltype(valAsULong)>(-1) && PyErr_Occurred()) { + return false; + } + res = valAsULong; + return true; + } + return false; + } + +} // namespace NPyBind diff --git a/library/cpp/yson/node/pybind/node.h b/library/cpp/yson/node/pybind/node.h index ca2e2d1a6c..65f7236de6 100644 --- a/library/cpp/yson/node/pybind/node.h +++ b/library/cpp/yson/node/pybind/node.h @@ -1,9 +1,9 @@ -#pragma once - +#pragma once + #include <Python.h> #include <library/cpp/yson/node/node.h> - -namespace NYT { - PyObject* BuildPyObject(const TNode& val); -} + +namespace NYT { + PyObject* BuildPyObject(const TNode& val); +} diff --git a/library/cpp/yson/node/pybind/ya.make b/library/cpp/yson/node/pybind/ya.make index 2111f6e31c..97b7583e96 100644 --- a/library/cpp/yson/node/pybind/ya.make +++ b/library/cpp/yson/node/pybind/ya.make @@ -1,16 +1,16 @@ PY23_NATIVE_LIBRARY() - -OWNER( - inngonch - g:yt -) - -PEERDIR( + +OWNER( + inngonch + g:yt +) + +PEERDIR( library/cpp/pybind library/cpp/yson/node -) -SRCS( - node.cpp -) - -END() +) +SRCS( + node.cpp +) + +END() |