From 9b56218bd354b46b157ecdefd3254fa8d5c3e94d Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Wed, 1 Sep 2021 11:16:29 +0200 Subject: CompactBinary: Added explicit operator bool for array and object types p4 CL16069971 --- zencore/compactbinary.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'zencore/compactbinary.cpp') diff --git a/zencore/compactbinary.cpp b/zencore/compactbinary.cpp index 065d6309b..5f3a60db9 100644 --- a/zencore/compactbinary.cpp +++ b/zencore/compactbinary.cpp @@ -65,7 +65,7 @@ TimeSpan::Set(int Days, int Hours, int Minutes, int Seconds, int FractionNano) ////////////////////////////////////////////////////////////////////////// -namespace usonprivate { +namespace CompactBinaryPrivate { static constexpr const uint8_t GEmptyObjectPayload[] = {uint8_t(CbFieldType::Object), 0x00}; static constexpr const uint8_t GEmptyArrayPayload[] = {uint8_t(CbFieldType::Array), 0x01, 0x00}; @@ -81,7 +81,7 @@ namespace usonprivate { return Value; #endif } -} // namespace usonprivate +} // namespace CompactBinaryPrivate ////////////////////////////////////////////////////////////////////////// @@ -238,7 +238,7 @@ CbFieldView::AsFloat(const float Default) case CbFieldType::Float32: { Error = CbFieldError::None; - const uint32_t Value = FromNetworkOrder(usonprivate::ReadUnaligned(Payload)); + const uint32_t Value = FromNetworkOrder(CompactBinaryPrivate::ReadUnaligned(Payload)); return reinterpret_cast(Value); } case CbFieldType::Float64: @@ -270,13 +270,13 @@ CbFieldView::AsDouble(const double Default) case CbFieldType::Float32: { Error = CbFieldError::None; - const uint32_t Value = FromNetworkOrder(usonprivate::ReadUnaligned(Payload)); + const uint32_t Value = FromNetworkOrder(CompactBinaryPrivate::ReadUnaligned(Payload)); return reinterpret_cast(Value); } case CbFieldType::Float64: { Error = CbFieldError::None; - const uint64_t Value = FromNetworkOrder(usonprivate::ReadUnaligned(Payload)); + const uint64_t Value = FromNetworkOrder(CompactBinaryPrivate::ReadUnaligned(Payload)); return reinterpret_cast(Value); } default: @@ -410,7 +410,7 @@ CbFieldView::AsDateTimeTicks(const int64_t Default) if (CbFieldTypeOps::IsDateTime(Type)) { Error = CbFieldError::None; - return FromNetworkOrder(usonprivate::ReadUnaligned(Payload)); + return FromNetworkOrder(CompactBinaryPrivate::ReadUnaligned(Payload)); } else { @@ -437,7 +437,7 @@ CbFieldView::AsTimeSpanTicks(const int64_t Default) if (CbFieldTypeOps::IsTimeSpan(Type)) { Error = CbFieldError::None; - return FromNetworkOrder(usonprivate::ReadUnaligned(Payload)); + return FromNetworkOrder(CompactBinaryPrivate::ReadUnaligned(Payload)); } else { @@ -574,7 +574,7 @@ CbFieldView::GetViewNoType() const /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -CbArrayView::CbArrayView() : CbFieldView(usonprivate::GEmptyArrayPayload) +CbArrayView::CbArrayView() : CbFieldView(CompactBinaryPrivate::GEmptyArrayPayload) { } @@ -666,7 +666,7 @@ CbArrayView::CopyTo(BinaryWriter& Ar) const /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -CbObjectView::CbObjectView() : CbFieldView(usonprivate::GEmptyObjectPayload) +CbObjectView::CbObjectView() : CbFieldView(CompactBinaryPrivate::GEmptyObjectPayload) { } @@ -721,6 +721,11 @@ CbObjectView::FindViewIgnoreCase(const std::string_view Name) const return CbFieldView(); } +CbObjectView::operator bool() const +{ + return GetSize() > sizeof(CompactBinaryPrivate::GEmptyObjectPayload); +} + uint64_t CbObjectView::GetSize() const { @@ -1240,6 +1245,10 @@ TEST_CASE("uson") static_assert(!std::is_assignable::value, "Invalid assignment for CbField"); static_assert(!std::is_convertible::value, "Invalid conversion to CbObject"); static_assert(!std::is_assignable::value, "Invalid assignment for CbObject"); + + static_assert(std::is_constructible::value, "Missing constructor for CbField"); + static_assert(std::is_constructible::value, "Missing constructor for CbField"); + static_assert(std::is_constructible::value, "Missing constructor for CbField"); } TEST_CASE("uson.null") -- cgit v1.2.3