From 488475fe1663f8f17af7a686e96753593b7afdbc Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 20 Jun 2023 18:18:48 +0200 Subject: [PATCH] Simplify `JsonArray::operator==` --- src/ArduinoJson/Array/JsonArray.hpp | 2 +- src/ArduinoJson/Array/JsonArrayConst.hpp | 7 +------ src/ArduinoJson/Collection/CollectionData.hpp | 2 ++ src/ArduinoJson/Collection/CollectionImpl.hpp | 9 +++++++++ 4 files changed, 13 insertions(+), 7 deletions(-) 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()) {