diff --git a/src/ArduinoJson/Array/ArrayRef.hpp b/src/ArduinoJson/Array/ArrayRef.hpp index 967260fe..2b75e422 100644 --- a/src/ArduinoJson/Array/ArrayRef.hpp +++ b/src/ArduinoJson/Array/ArrayRef.hpp @@ -22,6 +22,8 @@ class ElementProxy; template class ArrayRefBase { + friend class VariantAttorney; + public: operator VariantConstRef() const { return VariantConstRef(collectionToVariant(_data)); @@ -48,6 +50,10 @@ class ArrayRefBase { } protected: + const VariantData* getData() const { + return collectionToVariant(_data); + } + ArrayRefBase(TData* data) : _data(data) {} TData* _data; }; diff --git a/src/ArduinoJson/Object/ObjectRef.hpp b/src/ArduinoJson/Object/ObjectRef.hpp index fd235cda..6e93361b 100644 --- a/src/ArduinoJson/Object/ObjectRef.hpp +++ b/src/ArduinoJson/Object/ObjectRef.hpp @@ -16,6 +16,8 @@ namespace ARDUINOJSON_NAMESPACE { template class ObjectRefBase { + friend class VariantAttorney; + public: operator VariantConstRef() const { return VariantConstRef(collectionToVariant(_data)); @@ -42,6 +44,10 @@ class ObjectRefBase { } protected: + const VariantData* getData() const { + return collectionToVariant(_data); + } + ObjectRefBase(TData* data) : _data(data) {} TData* _data; }; @@ -116,8 +122,6 @@ class ObjectConstRef : public ObjectRefBase, } return count == rhs.size(); } - - private: }; class ObjectRef : public ObjectRefBase, diff --git a/src/ArduinoJson/Variant/VariantCompare.hpp b/src/ArduinoJson/Variant/VariantCompare.hpp index c6a27b46..1197e083 100644 --- a/src/ArduinoJson/Variant/VariantCompare.hpp +++ b/src/ArduinoJson/Variant/VariantCompare.hpp @@ -128,9 +128,9 @@ struct RawComparer : ComparerBase { }; struct VariantComparer : ComparerBase { - VariantConstRef rhs; + const VariantData* rhs; - explicit VariantComparer(VariantConstRef value) : rhs(value) {} + explicit VariantComparer(const VariantData* value) : rhs(value) {} CompareResult visitArray(const CollectionData& lhs) { ArrayComparer comparer(lhs); @@ -180,8 +180,7 @@ struct VariantComparer : ComparerBase { private: template CompareResult accept(TComparer& comparer) { - CompareResult reversedResult = - variantAccept(VariantAttorney::getData(rhs), comparer); + CompareResult reversedResult = variantAccept(rhs, comparer); switch (reversedResult) { case COMPARE_RESULT_GREATER: return COMPARE_RESULT_LESS; @@ -198,7 +197,7 @@ struct Comparer< T, typename enable_if::value>::type> : VariantComparer { explicit Comparer(const T& value) - : VariantComparer(value.operator VariantConstRef()) {} + : VariantComparer(VariantAttorney::getData(value)) {} }; template