@@ -88,7 +88,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
8888 // https://arduinojson.org/v7/api/jsondocument/clear/
8989 void clear () {
9090 resources_.clear ();
91- data_.reset () ;
91+ data_.type = detail::VariantType::Null ;
9292 }
9393
9494 // Returns true if the root is of the specified type.
@@ -120,13 +120,13 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
120120 // Returns the depth (nesting level) of the array.
121121 // https://arduinojson.org/v7/api/jsondocument/nesting/
122122 size_t nesting () const {
123- return data_ .nesting (&resources_ );
123+ return getVariantImpl () .nesting ();
124124 }
125125
126126 // Returns the number of elements in the root array or object.
127127 // https://arduinojson.org/v7/api/jsondocument/size/
128128 size_t size () const {
129- return data_ .size (&resources_ );
129+ return getVariantImpl () .size ();
130130 }
131131
132132 // Copies the specified document.
@@ -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 data_ .getMember (detail::adaptString (key), &resources_ ) != 0 ;
168+ return getVariantImpl () .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 data_ .getMember (detail::adaptString (key), &resources_ ) != 0 ;
177+ return getVariantImpl () .getMember (detail::adaptString (key)) != 0 ;
178178 }
179179
180180 // DEPRECATED: use obj[key].is<T>() instead
@@ -212,7 +212,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
212212 detail::enable_if_t <detail::IsString<TString>::value, int > = 0 >
213213 JsonVariantConst operator [](const TString& key) const {
214214 return JsonVariantConst (
215- data_ .getMember (detail::adaptString (key), &resources_ ), &resources_);
215+ getVariantImpl () .getMember (detail::adaptString (key)), &resources_);
216216 }
217217
218218 // Gets a root object's member.
@@ -223,7 +223,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
223223 int > = 0 >
224224 JsonVariantConst operator [](TChar* key) const {
225225 return JsonVariantConst (
226- data_ .getMember (detail::adaptString (key), &resources_ ), &resources_);
226+ getVariantImpl () .getMember (detail::adaptString (key)), &resources_);
227227 }
228228
229229 // Gets or sets a root array's element.
@@ -237,7 +237,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
237237 // Gets a root array's member.
238238 // https://arduinojson.org/v7/api/jsondocument/subscript/
239239 JsonVariantConst operator [](size_t index) const {
240- return JsonVariantConst (data_ .getElement (index, &resources_ ), &resources_);
240+ return JsonVariantConst (getVariantImpl () .getElement (index), &resources_);
241241 }
242242
243243 // Gets or sets a root object's member.
@@ -267,31 +267,30 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
267267 template <typename T, detail::enable_if_t <
268268 detail::is_same<T, JsonVariant>::value, int > = 0 >
269269 JsonVariant add () {
270- return JsonVariant (data_ .addElement (&resources_ ), &resources_);
270+ return JsonVariant (getVariantImpl () .addElement (), &resources_);
271271 }
272272
273273 // Appends a value to the root array.
274274 // https://arduinojson.org/v7/api/jsondocument/add/
275275 template <typename TValue>
276276 bool add (const TValue& value) {
277- return data_ .addValue (value, &resources_ );
277+ return getVariantImpl () .addValue (value);
278278 }
279279
280280 // Appends a value to the root array.
281281 // https://arduinojson.org/v7/api/jsondocument/add/
282282 template <typename TChar,
283283 detail::enable_if_t <!detail::is_const<TChar>::value, int > = 0 >
284284 bool add (TChar* value) {
285- return data_ .addValue (value, &resources_ );
285+ return getVariantImpl () .addValue (value);
286286 }
287287
288288 // Removes an element of the root array.
289289 // https://arduinojson.org/v7/api/jsondocument/remove/
290290 template <typename T,
291291 detail::enable_if_t <detail::is_integral<T>::value, int > = 0 >
292292 void remove (T index) {
293- detail::VariantData::removeElement (getData (), size_t (index),
294- getResourceManager ());
293+ getVariantImpl ().removeElement (size_t (index));
295294 }
296295
297296 // Removes a member of the root object.
@@ -301,17 +300,15 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
301300 !detail::is_const<TChar>::value,
302301 int > = 0 >
303302 void remove (TChar* key) {
304- detail::VariantData::removeMember (getData (), detail::adaptString (key),
305- getResourceManager ());
303+ getVariantImpl ().removeMember (detail::adaptString (key));
306304 }
307305
308306 // Removes a member of the root object.
309307 // https://arduinojson.org/v7/api/jsondocument/remove/
310308 template <typename TString,
311309 detail::enable_if_t <detail::IsString<TString>::value, int > = 0 >
312310 void remove (const TString& key) {
313- detail::VariantData::removeMember (getData (), detail::adaptString (key),
314- getResourceManager ());
311+ getVariantImpl ().removeMember (detail::adaptString (key));
315312 }
316313
317314 // Removes a member of the root object or an element of the root array.
@@ -391,6 +388,10 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
391388 }
392389
393390 private:
391+ detail::VariantImpl getVariantImpl () const {
392+ return detail::VariantImpl (&data_, &resources_);
393+ }
394+
394395 JsonVariant getVariant () {
395396 return JsonVariant (&data_, &resources_);
396397 }
0 commit comments