Pārlūkot izejas kodu

Don't call `operator VariantConstRef` in `VariantComparer`

Benoit Blanchon 3 gadi atpakaļ
vecāks
revīzija
2b6bb78a09

+ 6 - 0
src/ArduinoJson/Array/ArrayRef.hpp

@@ -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;
 };

+ 6 - 2
src/ArduinoJson/Object/ObjectRef.hpp

@@ -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>,

+ 4 - 5
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 <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>