Skip to content

Commit 8af2940

Browse files
committed
Extract asObject()
Before: 9874, 8796, 9694, 12634, 9970 After: 9874, 8736, 9694, 12634, 9970 Target: 9800, 8458, 9634, 12290, 9702
1 parent 0e136aa commit 8af2940

File tree

2 files changed

+20
-10
lines changed

2 files changed

+20
-10
lines changed

src/ArduinoJson/Document/JsonDocument.hpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
165165
template <typename TChar>
166166
ARDUINOJSON_DEPRECATED("use doc[\"key\"].is<T>() instead")
167167
bool containsKey(TChar* key) const {
168-
return getVariantImpl().getMember(detail::adaptString(key)) != 0;
168+
return getObjectImpl().getMember(detail::adaptString(key)) != 0;
169169
}
170170

171171
// DEPRECATED: use obj[key].is<T>() instead
@@ -174,7 +174,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
174174
detail::enable_if_t<detail::IsString<TString>::value, int> = 0>
175175
ARDUINOJSON_DEPRECATED("use doc[key].is<T>() instead")
176176
bool containsKey(const TString& key) const {
177-
return getVariantImpl().getMember(detail::adaptString(key)) != 0;
177+
return getObjectImpl().getMember(detail::adaptString(key)) != 0;
178178
}
179179

180180
// DEPRECATED: use obj[key].is<T>() instead
@@ -211,8 +211,8 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
211211
template <typename TString,
212212
detail::enable_if_t<detail::IsString<TString>::value, int> = 0>
213213
JsonVariantConst operator[](const TString& key) const {
214-
return JsonVariantConst(
215-
getVariantImpl().getMember(detail::adaptString(key)), &resources_);
214+
return JsonVariantConst(getObjectImpl().getMember(detail::adaptString(key)),
215+
&resources_);
216216
}
217217

218218
// Gets a root object's member.
@@ -222,8 +222,8 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
222222
!detail::is_const<TChar>::value,
223223
int> = 0>
224224
JsonVariantConst operator[](TChar* key) const {
225-
return JsonVariantConst(
226-
getVariantImpl().getMember(detail::adaptString(key)), &resources_);
225+
return JsonVariantConst(getObjectImpl().getMember(detail::adaptString(key)),
226+
&resources_);
227227
}
228228

229229
// Gets or sets a root array's element.
@@ -300,15 +300,15 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
300300
!detail::is_const<TChar>::value,
301301
int> = 0>
302302
void remove(TChar* key) {
303-
getVariantImpl().removeMember(detail::adaptString(key));
303+
getObjectImpl().removeMember(detail::adaptString(key));
304304
}
305305

306306
// Removes a member of the root object.
307307
// https://arduinojson.org/v7/api/jsondocument/remove/
308308
template <typename TString,
309309
detail::enable_if_t<detail::IsString<TString>::value, int> = 0>
310310
void remove(const TString& key) {
311-
getVariantImpl().removeMember(detail::adaptString(key));
311+
getObjectImpl().removeMember(detail::adaptString(key));
312312
}
313313

314314
// 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&> {
416416
return &data_;
417417
}
418418

419+
detail::ObjectImpl getObjectImpl() const {
420+
return detail::VariantImpl::asObject(&data_, &resources_);
421+
}
422+
419423
mutable detail::ResourceManager resources_;
420424
mutable detail::VariantData data_;
421425
};

src/ArduinoJson/Variant/VariantData.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -295,8 +295,14 @@ class VariantImpl {
295295
}
296296

297297
ObjectImpl asObject() {
298-
return ObjectImpl(isObject() ? &data_->content.asCollection : nullptr,
299-
resources_);
298+
return asObject(data_, resources_);
299+
}
300+
301+
static ObjectImpl asObject(VariantData* data, ResourceManager* resources) {
302+
return ObjectImpl(data && data->type == VariantType::Object
303+
? &data->content.asCollection
304+
: nullptr,
305+
resources);
300306
}
301307

302308
JsonString asRawString() const {

0 commit comments

Comments
 (0)