From b2aa0029b90589d405ebe9ff37e4464adcefc502 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 11 Jul 2023 18:56:19 +0200 Subject: [PATCH] Implement array copy at the `JsonArray` level --- src/ArduinoJson/Array/ArrayImpl.hpp | 13 ------------- src/ArduinoJson/Array/JsonArray.hpp | 11 ++++++++++- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/src/ArduinoJson/Array/ArrayImpl.hpp b/src/ArduinoJson/Array/ArrayImpl.hpp index 0183a14b..72eff183 100644 --- a/src/ArduinoJson/Array/ArrayImpl.hpp +++ b/src/ArduinoJson/Array/ArrayImpl.hpp @@ -18,19 +18,6 @@ inline ArrayData::iterator ArrayData::at(size_t index) const { return it; } -inline bool ArrayData::copyFrom(const ArrayData& src, - ResourceManager* resources) { - clear(resources); - - for (auto it = src.createIterator(); !it.done(); it.next()) { - auto var = addElement(resources); - if (!copyVariant(JsonVariant(var, resources), - JsonVariantConst(it.data(), resources))) - return false; - } - return true; -} - inline VariantData* ArrayData::getOrAddElement(size_t index, ResourceManager* resources) { auto it = createIterator(); diff --git a/src/ArduinoJson/Array/JsonArray.hpp b/src/ArduinoJson/Array/JsonArray.hpp index 2a0f0fb8..c7670b65 100644 --- a/src/ArduinoJson/Array/JsonArray.hpp +++ b/src/ArduinoJson/Array/JsonArray.hpp @@ -80,7 +80,16 @@ class JsonArray : public detail::VariantOperators { // Copies an array. // https://arduinojson.org/v6/api/jsonarray/set/ FORCE_INLINE bool set(JsonArrayConst src) const { - return detail::ArrayData::copy(data_, src.data_, resources_); + if (!data_) + return false; + + clear(); + for (auto element : src) { + if (!add(element)) + return false; + } + + return true; } // Removes the element at the specified iterator.