diff --git a/src/ArduinoJson/Array/ArrayData.hpp b/src/ArduinoJson/Array/ArrayData.hpp index acec3e4e..fe7f758f 100644 --- a/src/ArduinoJson/Array/ArrayData.hpp +++ b/src/ArduinoJson/Array/ArrayData.hpp @@ -37,17 +37,6 @@ class ArrayData : public CollectionData { array->removeElement(index, resources); } - bool equals(const ArrayData&) const; - - static bool equals(const ArrayData* lhs, const ArrayData* rhs) { - if (lhs == rhs) - return true; - if (!lhs || !rhs) - return false; - - return lhs->equals(*rhs); - } - bool copyFrom(const ArrayData& src, ResourceManager* resources); static bool copy(ArrayData* dst, const ArrayData* src, diff --git a/src/ArduinoJson/Array/ArrayImpl.hpp b/src/ArduinoJson/Array/ArrayImpl.hpp index 31f2e139..bc615e04 100644 --- a/src/ArduinoJson/Array/ArrayImpl.hpp +++ b/src/ArduinoJson/Array/ArrayImpl.hpp @@ -40,22 +40,6 @@ inline bool ArrayData::copyFrom(const ArrayData& src, return true; } -inline bool ArrayData::equals(const ArrayData& other) const { - auto a = begin(); - auto b = other.begin(); - - for (;;) { - if (!a && !b) // both ended - return true; - if (!a || !b) // one ended - return false; - if (compare(a.data(), b.data()) != COMPARE_RESULT_EQUAL) - return false; - ++a; - ++b; - } -} - inline VariantData* ArrayData::getOrAddElement(size_t index, ResourceManager* resources) { auto it = begin(); diff --git a/src/ArduinoJson/Array/JsonArray.hpp b/src/ArduinoJson/Array/JsonArray.hpp index 46f705cd..16f359cd 100644 --- a/src/ArduinoJson/Array/JsonArray.hpp +++ b/src/ArduinoJson/Array/JsonArray.hpp @@ -83,11 +83,6 @@ class JsonArray : public detail::VariantOperators { return detail::ArrayData::copy(data_, src.data_, resources_); } - // Compares the content of two arrays. - FORCE_INLINE bool operator==(JsonArray rhs) const { - return detail::ArrayData::equals(data_, rhs.data_); - } - // Removes the element at the specified iterator. // ⚠️ Doesn't release the memory associated with the removed element. // https://arduinojson.org/v6/api/jsonarray/remove/ diff --git a/src/ArduinoJson/Array/JsonArrayConst.hpp b/src/ArduinoJson/Array/JsonArrayConst.hpp index 0a0f72e1..a8a77d51 100644 --- a/src/ArduinoJson/Array/JsonArrayConst.hpp +++ b/src/ArduinoJson/Array/JsonArrayConst.hpp @@ -41,12 +41,6 @@ class JsonArrayConst : public detail::VariantOperators { // INTERNAL USE ONLY FORCE_INLINE JsonArrayConst(const detail::ArrayData* data) : data_(data) {} - // Compares the content of two arrays. - // Returns true if the two arrays are equal. - FORCE_INLINE bool operator==(JsonArrayConst rhs) const { - return detail::ArrayData::equals(data_, rhs.data_); - } - // Returns the element at the specified index. // https://arduinojson.org/v6/api/jsonarrayconst/subscript/ FORCE_INLINE JsonVariantConst operator[](size_t index) const { @@ -113,4 +107,27 @@ struct Converter : private detail::VariantAttorney { } }; +// Compares the content of two arrays. +// Returns true if the two arrays are equal. +inline bool operator==(JsonArrayConst lhs, JsonArrayConst rhs) { + if (!lhs && !rhs) + return true; + if (!lhs || !rhs) + return false; + + auto a = lhs.begin(); + auto b = rhs.begin(); + + for (;;) { + if (a == b) // same pointer or both null + return true; + if (a == lhs.end() || b == rhs.end()) + return false; + if (*a != *b) + return false; + ++a; + ++b; + } +} + ARDUINOJSON_END_PUBLIC_NAMESPACE diff --git a/src/ArduinoJson/Variant/VariantCompare.hpp b/src/ArduinoJson/Variant/VariantCompare.hpp index fe8ebdef..6414e6f7 100644 --- a/src/ArduinoJson/Variant/VariantCompare.hpp +++ b/src/ArduinoJson/Variant/VariantCompare.hpp @@ -84,7 +84,7 @@ struct ArrayComparer : ComparerBase { explicit ArrayComparer(const ArrayData& rhs) : rhs_(&rhs) {} CompareResult visitArray(const ArrayData& lhs) { - if (rhs_->equals(lhs)) + if (JsonArrayConst(&lhs) == JsonArrayConst(rhs_)) return COMPARE_RESULT_EQUAL; else return COMPARE_RESULT_DIFFER;