diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 32f9aed4..7417a976 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -483,6 +483,8 @@ class VariantImpl { // Release the resources used by this variant and set it to null. void clear(); + static void clear(VariantData* data, ResourceManager* resources); + private: VariantData* data_; ResourceManager* resources_; diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 4277cb6a..0e9258e2 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -28,7 +28,6 @@ inline bool VariantImpl::setString(TAdaptedString value) { if (value.isNull()) return false; - if (isTinyString(value, value.size())) { data_->setTinyString(value); return true; @@ -43,7 +42,8 @@ inline bool VariantImpl::setString(TAdaptedString value) { return false; } -inline void VariantImpl::clear() { +inline void VariantImpl::clear(VariantData* data_, + ResourceManager* resources_) { if (!data_) return; @@ -55,11 +55,16 @@ inline void VariantImpl::clear() { resources_->freeEightByte(data_->content.asSlotId); #endif - asCollection().clear(); + if (data_->type & VariantTypeBits::CollectionMask) + CollectionImpl(&data_->content.asCollection, resources_).clear(); data_->type = VariantType::Null; } +inline void VariantImpl::clear() { + clear(data_, resources_); +} + #if ARDUINOJSON_USE_8_BYTE_POOL inline const EightByteValue* VariantImpl::getEightByte() const { return type() & VariantTypeBits::EightByteBit