aboutsummaryrefslogtreecommitdiff
path: root/zencore/compactbinary.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-09-01 11:16:29 +0200
committerStefan Boberg <[email protected]>2021-09-01 11:16:29 +0200
commit9b56218bd354b46b157ecdefd3254fa8d5c3e94d (patch)
tree88a679f2e770b39e34eecb120460e2d43ab49c74 /zencore/compactbinary.cpp
parentFixed a race in bucket open/create logic (diff)
downloadzen-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.cpp27
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")