Implement array copy at the JsonArray level

This commit is contained in:
Benoit Blanchon
2023-07-11 18:56:19 +02:00
parent 57e9134540
commit b2aa0029b9
2 changed files with 10 additions and 14 deletions

View File

@ -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();

View File

@ -80,7 +80,16 @@ class JsonArray : public detail::VariantOperators<JsonArray> {
// 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.