mirror of
https://github.com/eledio-devices/thirdparty-ArduinoJson.git
synced 2025-11-01 08:48:30 +01:00
Remove nesting() from VariantData (6796,5602)
This commit is contained in:
@@ -23,8 +23,7 @@ template <typename TData>
|
|||||||
class ArrayRefBase {
|
class ArrayRefBase {
|
||||||
public:
|
public:
|
||||||
operator VariantConstRef() const {
|
operator VariantConstRef() const {
|
||||||
const void* data = _data; // prevent warning cast-align
|
return VariantConstRef(getVariantData());
|
||||||
return VariantConstRef(reinterpret_cast<const VariantData*>(data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename TVisitor>
|
template <typename TVisitor>
|
||||||
@@ -45,7 +44,7 @@ class ArrayRefBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE size_t nesting() const {
|
FORCE_INLINE size_t nesting() const {
|
||||||
return _data ? _data->nesting() : 0;
|
return variantNesting(getVariantData());
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE size_t size() const {
|
FORCE_INLINE size_t size() const {
|
||||||
@@ -53,6 +52,11 @@ class ArrayRefBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
const VariantData* getVariantData() const {
|
||||||
|
const void* data = _data; // prevent warning cast-align
|
||||||
|
return reinterpret_cast<const VariantData*>(data);
|
||||||
|
}
|
||||||
|
|
||||||
ArrayRefBase(TData* data) : _data(data) {}
|
ArrayRefBase(TData* data) : _data(data) {}
|
||||||
TData* _data;
|
TData* _data;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ class CollectionData {
|
|||||||
|
|
||||||
void clear();
|
void clear();
|
||||||
size_t memoryUsage() const;
|
size_t memoryUsage() const;
|
||||||
size_t nesting() const;
|
|
||||||
size_t size() const;
|
size_t size() const;
|
||||||
|
|
||||||
VariantSlot *addSlot(MemoryPool *);
|
VariantSlot *addSlot(MemoryPool *);
|
||||||
|
|||||||
@@ -203,16 +203,6 @@ inline size_t CollectionData::memoryUsage() const {
|
|||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline size_t CollectionData::nesting() const {
|
|
||||||
size_t maxChildNesting = 0;
|
|
||||||
for (VariantSlot* s = _head; s; s = s->next()) {
|
|
||||||
size_t childNesting = s->data()->nesting();
|
|
||||||
if (childNesting > maxChildNesting)
|
|
||||||
maxChildNesting = childNesting;
|
|
||||||
}
|
|
||||||
return maxChildNesting + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline size_t CollectionData::size() const {
|
inline size_t CollectionData::size() const {
|
||||||
return slotSize(_head);
|
return slotSize(_head);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ class JsonDocument : public Visitable,
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t nesting() const {
|
size_t nesting() const {
|
||||||
return _data.nesting();
|
return variantNesting(&_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t capacity() const {
|
size_t capacity() const {
|
||||||
|
|||||||
@@ -18,8 +18,7 @@ template <typename TData>
|
|||||||
class ObjectRefBase {
|
class ObjectRefBase {
|
||||||
public:
|
public:
|
||||||
operator VariantConstRef() const {
|
operator VariantConstRef() const {
|
||||||
const void* data = _data; // prevent warning cast-align
|
return VariantConstRef(getVariantData());
|
||||||
return VariantConstRef(reinterpret_cast<const VariantData*>(data));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename TVisitor>
|
template <typename TVisitor>
|
||||||
@@ -40,7 +39,7 @@ class ObjectRefBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE size_t nesting() const {
|
FORCE_INLINE size_t nesting() const {
|
||||||
return _data ? _data->nesting() : 0;
|
return variantNesting(getVariantData());
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE size_t size() const {
|
FORCE_INLINE size_t size() const {
|
||||||
@@ -48,6 +47,11 @@ class ObjectRefBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
const VariantData* getVariantData() const {
|
||||||
|
const void* data = _data; // prevent warning cast-align
|
||||||
|
return reinterpret_cast<const VariantData*>(data);
|
||||||
|
}
|
||||||
|
|
||||||
ObjectRefBase(TData* data) : _data(data) {}
|
ObjectRefBase(TData* data) : _data(data) {}
|
||||||
TData* _data;
|
TData* _data;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -97,6 +97,10 @@ class VariantData {
|
|||||||
return const_cast<VariantData *>(this)->asArray();
|
return const_cast<VariantData *>(this)->asArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const CollectionData *asCollection() const {
|
||||||
|
return isCollection() ? &_content.asCollection : 0;
|
||||||
|
}
|
||||||
|
|
||||||
CollectionData *asObject() {
|
CollectionData *asObject() {
|
||||||
return isObject() ? &_content.asCollection : 0;
|
return isObject() ? &_content.asCollection : 0;
|
||||||
}
|
}
|
||||||
@@ -261,12 +265,6 @@ class VariantData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t nesting() const {
|
|
||||||
if (isPointer()) // P+0 G+0
|
|
||||||
return _content.asPointer->nesting();
|
|
||||||
return isCollection() ? _content.asCollection.nesting() : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t size() const {
|
size_t size() const {
|
||||||
if (isPointer()) // P+0 G+0
|
if (isPointer()) // P+0 G+0
|
||||||
return _content.asPointer->size();
|
return _content.asPointer->size();
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include <ArduinoJson/Polyfills/attributes.hpp>
|
#include <ArduinoJson/Polyfills/attributes.hpp>
|
||||||
#include <ArduinoJson/Strings/StoragePolicy.hpp>
|
#include <ArduinoJson/Strings/StoragePolicy.hpp>
|
||||||
#include <ArduinoJson/Variant/VariantData.hpp>
|
#include <ArduinoJson/Variant/VariantData.hpp>
|
||||||
|
#include <ArduinoJson/Variant/Visitor.hpp>
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE {
|
namespace ARDUINOJSON_NAMESPACE {
|
||||||
|
|
||||||
@@ -106,4 +107,21 @@ inline bool variantIsNull(const VariantData *var) {
|
|||||||
return var == 0 || var->resolve()->isNull();
|
return var == 0 || var->resolve()->isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline size_t variantNesting(const VariantData *var) {
|
||||||
|
if (!var)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
const CollectionData *collection = var->resolve()->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;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ARDUINOJSON_NAMESPACE
|
} // namespace ARDUINOJSON_NAMESPACE
|
||||||
|
|||||||
@@ -40,8 +40,8 @@ class VariantRefBase : public VariantTag {
|
|||||||
return _data ? _data->memoryUsage() : 0;
|
return _data ? _data->memoryUsage() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE size_t nesting() const {
|
size_t nesting() const {
|
||||||
return _data ? _data->nesting() : 0;
|
return variantNesting(_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t size() const {
|
size_t size() const {
|
||||||
|
|||||||
Reference in New Issue
Block a user