Add getMemberConst() and getElementConst()

This commit is contained in:
Benoit Blanchon
2022-03-31 11:59:00 +02:00
parent ac1d29fac0
commit 7b19a4b6e7
8 changed files with 181 additions and 66 deletions

View File

@@ -123,27 +123,27 @@ class VariantConstRef : public VariantRefBase<const VariantData>,
return as<T>();
}
FORCE_INLINE VariantConstRef getElement(size_t index) const {
FORCE_INLINE VariantConstRef getElementConst(size_t index) const {
return VariantConstRef(_data != 0 ? _data->getElement(index) : 0);
}
FORCE_INLINE VariantConstRef operator[](size_t index) const {
return getElement(index);
return getElementConst(index);
}
// getMember(const std::string&) const
// getMember(const String&) const
// getMemberConst(const std::string&) const
// getMemberConst(const String&) const
template <typename TString>
FORCE_INLINE VariantConstRef getMember(const TString &key) const {
FORCE_INLINE VariantConstRef getMemberConst(const TString &key) const {
return VariantConstRef(
objectGetMember(variantAsObject(_data), adaptString(key)));
}
// getMember(char*) const
// getMember(const char*) const
// getMember(const __FlashStringHelper*) const
// getMemberConst(char*) const
// getMemberConst(const char*) const
// getMemberConst(const __FlashStringHelper*) const
template <typename TChar>
FORCE_INLINE VariantConstRef getMember(TChar *key) const {
FORCE_INLINE VariantConstRef getMemberConst(TChar *key) const {
const CollectionData *obj = variantAsObject(_data);
return VariantConstRef(obj ? obj->getMember(adaptString(key)) : 0);
}
@@ -154,7 +154,7 @@ class VariantConstRef : public VariantRefBase<const VariantData>,
FORCE_INLINE
typename enable_if<IsString<TString>::value, VariantConstRef>::type
operator[](const TString &key) const {
return getMember(key);
return getMemberConst(key);
}
// operator[](char*) const
@@ -164,7 +164,7 @@ class VariantConstRef : public VariantRefBase<const VariantData>,
FORCE_INLINE
typename enable_if<IsString<TChar *>::value, VariantConstRef>::type
operator[](TChar *key) const {
return getMember(key);
return getMemberConst(key);
}
};
@@ -292,6 +292,10 @@ class VariantRef : public VariantRefBase<VariantData>,
return VariantRef(_pool, _data != 0 ? _data->getElement(index) : 0);
}
FORCE_INLINE VariantConstRef getElementConst(size_t index) const {
return VariantConstRef(_data != 0 ? _data->getElement(index) : 0);
}
FORCE_INLINE VariantRef getOrAddElement(size_t index) const {
return VariantRef(_pool, variantGetOrAddElement(_data, index, _pool));
}
@@ -313,6 +317,22 @@ class VariantRef : public VariantRefBase<VariantData>,
_data != 0 ? _data->getMember(adaptString(key)) : 0);
}
// getMemberConst(const char*) const
// getMemberConst(const __FlashStringHelper*) const
template <typename TChar>
FORCE_INLINE VariantConstRef getMemberConst(TChar *key) const {
return VariantConstRef(_data ? _data->getMember(adaptString(key)) : 0);
}
// getMemberConst(const std::string&) const
// getMemberConst(const String&) const
template <typename TString>
FORCE_INLINE
typename enable_if<IsString<TString>::value, VariantConstRef>::type
getMemberConst(const TString &key) const {
return VariantConstRef(_data ? _data->getMember(adaptString(key)) : 0);
}
// getOrAddMember(char*) const
// getOrAddMember(const char*) const
// getOrAddMember(const __FlashStringHelper*) const