diff --git a/src/ArduinoJson/Array/JsonArray.hpp b/src/ArduinoJson/Array/JsonArray.hpp index 813cbbc0..6a9b9b0c 100644 --- a/src/ArduinoJson/Array/JsonArray.hpp +++ b/src/ArduinoJson/Array/JsonArray.hpp @@ -85,7 +85,7 @@ class JsonArray : public detail::VariantOperators { // Compares the content of two arrays. FORCE_INLINE bool operator==(JsonArray rhs) const { - return JsonArrayConst(data_) == JsonArrayConst(rhs.data_); + return arrayEquals(data_, rhs.data_); } // Removes the element at the specified iterator. diff --git a/src/ArduinoJson/Array/JsonArrayConst.hpp b/src/ArduinoJson/Array/JsonArrayConst.hpp index cbd87628..fb360423 100644 --- a/src/ArduinoJson/Array/JsonArrayConst.hpp +++ b/src/ArduinoJson/Array/JsonArrayConst.hpp @@ -45,12 +45,7 @@ class JsonArrayConst : public detail::VariantOperators { // Compares the content of two arrays. // Returns true if the two arrays are equal. FORCE_INLINE bool operator==(JsonArrayConst rhs) const { - if (data_ == rhs.data_) - return true; - if (!data_ || !rhs.data_) - return false; - - return arrayEquals(*data_, *rhs.data_); + return arrayEquals(data_, rhs.data_); } // Returns the element at the specified index. diff --git a/src/ArduinoJson/Collection/CollectionData.hpp b/src/ArduinoJson/Collection/CollectionData.hpp index 91b05b00..dd08bb77 100644 --- a/src/ArduinoJson/Collection/CollectionData.hpp +++ b/src/ArduinoJson/Collection/CollectionData.hpp @@ -54,6 +54,8 @@ inline VariantData* collectionToVariant(CollectionData* collection) { bool arrayEquals(const detail::CollectionData& lhs, const detail::CollectionData& rhs); +bool arrayEquals(const detail::CollectionData* lhs, + const detail::CollectionData* rhs); bool objectEquals(const detail::CollectionData& lhs, const detail::CollectionData& rhs); diff --git a/src/ArduinoJson/Collection/CollectionImpl.hpp b/src/ArduinoJson/Collection/CollectionImpl.hpp index 6752a297..20f2f759 100644 --- a/src/ArduinoJson/Collection/CollectionImpl.hpp +++ b/src/ArduinoJson/Collection/CollectionImpl.hpp @@ -116,6 +116,15 @@ inline bool arrayEquals(const CollectionData& lhs, const CollectionData& rhs) { } } +inline bool arrayEquals(const CollectionData* lhs, const CollectionData* rhs) { + if (lhs == rhs) + return true; + if (!lhs || !rhs) + return false; + + return arrayEquals(*lhs, *rhs); +} + inline bool objectEquals(const CollectionData& lhs, const CollectionData& rhs) { size_t count = 0; for (auto a = lhs.head(); a; a = a->next()) {