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> | ||||
| 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; | ||||
| }; | ||||
|   | ||||
| @@ -16,6 +16,8 @@ namespace ARDUINOJSON_NAMESPACE { | ||||
|  | ||||
| template <typename TData> | ||||
| 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<const CollectionData>, | ||||
|     } | ||||
|     return count == rhs.size(); | ||||
|   } | ||||
|  | ||||
|  private: | ||||
| }; | ||||
|  | ||||
| class ObjectRef : public ObjectRefBase<CollectionData>, | ||||
|   | ||||
| @@ -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 <typename TComparer> | ||||
|   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<is_convertible<T, VariantConstRef>::value>::type> | ||||
|     : VariantComparer { | ||||
|   explicit Comparer(const T& value) | ||||
|       : VariantComparer(value.operator VariantConstRef()) {} | ||||
|       : VariantComparer(VariantAttorney::getData(value)) {} | ||||
| }; | ||||
|  | ||||
| template <typename T> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user