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