From c5d9cf6096800f902744f67e8971c7114756013b Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 2 Sep 2025 13:54:10 +0200 Subject: [PATCH] Extract `clear()` Before: 10036, 8882, 9742, 12788, 10084 After: 9920, 8836, 9742, 12744, 10040 Target: 9800, 8458, 9634, 12290, 9702 --- src/ArduinoJson/Variant/VariantData.hpp | 2 ++ src/ArduinoJson/Variant/VariantImpl.hpp | 11 ++++++++--- 2 files changed, 10 insertions(+), 3 deletions(-) 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