diff --git a/src/ArduinoJson/Array/ArrayImpl.hpp b/src/ArduinoJson/Array/ArrayImpl.hpp index 9bc66915..03df10cd 100644 --- a/src/ArduinoJson/Array/ArrayImpl.hpp +++ b/src/ArduinoJson/Array/ArrayImpl.hpp @@ -15,7 +15,7 @@ inline VariantImpl::iterator VariantImpl::at(size_t index) const { auto it = createIterator(); while (!it.done() && index) { - it.next(resources_); + it.next(); --index; } return it; @@ -34,7 +34,7 @@ inline VariantData* VariantImpl::addElement() { inline VariantData* VariantImpl::getOrAddElement(size_t index) { auto it = createIterator(); while (!it.done() && index > 0) { - it.next(resources_); + it.next(); index--; } if (it.done()) diff --git a/src/ArduinoJson/Array/JsonArray.hpp b/src/ArduinoJson/Array/JsonArray.hpp index 1509c6f4..3b00d8df 100644 --- a/src/ArduinoJson/Array/JsonArray.hpp +++ b/src/ArduinoJson/Array/JsonArray.hpp @@ -73,7 +73,7 @@ class JsonArray : public detail::VariantOperators { // Returns an iterator to the first element of the array. // https://arduinojson.org/v7/api/jsonarray/begin/ iterator begin() const { - return iterator(impl_.createIterator(), impl_.getResourceManager()); + return iterator(impl_.createIterator()); } // Returns an iterator following the last element of the array. diff --git a/src/ArduinoJson/Array/JsonArrayConst.hpp b/src/ArduinoJson/Array/JsonArrayConst.hpp index c6b71818..869ca462 100644 --- a/src/ArduinoJson/Array/JsonArrayConst.hpp +++ b/src/ArduinoJson/Array/JsonArrayConst.hpp @@ -24,7 +24,7 @@ class JsonArrayConst : public detail::VariantOperators { // Returns an iterator to the first element of the array. // https://arduinojson.org/v7/api/jsonarrayconst/begin/ iterator begin() const { - return iterator(impl_.createIterator(), impl_.getResourceManager()); + return iterator(impl_.createIterator()); } // Returns an iterator to the element following the last element of the array. diff --git a/src/ArduinoJson/Array/JsonArrayIterator.hpp b/src/ArduinoJson/Array/JsonArrayIterator.hpp index 038a60ba..2132f51b 100644 --- a/src/ArduinoJson/Array/JsonArrayIterator.hpp +++ b/src/ArduinoJson/Array/JsonArrayIterator.hpp @@ -30,12 +30,11 @@ class JsonArrayIterator { public: JsonArrayIterator() {} - explicit JsonArrayIterator(detail::VariantImpl::iterator iterator, - detail::ResourceManager* resources) - : iterator_(iterator), resources_(resources) {} + explicit JsonArrayIterator(const detail::VariantImpl::iterator& iterator) + : iterator_(iterator) {} JsonVariant operator*() { - return JsonVariant(iterator_.value(resources_)); + return JsonVariant(iterator_.value()); } Ptr operator->() { return operator*(); @@ -50,13 +49,12 @@ class JsonArrayIterator { } JsonArrayIterator& operator++() { - iterator_.next(resources_); + iterator_.next(); return *this; } private: detail::VariantImpl::iterator iterator_; - detail::ResourceManager* resources_; }; class JsonArrayConstIterator { @@ -64,12 +62,11 @@ class JsonArrayConstIterator { public: JsonArrayConstIterator() {} - explicit JsonArrayConstIterator(detail::VariantImpl::iterator iterator, - detail::ResourceManager* resources) - : iterator_(iterator), resources_(resources) {} + explicit JsonArrayConstIterator(const detail::VariantImpl::iterator& iterator) + : iterator_(iterator) {} JsonVariantConst operator*() const { - return JsonVariantConst(iterator_.value(resources_)); + return JsonVariantConst(iterator_.value()); } Ptr operator->() { return operator*(); @@ -84,13 +81,12 @@ class JsonArrayConstIterator { } JsonArrayConstIterator& operator++() { - iterator_.next(resources_); + iterator_.next(); return *this; } private: mutable detail::VariantImpl::iterator iterator_; - mutable detail::ResourceManager* resources_; }; ARDUINOJSON_END_PUBLIC_NAMESPACE diff --git a/src/ArduinoJson/Collection/CollectionImpl.hpp b/src/ArduinoJson/Collection/CollectionImpl.hpp index 5d131921..37d3d05a 100644 --- a/src/ArduinoJson/Collection/CollectionImpl.hpp +++ b/src/ArduinoJson/Collection/CollectionImpl.hpp @@ -12,23 +12,23 @@ ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE -inline void CollectionIterator::next(const ResourceManager* resources) { +inline void CollectionIterator::next() { ARDUINOJSON_ASSERT(slot_); auto nextId = slot_->next; - slot_ = resources->getVariant(nextId); + slot_ = resources_->getVariant(nextId); currentId_ = nextId; } -inline VariantImpl CollectionIterator::value(ResourceManager* resources) const { +inline VariantImpl CollectionIterator::value() const { ARDUINOJSON_ASSERT(slot_ != nullptr); - return VariantImpl(slot_, resources); + return VariantImpl(slot_, resources_); } inline VariantImpl::iterator VariantImpl::createIterator() const { if (!data_ || !data_->isCollection()) return iterator(); auto coll = getCollectionData(); - return iterator(getVariant(coll->head), coll->head); + return iterator(coll->head, resources_); } inline void VariantImpl::appendOne(Slot slot) { @@ -111,8 +111,8 @@ inline size_t VariantImpl::nesting() const { if (!data_ || !data_->isCollection()) return 0; size_t maxChildNesting = 0; - for (auto it = createIterator(); !it.done(); it.next(resources_)) { - auto childNesting = it.value(resources_).nesting(); + for (auto it = createIterator(); !it.done(); it.next()) { + auto childNesting = it.value().nesting(); if (childNesting > maxChildNesting) maxChildNesting = childNesting; } diff --git a/src/ArduinoJson/Collection/CollectionIterator.hpp b/src/ArduinoJson/Collection/CollectionIterator.hpp index d331f933..2fc4a9f5 100644 --- a/src/ArduinoJson/Collection/CollectionIterator.hpp +++ b/src/ArduinoJson/Collection/CollectionIterator.hpp @@ -19,11 +19,11 @@ class CollectionIterator { friend class VariantImpl; public: - CollectionIterator() : slot_(nullptr), currentId_(NULL_SLOT) {} + CollectionIterator() {} - void next(const ResourceManager* resources); + void next(); - VariantImpl value(ResourceManager* resources) const; + VariantImpl value() const; bool done() const { return slot_ == nullptr; @@ -46,11 +46,14 @@ class CollectionIterator { } private: - CollectionIterator(VariantData* slot, SlotId slotId) - : slot_(slot), currentId_(slotId) {} + CollectionIterator(SlotId slotId, ResourceManager* resources) + : slot_(resources->getVariant(slotId)), + currentId_(slotId), + resources_(resources) {} - VariantData* slot_; - SlotId currentId_; + VariantData* slot_ = nullptr; + SlotId currentId_ = NULL_SLOT; + ResourceManager* resources_ = nullptr; }; ARDUINOJSON_END_PRIVATE_NAMESPACE diff --git a/src/ArduinoJson/Json/PrettyJsonSerializer.hpp b/src/ArduinoJson/Json/PrettyJsonSerializer.hpp index f3e5a6a3..6cbe594f 100644 --- a/src/ArduinoJson/Json/PrettyJsonSerializer.hpp +++ b/src/ArduinoJson/Json/PrettyJsonSerializer.hpp @@ -26,8 +26,8 @@ class PrettyJsonSerializer : public JsonSerializer { nesting_++; while (!it.done()) { indent(); - it.value(base::resources_).accept(*this); - it.next(base::resources_); + it.value().accept(*this); + it.next(); base::write(it.done() ? "\r\n" : ",\r\n"); } nesting_--; @@ -48,8 +48,8 @@ class PrettyJsonSerializer : public JsonSerializer { while (!it.done()) { if (isKey) indent(); - it.value(base::resources_).accept(*this); - it.next(base::resources_); + it.value().accept(*this); + it.next(); if (isKey) base::write(": "); else diff --git a/src/ArduinoJson/Object/JsonObject.hpp b/src/ArduinoJson/Object/JsonObject.hpp index 59844b30..dc29d395 100644 --- a/src/ArduinoJson/Object/JsonObject.hpp +++ b/src/ArduinoJson/Object/JsonObject.hpp @@ -64,7 +64,7 @@ class JsonObject : public detail::VariantOperators { // Returns an iterator to the first key-value pair of the object. // https://arduinojson.org/v7/api/jsonobject/begin/ iterator begin() const { - return iterator(impl_.createIterator(), impl_.getResourceManager()); + return iterator(impl_.createIterator()); } // Returns an iterator following the last key-value pair of the object. diff --git a/src/ArduinoJson/Object/JsonObjectConst.hpp b/src/ArduinoJson/Object/JsonObjectConst.hpp index c75580f4..19caf34d 100644 --- a/src/ArduinoJson/Object/JsonObjectConst.hpp +++ b/src/ArduinoJson/Object/JsonObjectConst.hpp @@ -55,7 +55,7 @@ class JsonObjectConst : public detail::VariantOperators { // Returns an iterator to the first key-value pair of the object. // https://arduinojson.org/v7/api/jsonobjectconst/begin/ iterator begin() const { - return iterator(impl_.createIterator(), impl_.getResourceManager()); + return iterator(impl_.createIterator()); } // Returns an iterator following the last key-value pair of the object. diff --git a/src/ArduinoJson/Object/JsonObjectIterator.hpp b/src/ArduinoJson/Object/JsonObjectIterator.hpp index 3adb25a5..fe57d64c 100644 --- a/src/ArduinoJson/Object/JsonObjectIterator.hpp +++ b/src/ArduinoJson/Object/JsonObjectIterator.hpp @@ -14,12 +14,11 @@ class JsonObjectIterator { public: JsonObjectIterator() {} - explicit JsonObjectIterator(detail::VariantImpl::iterator iterator, - detail::ResourceManager* resources) - : iterator_(iterator), resources_(resources) {} + explicit JsonObjectIterator(const detail::VariantImpl::iterator& iterator) + : iterator_(iterator) {} JsonPair operator*() const { - return JsonPair(iterator_, resources_); + return JsonPair(iterator_); } Ptr operator->() { return operator*(); @@ -34,14 +33,13 @@ class JsonObjectIterator { } JsonObjectIterator& operator++() { - iterator_.next(resources_); // key - iterator_.next(resources_); // value + iterator_.next(); // key + iterator_.next(); // value return *this; } private: detail::VariantImpl::iterator iterator_; - detail::ResourceManager* resources_; }; class JsonObjectConstIterator { @@ -50,12 +48,12 @@ class JsonObjectConstIterator { public: JsonObjectConstIterator() {} - explicit JsonObjectConstIterator(detail::VariantImpl::iterator iterator, - detail::ResourceManager* resources) - : iterator_(iterator), resources_(resources) {} + explicit JsonObjectConstIterator( + const detail::VariantImpl::iterator& iterator) + : iterator_(iterator) {} JsonPairConst operator*() const { - return JsonPairConst(iterator_, resources_); + return JsonPairConst(iterator_); } Ptr operator->() { return operator*(); @@ -70,14 +68,13 @@ class JsonObjectConstIterator { } JsonObjectConstIterator& operator++() { - iterator_.next(resources_); // key - iterator_.next(resources_); // value + iterator_.next(); // key + iterator_.next(); // value return *this; } private: detail::VariantImpl::iterator iterator_; - detail::ResourceManager* resources_; }; ARDUINOJSON_END_PUBLIC_NAMESPACE diff --git a/src/ArduinoJson/Object/JsonPair.hpp b/src/ArduinoJson/Object/JsonPair.hpp index f72e2cc7..411c2a93 100644 --- a/src/ArduinoJson/Object/JsonPair.hpp +++ b/src/ArduinoJson/Object/JsonPair.hpp @@ -15,12 +15,11 @@ ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE class JsonPair { public: // INTERNAL USE ONLY - JsonPair(detail::VariantImpl::iterator iterator, - detail::ResourceManager* resources) { + JsonPair(detail::VariantImpl::iterator iterator) { if (!iterator.done()) { - key_ = iterator.value(resources).asString(); - iterator.next(resources); - value_ = JsonVariant(iterator.value(resources)); + key_ = iterator.value().asString(); + iterator.next(); + value_ = JsonVariant(iterator.value()); } } @@ -43,12 +42,11 @@ class JsonPair { // https://arduinojson.org/v7/api/jsonobjectconst/begin_end/ class JsonPairConst { public: - JsonPairConst(detail::VariantImpl::iterator iterator, - detail::ResourceManager* resources) { + JsonPairConst(detail::VariantImpl::iterator iterator) { if (!iterator.done()) { - key_ = iterator.value(resources).asString(); - iterator.next(resources); - value_ = JsonVariantConst(iterator.value(resources)); + key_ = iterator.value().asString(); + iterator.next(); + value_ = JsonVariantConst(iterator.value()); } } diff --git a/src/ArduinoJson/Object/ObjectImpl.hpp b/src/ArduinoJson/Object/ObjectImpl.hpp index d4752f15..939a42f7 100644 --- a/src/ArduinoJson/Object/ObjectImpl.hpp +++ b/src/ArduinoJson/Object/ObjectImpl.hpp @@ -14,7 +14,7 @@ inline VariantData* VariantImpl::getMember(TAdaptedString key) const { auto it = findKey(key); if (it.done()) return nullptr; - it.next(resources_); + it.next(); return it.data(); } @@ -33,9 +33,8 @@ inline VariantImpl::iterator VariantImpl::findKey(TAdaptedString key) const { if (key.isNull()) return iterator(); bool isKey = true; - for (auto it = createIterator(); !it.done(); it.next(resources_)) { - if (isKey && - stringEquals(key, adaptString(it.value(resources_).asString()))) + for (auto it = createIterator(); !it.done(); it.next()) { + if (isKey && stringEquals(key, adaptString(it.value().asString()))) return it; isKey = !isKey; } diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index fd3b0d38..9068fdba 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -461,7 +461,7 @@ class VariantImpl { size_t count = 0; - for (auto it = createIterator(); !it.done(); it.next(resources_)) + for (auto it = createIterator(); !it.done(); it.next()) count++; if (data_->type == VariantType::Object)