Extract asObject()

Before: 9874, 8796, 9694, 12634, 9970
After:  9874, 8736, 9694, 12634, 9970
Target: 9800, 8458, 9634, 12290, 9702
This commit is contained in:
Benoit Blanchon
2025-09-17 21:51:03 +02:00
parent 0e136aaf0a
commit 8af294078f
2 changed files with 20 additions and 10 deletions

View File

@@ -165,7 +165,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
template <typename TChar>
ARDUINOJSON_DEPRECATED("use doc[\"key\"].is<T>() instead")
bool containsKey(TChar* key) const {
return getVariantImpl().getMember(detail::adaptString(key)) != 0;
return getObjectImpl().getMember(detail::adaptString(key)) != 0;
}
// DEPRECATED: use obj[key].is<T>() instead
@@ -174,7 +174,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
detail::enable_if_t<detail::IsString<TString>::value, int> = 0>
ARDUINOJSON_DEPRECATED("use doc[key].is<T>() instead")
bool containsKey(const TString& key) const {
return getVariantImpl().getMember(detail::adaptString(key)) != 0;
return getObjectImpl().getMember(detail::adaptString(key)) != 0;
}
// DEPRECATED: use obj[key].is<T>() instead
@@ -211,8 +211,8 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
template <typename TString,
detail::enable_if_t<detail::IsString<TString>::value, int> = 0>
JsonVariantConst operator[](const TString& key) const {
return JsonVariantConst(
getVariantImpl().getMember(detail::adaptString(key)), &resources_);
return JsonVariantConst(getObjectImpl().getMember(detail::adaptString(key)),
&resources_);
}
// Gets a root object's member.
@@ -222,8 +222,8 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
!detail::is_const<TChar>::value,
int> = 0>
JsonVariantConst operator[](TChar* key) const {
return JsonVariantConst(
getVariantImpl().getMember(detail::adaptString(key)), &resources_);
return JsonVariantConst(getObjectImpl().getMember(detail::adaptString(key)),
&resources_);
}
// Gets or sets a root array's element.
@@ -300,7 +300,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
!detail::is_const<TChar>::value,
int> = 0>
void remove(TChar* key) {
getVariantImpl().removeMember(detail::adaptString(key));
getObjectImpl().removeMember(detail::adaptString(key));
}
// Removes a member of the root object.
@@ -308,7 +308,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
template <typename TString,
detail::enable_if_t<detail::IsString<TString>::value, int> = 0>
void remove(const TString& key) {
getVariantImpl().removeMember(detail::adaptString(key));
getObjectImpl().removeMember(detail::adaptString(key));
}
// Removes a member of the root object or an element of the root array.
@@ -416,6 +416,10 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
return &data_;
}
detail::ObjectImpl getObjectImpl() const {
return detail::VariantImpl::asObject(&data_, &resources_);
}
mutable detail::ResourceManager resources_;
mutable detail::VariantData data_;
};

View File

@@ -295,8 +295,14 @@ class VariantImpl {
}
ObjectImpl asObject() {
return ObjectImpl(isObject() ? &data_->content.asCollection : nullptr,
resources_);
return asObject(data_, resources_);
}
static ObjectImpl asObject(VariantData* data, ResourceManager* resources) {
return ObjectImpl(data && data->type == VariantType::Object
? &data->content.asCollection
: nullptr,
resources);
}
JsonString asRawString() const {