mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +01:00 
			
		
		
		
	Don't call operator VariantConstRef in VariantComparer
				
					
				
			This commit is contained in:
		| @@ -22,6 +22,8 @@ class ElementProxy; | |||||||
|  |  | ||||||
| template <typename TData> | template <typename TData> | ||||||
| class ArrayRefBase { | class ArrayRefBase { | ||||||
|  |   friend class VariantAttorney; | ||||||
|  |  | ||||||
|  public: |  public: | ||||||
|   operator VariantConstRef() const { |   operator VariantConstRef() const { | ||||||
|     return VariantConstRef(collectionToVariant(_data)); |     return VariantConstRef(collectionToVariant(_data)); | ||||||
| @@ -48,6 +50,10 @@ class ArrayRefBase { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|  |   const VariantData* getData() const { | ||||||
|  |     return collectionToVariant(_data); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   ArrayRefBase(TData* data) : _data(data) {} |   ArrayRefBase(TData* data) : _data(data) {} | ||||||
|   TData* _data; |   TData* _data; | ||||||
| }; | }; | ||||||
|   | |||||||
| @@ -16,6 +16,8 @@ namespace ARDUINOJSON_NAMESPACE { | |||||||
|  |  | ||||||
| template <typename TData> | template <typename TData> | ||||||
| class ObjectRefBase { | class ObjectRefBase { | ||||||
|  |   friend class VariantAttorney; | ||||||
|  |  | ||||||
|  public: |  public: | ||||||
|   operator VariantConstRef() const { |   operator VariantConstRef() const { | ||||||
|     return VariantConstRef(collectionToVariant(_data)); |     return VariantConstRef(collectionToVariant(_data)); | ||||||
| @@ -42,6 +44,10 @@ class ObjectRefBase { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|  |   const VariantData* getData() const { | ||||||
|  |     return collectionToVariant(_data); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   ObjectRefBase(TData* data) : _data(data) {} |   ObjectRefBase(TData* data) : _data(data) {} | ||||||
|   TData* _data; |   TData* _data; | ||||||
| }; | }; | ||||||
| @@ -116,8 +122,6 @@ class ObjectConstRef : public ObjectRefBase<const CollectionData>, | |||||||
|     } |     } | ||||||
|     return count == rhs.size(); |     return count == rhs.size(); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  private: |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| class ObjectRef : public ObjectRefBase<CollectionData>, | class ObjectRef : public ObjectRefBase<CollectionData>, | ||||||
|   | |||||||
| @@ -128,9 +128,9 @@ struct RawComparer : ComparerBase { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| struct VariantComparer : 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) { |   CompareResult visitArray(const CollectionData& lhs) { | ||||||
|     ArrayComparer comparer(lhs); |     ArrayComparer comparer(lhs); | ||||||
| @@ -180,8 +180,7 @@ struct VariantComparer : ComparerBase { | |||||||
|  private: |  private: | ||||||
|   template <typename TComparer> |   template <typename TComparer> | ||||||
|   CompareResult accept(TComparer& comparer) { |   CompareResult accept(TComparer& comparer) { | ||||||
|     CompareResult reversedResult = |     CompareResult reversedResult = variantAccept(rhs, comparer); | ||||||
|         variantAccept(VariantAttorney::getData(rhs), comparer); |  | ||||||
|     switch (reversedResult) { |     switch (reversedResult) { | ||||||
|       case COMPARE_RESULT_GREATER: |       case COMPARE_RESULT_GREATER: | ||||||
|         return COMPARE_RESULT_LESS; |         return COMPARE_RESULT_LESS; | ||||||
| @@ -198,7 +197,7 @@ struct Comparer< | |||||||
|     T, typename enable_if<is_convertible<T, VariantConstRef>::value>::type> |     T, typename enable_if<is_convertible<T, VariantConstRef>::value>::type> | ||||||
|     : VariantComparer { |     : VariantComparer { | ||||||
|   explicit Comparer(const T& value) |   explicit Comparer(const T& value) | ||||||
|       : VariantComparer(value.operator VariantConstRef()) {} |       : VariantComparer(VariantAttorney::getData(value)) {} | ||||||
| }; | }; | ||||||
|  |  | ||||||
| template <typename T> | template <typename T> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user