Added getElement() and getMember() to JsonVariantConst

This commit is contained in:
Benoit Blanchon
2020-01-27 12:35:32 +01:00
parent b04b549b34
commit 94b1c75fd2
4 changed files with 42 additions and 5 deletions

View File

@ -114,7 +114,7 @@ VariantRef::to() const {
return *this;
}
inline VariantConstRef VariantConstRef::operator[](size_t index) const {
inline VariantConstRef VariantConstRef::getElement(size_t index) const {
return ArrayConstRef(_data != 0 ? _data->asArray() : 0)[index];
}

View File

@ -369,7 +369,27 @@ class VariantConstRef : public VariantRefBase<const VariantData>,
return variantAs<typename VariantConstAs<T>::type>(_data);
}
FORCE_INLINE VariantConstRef operator[](size_t index) const;
FORCE_INLINE VariantConstRef getElement(size_t) const;
FORCE_INLINE VariantConstRef operator[](size_t index) const {
return getElement(index);
}
// getMember(const std::string&) const
// getMember(const String&) const
template <typename TString>
FORCE_INLINE VariantConstRef getMember(const TString &key) const {
return VariantConstRef(objectGet(variantAsObject(_data), adaptString(key)));
}
// getMember(char*) const
// getMember(const char*) const
// getMember(const __FlashStringHelper*) const
template <typename TChar>
FORCE_INLINE VariantConstRef getMember(TChar *key) const {
const CollectionData *obj = variantAsObject(_data);
return VariantConstRef(obj ? obj->get(adaptString(key)) : 0);
}
// operator[](const std::string&) const
// operator[](const String&) const
@ -377,7 +397,7 @@ class VariantConstRef : public VariantRefBase<const VariantData>,
FORCE_INLINE
typename enable_if<IsString<TString>::value, VariantConstRef>::type
operator[](const TString &key) const {
return VariantConstRef(objectGet(variantAsObject(_data), adaptString(key)));
return getMember(key);
}
// operator[](char*) const
@ -387,8 +407,7 @@ class VariantConstRef : public VariantRefBase<const VariantData>,
FORCE_INLINE
typename enable_if<IsString<TChar *>::value, VariantConstRef>::type
operator[](TChar *key) const {
const CollectionData *obj = variantAsObject(_data);
return VariantConstRef(obj ? obj->get(adaptString(key)) : 0);
return getMember(key);
}
FORCE_INLINE bool operator==(VariantConstRef lhs) const {