diff options
| author | Stefan Boberg <[email protected]> | 2021-09-01 11:16:29 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-09-01 11:16:29 +0200 |
| commit | 9b56218bd354b46b157ecdefd3254fa8d5c3e94d (patch) | |
| tree | 88a679f2e770b39e34eecb120460e2d43ab49c74 /zencore/compactbinary.cpp | |
| parent | Fixed a race in bucket open/create logic (diff) | |
| download | zen-9b56218bd354b46b157ecdefd3254fa8d5c3e94d.tar.xz zen-9b56218bd354b46b157ecdefd3254fa8d5c3e94d.zip | |
CompactBinary: Added explicit operator bool for array and object types
p4 CL16069971
Diffstat (limited to 'zencore/compactbinary.cpp')
| -rw-r--r-- | zencore/compactbinary.cpp | 27 |
1 files changed, 18 insertions, 9 deletions
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<uint32_t>(Payload)); + const uint32_t Value = FromNetworkOrder(CompactBinaryPrivate::ReadUnaligned<uint32_t>(Payload)); return reinterpret_cast<const float&>(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<uint32_t>(Payload)); + const uint32_t Value = FromNetworkOrder(CompactBinaryPrivate::ReadUnaligned<uint32_t>(Payload)); return reinterpret_cast<const float&>(Value); } case CbFieldType::Float64: { Error = CbFieldError::None; - const uint64_t Value = FromNetworkOrder(usonprivate::ReadUnaligned<uint64_t>(Payload)); + const uint64_t Value = FromNetworkOrder(CompactBinaryPrivate::ReadUnaligned<uint64_t>(Payload)); return reinterpret_cast<const double&>(Value); } default: @@ -410,7 +410,7 @@ CbFieldView::AsDateTimeTicks(const int64_t Default) if (CbFieldTypeOps::IsDateTime(Type)) { Error = CbFieldError::None; - return FromNetworkOrder(usonprivate::ReadUnaligned<int64_t>(Payload)); + return FromNetworkOrder(CompactBinaryPrivate::ReadUnaligned<int64_t>(Payload)); } else { @@ -437,7 +437,7 @@ CbFieldView::AsTimeSpanTicks(const int64_t Default) if (CbFieldTypeOps::IsTimeSpan(Type)) { Error = CbFieldError::None; - return FromNetworkOrder(usonprivate::ReadUnaligned<int64_t>(Payload)); + return FromNetworkOrder(CompactBinaryPrivate::ReadUnaligned<int64_t>(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<CbFieldView, const CbObjectView&>::value, "Invalid assignment for CbField"); static_assert(!std::is_convertible<CbFieldView, CbObjectView>::value, "Invalid conversion to CbObject"); static_assert(!std::is_assignable<CbObjectView, const CbFieldView&>::value, "Invalid assignment for CbObject"); + + static_assert(std::is_constructible<CbField>::value, "Missing constructor for CbField"); + static_assert(std::is_constructible<CbField, const CbField&>::value, "Missing constructor for CbField"); + static_assert(std::is_constructible<CbField, CbField&&>::value, "Missing constructor for CbField"); } TEST_CASE("uson.null") |