diff --git a/src/ArduinoJson/Document/JsonDocument.hpp b/src/ArduinoJson/Document/JsonDocument.hpp index 2d260864..8ddc658d 100644 --- a/src/ArduinoJson/Document/JsonDocument.hpp +++ b/src/ArduinoJson/Document/JsonDocument.hpp @@ -157,7 +157,7 @@ class JsonDocument : public detail::VariantOperators { // Returns the depth (nesting level) of the array. // https://arduinojson.org/v6/api/jsondocument/nesting/ size_t nesting() const { - return variantNesting(&data_); + return data_.nesting(); } // Returns the number of elements in the root array or object. diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 9fddd6b9..7a3a2c00 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -256,6 +256,20 @@ class VariantData { content_.asCollection.movePointers(variantDistance); } + size_t nesting() const { + auto collection = asCollection(); + if (!collection) + return 0; + + size_t maxChildNesting = 0; + for (const VariantSlot* s = collection->head(); s; s = s->next()) { + size_t childNesting = s->data()->nesting(); + if (childNesting > maxChildNesting) + maxChildNesting = childNesting; + } + return maxChildNesting + 1; + } + void operator=(const VariantData& src) { content_ = src.content_; flags_ = uint8_t((flags_ & OWNED_KEY_BIT) | (src.flags_ & ~OWNED_KEY_BIT)); diff --git a/src/ArduinoJson/Variant/VariantFunctions.hpp b/src/ArduinoJson/Variant/VariantFunctions.hpp index fc31249e..053d2c8b 100644 --- a/src/ArduinoJson/Variant/VariantFunctions.hpp +++ b/src/ArduinoJson/Variant/VariantFunctions.hpp @@ -190,18 +190,7 @@ inline bool variantIsNull(const VariantData* var) { inline size_t variantNesting(const VariantData* var) { if (!var) return 0; - - const CollectionData* collection = var->asCollection(); - if (!collection) - return 0; - - size_t maxChildNesting = 0; - for (const VariantSlot* s = collection->head(); s; s = s->next()) { - size_t childNesting = variantNesting(s->data()); - if (childNesting > maxChildNesting) - maxChildNesting = childNesting; - } - return maxChildNesting + 1; + return var->nesting(); } ARDUINOJSON_END_PRIVATE_NAMESPACE