From bc8dcff2abd21d5a33ea78edf08f729672616794 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 17 Sep 2025 22:12:56 +0200 Subject: [PATCH] Extract `setString()` Before: 9802, 8736, 9630, 12588, 9910 After: 9802, 8718, 9630, 12606, 9880 Target: 9800, 8458, 9634, 12290, 9702 --- src/ArduinoJson/Object/ObjectImpl.hpp | 3 +-- src/ArduinoJson/Variant/VariantData.hpp | 9 ++++++++- src/ArduinoJson/Variant/VariantImpl.hpp | 10 +++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/ArduinoJson/Object/ObjectImpl.hpp b/src/ArduinoJson/Object/ObjectImpl.hpp index 1c57513a..e75a9757 100644 --- a/src/ArduinoJson/Object/ObjectImpl.hpp +++ b/src/ArduinoJson/Object/ObjectImpl.hpp @@ -61,8 +61,7 @@ inline VariantData* ObjectImpl::addMember(TAdaptedString key) { if (!valueSlot) return nullptr; - VariantImpl keyImpl(keySlot.ptr(), resources_); - if (!keyImpl.setString(key)) + if (!VariantImpl::setString(key, keySlot.ptr(), resources_)) return nullptr; CollectionImpl::appendPair(keySlot, valueSlot); diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index bc9a8721..2038a03e 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -480,7 +480,14 @@ class VariantImpl { void setRawString(SerializedValue value); template - bool setString(TAdaptedString value); + bool setString(TAdaptedString value) { + if (!data_) + return false; + return setString(value, data_, resources_); + } + + template + static bool setString(TAdaptedString value, VariantData*, ResourceManager*); size_t size() { if (isObject()) diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index d21c84b2..c683d744 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -19,11 +19,11 @@ inline void VariantImpl::setRawString(SerializedValue value) { } template -inline bool VariantImpl::setString(TAdaptedString value) { - ARDUINOJSON_ASSERT(isNull()); // must call clear() first - - if (!data_) - return false; +inline bool VariantImpl::setString(TAdaptedString value, VariantData* data_, + ResourceManager* resources_) { + ARDUINOJSON_ASSERT(data_ != nullptr); + ARDUINOJSON_ASSERT(data_->type == VariantType::Null); + ARDUINOJSON_ASSERT(resources_ != nullptr); if (value.isNull()) return false;