forked from bblanchon/ArduinoJson
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