From debe31f3b94bde9465d591f022b59e8e9cc3afd5 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Thu, 5 Sep 2024 10:43:03 +0200 Subject: [PATCH] Remove assert and return null instead --- src/ArduinoJson/Variant/VariantData.hpp | 28 +++++++++++++------------ src/ArduinoJson/Variant/VariantImpl.hpp | 5 +++-- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 5c2661630..43ee4d807 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -44,9 +44,7 @@ class VariantData { typename TVisitor::result_type accept( TVisitor& visit, const ResourceManager* resources) const { #if ARDUINOJSON_USE_EXTENSIONS - auto extension = type_ & VariantTypeBits::ExtensionBit - ? getExtension(resources) - : nullptr; + auto extension = getExtension(resources); #else (void)resources; // silence warning #endif @@ -136,7 +134,11 @@ class VariantData { } bool asBoolean(const ResourceManager* resources) const { +#if ARDUINOJSON_USE_EXTENSIONS + auto extension = getExtension(resources); +#else (void)resources; // silence warning +#endif switch (type_) { case VariantType::Boolean: return content_.asBoolean; @@ -147,14 +149,14 @@ class VariantData { return content_.asFloat != 0; #if ARDUINOJSON_USE_DOUBLE case VariantType::Double: - return getExtension(resources)->asDouble != 0; + return extension->asDouble != 0; #endif case VariantType::Null: return false; #if ARDUINOJSON_USE_LONG_LONG case VariantType::Uint64: case VariantType::Int64: - return getExtension(resources)->asUint64 != 0; + return extension->asUint64 != 0; #endif default: return true; @@ -181,9 +183,7 @@ class VariantData { T asFloat(const ResourceManager* resources) const { static_assert(is_floating_point::value, "T must be a floating point"); #if ARDUINOJSON_USE_EXTENSIONS - auto extension = type_ & VariantTypeBits::ExtensionBit - ? getExtension(resources) - : nullptr; + auto extension = getExtension(resources); #else (void)resources; // silence warning #endif @@ -218,9 +218,7 @@ class VariantData { T asIntegral(const ResourceManager* resources) const { static_assert(is_integral::value, "T must be an integral type"); #if ARDUINOJSON_USE_EXTENSIONS - auto extension = type_ & VariantTypeBits::ExtensionBit - ? getExtension(resources) - : nullptr; + auto extension = getExtension(resources); #else (void)resources; // silence warning #endif @@ -345,7 +343,11 @@ class VariantData { template bool isInteger(const ResourceManager* resources) const { +#if ARDUINOJSON_USE_LONG_LONG + auto extension = getExtension(resources); +#else (void)resources; // silence warning +#endif switch (type_) { case VariantType::Uint32: return canConvertNumber(content_.asUint32); @@ -355,10 +357,10 @@ class VariantData { #if ARDUINOJSON_USE_LONG_LONG case VariantType::Uint64: - return canConvertNumber(getExtension(resources)->asUint64); + return canConvertNumber(extension->asUint64); case VariantType::Int64: - return canConvertNumber(getExtension(resources)->asInt64); + return canConvertNumber(extension->asInt64); #endif default: diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 32513de32..f6217d77a 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -59,8 +59,9 @@ inline void VariantData::clear(ResourceManager* resources) { #if ARDUINOJSON_USE_EXTENSIONS inline const VariantExtension* VariantData::getExtension( const ResourceManager* resources) const { - ARDUINOJSON_ASSERT(type_ & VariantTypeBits::ExtensionBit); - return resources->getExtension(content_.asSlotId); + return type_ & VariantTypeBits::ExtensionBit + ? resources->getExtension(content_.asSlotId) + : nullptr; } #endif