@@ -23,7 +23,7 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
23
23
JsonObject () : data_(0 ), resources_(0 ) {}
24
24
25
25
// INTERNAL USE ONLY
26
- JsonObject (detail::ObjectData * data, detail::ResourceManager* resource)
26
+ JsonObject (detail::VariantData * data, detail::ResourceManager* resource)
27
27
: data_(data), resources_(resource) {}
28
28
29
29
operator JsonVariant () const {
@@ -33,29 +33,29 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
33
33
}
34
34
35
35
operator JsonObjectConst () const {
36
- return JsonObjectConst (collectionToVariant ( data_) , resources_);
36
+ return JsonObjectConst (data_, resources_);
37
37
}
38
38
39
39
operator JsonVariantConst () const {
40
- return JsonVariantConst (collectionToVariant ( data_) , resources_);
40
+ return JsonVariantConst (data_, resources_);
41
41
}
42
42
43
43
// Returns true if the reference is unbound.
44
44
// https://arduinojson.org/v7/api/jsonobject/isnull/
45
45
bool isNull () const {
46
- return data_ == 0 ;
46
+ return ! data_ || !data_-> isObject () ;
47
47
}
48
48
49
49
// Returns true if the reference is bound.
50
50
// https://arduinojson.org/v7/api/jsonobject/isnull/
51
51
operator bool () const {
52
- return data_ != 0 ;
52
+ return ! isNull () ;
53
53
}
54
54
55
55
// Returns the depth (nesting level) of the object.
56
56
// https://arduinojson.org/v7/api/jsonobject/nesting/
57
57
size_t nesting () const {
58
- return detail::VariantData::nesting (collectionToVariant ( data_) , resources_);
58
+ return detail::VariantData::nesting (data_, resources_);
59
59
}
60
60
61
61
// Returns the number of members in the object.
@@ -67,9 +67,10 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
67
67
// Returns an iterator to the first key-value pair of the object.
68
68
// https://arduinojson.org/v7/api/jsonobject/begin/
69
69
iterator begin () const {
70
- if (!data_)
70
+ auto obj = detail::VariantData::asObject (data_);
71
+ if (!obj)
71
72
return iterator ();
72
- return iterator (data_ ->createIterator (resources_), resources_);
73
+ return iterator (obj ->createIterator (resources_), resources_);
73
74
}
74
75
75
76
// Returns an iterator following the last key-value pair of the object.
@@ -81,7 +82,7 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
81
82
// Removes all the members of the object.
82
83
// https://arduinojson.org/v7/api/jsonobject/clear/
83
84
void clear () const {
84
- detail::ObjectData::clear (data_, resources_);
85
+ detail::ObjectData::clear (detail::VariantData::asObject ( data_) , resources_);
85
86
}
86
87
87
88
// Copies an object.
@@ -131,16 +132,17 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
131
132
// Removes the member at the specified iterator.
132
133
// https://arduinojson.org/v7/api/jsonobject/remove/
133
134
FORCE_INLINE void remove (iterator it) const {
134
- detail::ObjectData::remove (data_, it.iterator_ , resources_);
135
+ detail::ObjectData::remove (detail::VariantData::asObject (data_),
136
+ it.iterator_ , resources_);
135
137
}
136
138
137
139
// Removes the member with the specified key.
138
140
// https://arduinojson.org/v7/api/jsonobject/remove/
139
141
template <typename TString,
140
142
detail::enable_if_t <detail::IsString<TString>::value, int > = 0 >
141
143
void remove (const TString& key) const {
142
- detail::ObjectData ::removeMember (data_, detail::adaptString (key),
143
- resources_);
144
+ detail::VariantData ::removeMember (data_, detail::adaptString (key),
145
+ resources_);
144
146
}
145
147
146
148
// Removes the member with the specified key.
@@ -156,8 +158,8 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
156
158
// https://arduinojson.org/v7/api/jsonobject/remove/
157
159
template <typename TChar>
158
160
FORCE_INLINE void remove (TChar* key) const {
159
- detail::ObjectData ::removeMember (data_, detail::adaptString (key),
160
- resources_);
161
+ detail::VariantData ::removeMember (data_, detail::adaptString (key),
162
+ resources_);
161
163
}
162
164
163
165
// DEPRECATED: use obj[key].is<T>() instead
@@ -166,8 +168,8 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
166
168
detail::enable_if_t <detail::IsString<TString>::value, int > = 0 >
167
169
ARDUINOJSON_DEPRECATED (" use obj[key].is<T>() instead" )
168
170
bool containsKey (const TString& key) const {
169
- return detail::ObjectData ::getMember (data_, detail::adaptString (key),
170
- resources_) != 0 ;
171
+ return detail::VariantData ::getMember (data_, detail::adaptString (key),
172
+ resources_) != 0 ;
171
173
}
172
174
173
175
// DEPRECATED: use obj["key"].is<T>() instead
@@ -178,8 +180,8 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
178
180
int > = 0 >
179
181
ARDUINOJSON_DEPRECATED (" use obj[\" key\" ].is<T>() instead" )
180
182
bool containsKey (TChar* key) const {
181
- return detail::ObjectData ::getMember (data_, detail::adaptString (key),
182
- resources_) != 0 ;
183
+ return detail::VariantData ::getMember (data_, detail::adaptString (key),
184
+ resources_) != 0 ;
183
185
}
184
186
185
187
// DEPRECATED: use obj[key].is<T>() instead
@@ -231,14 +233,14 @@ class JsonObject : public detail::VariantOperators<JsonObject> {
231
233
}
232
234
233
235
detail::VariantData* getData () const {
234
- return detail::collectionToVariant ( data_) ;
236
+ return data_;
235
237
}
236
238
237
239
detail::VariantData* getOrCreateData () const {
238
- return detail::collectionToVariant ( data_) ;
240
+ return data_;
239
241
}
240
242
241
- detail::ObjectData * data_;
243
+ detail::VariantData * data_;
242
244
detail::ResourceManager* resources_;
243
245
};
244
246
0 commit comments