Improved coverage of JsonObject

This commit is contained in:
Benoit Blanchon
2020-02-22 14:17:10 +01:00
parent af0edecddb
commit a471aed6db
5 changed files with 60 additions and 36 deletions

View File

@@ -25,7 +25,8 @@ inline bool objectEquals(const CollectionData *lhs, const CollectionData *rhs) {
}
template <typename TAdaptedString>
inline VariantData *objectGet(const CollectionData *obj, TAdaptedString key) {
inline VariantData *objectGetMember(const CollectionData *obj,
TAdaptedString key) {
if (!obj)
return 0;
return obj->getMember(key);
@@ -39,20 +40,11 @@ void objectRemove(CollectionData *obj, TAdaptedString key) {
}
template <typename TAdaptedString>
inline VariantData *objectGetOrCreate(CollectionData *obj, TAdaptedString key,
MemoryPool *pool) {
inline VariantData *objectGetOrAddMember(CollectionData *obj,
TAdaptedString key, MemoryPool *pool) {
if (!obj)
return 0;
// ignore null key
if (key.isNull())
return 0;
// search a matching key
VariantData *var = obj->getMember(key);
if (var)
return var;
return obj->addMember(key, pool);
return obj->getOrAddMember(key, pool);
}
} // namespace ARDUINOJSON_NAMESPACE

View File

@@ -129,7 +129,7 @@ class ObjectConstRef : public ObjectRefBase<const CollectionData>,
private:
template <typename TAdaptedString>
FORCE_INLINE VariantConstRef get_impl(TAdaptedString key) const {
return VariantConstRef(objectGet(_data, key));
return VariantConstRef(objectGetMember(_data, key));
}
};
@@ -180,7 +180,7 @@ class ObjectRef : public ObjectRefBase<CollectionData>,
// getMember(const String&) const
template <typename TString>
FORCE_INLINE VariantRef getMember(const TString& key) const {
return get_impl(adaptString(key));
return VariantRef(_pool, objectGetMember(_data, adaptString(key)));
}
// getMember(char*) const
@@ -188,14 +188,15 @@ class ObjectRef : public ObjectRefBase<CollectionData>,
// getMember(const __FlashStringHelper*) const
template <typename TChar>
FORCE_INLINE VariantRef getMember(TChar* key) const {
return get_impl(adaptString(key));
return VariantRef(_pool, objectGetMember(_data, adaptString(key)));
}
// getOrAddMember(const std::string&) const
// getOrAddMember(const String&) const
template <typename TString>
FORCE_INLINE VariantRef getOrAddMember(const TString& key) const {
return getOrCreate_impl(adaptString(key));
return VariantRef(_pool,
objectGetOrAddMember(_data, adaptString(key), _pool));
}
// getOrAddMember(char*) const
@@ -203,7 +204,8 @@ class ObjectRef : public ObjectRefBase<CollectionData>,
// getOrAddMember(const __FlashStringHelper*) const
template <typename TChar>
FORCE_INLINE VariantRef getOrAddMember(TChar* key) const {
return getOrCreate_impl(adaptString(key));
return VariantRef(_pool,
objectGetOrAddMember(_data, adaptString(key), _pool));
}
FORCE_INLINE bool operator==(ObjectRef rhs) const {
@@ -232,16 +234,6 @@ class ObjectRef : public ObjectRefBase<CollectionData>,
}
private:
template <typename TAdaptedString>
FORCE_INLINE VariantRef get_impl(TAdaptedString key) const {
return VariantRef(_pool, objectGet(_data, key));
}
template <typename TAdaptedString>
FORCE_INLINE VariantRef getOrCreate_impl(TAdaptedString key) const {
return VariantRef(_pool, objectGetOrCreate(_data, key, _pool));
}
MemoryPool* _pool;
};
} // namespace ARDUINOJSON_NAMESPACE