Add collectionToVariant()

This commit is contained in:
Benoit Blanchon
2022-07-05 09:57:06 +02:00
parent 758580bfb6
commit 750cd0be92
3 changed files with 15 additions and 14 deletions

View File

@ -23,7 +23,7 @@ template <typename TData>
class ArrayRefBase {
public:
operator VariantConstRef() const {
return VariantConstRef(getVariantData());
return VariantConstRef(collectionToVariant(_data));
}
FORCE_INLINE bool isNull() const {
@ -39,7 +39,7 @@ class ArrayRefBase {
}
FORCE_INLINE size_t nesting() const {
return variantNesting(getVariantData());
return variantNesting(collectionToVariant(_data));
}
FORCE_INLINE size_t size() const {
@ -47,11 +47,6 @@ class ArrayRefBase {
}
protected:
const VariantData* getVariantData() const {
const void* data = _data; // prevent warning cast-align
return reinterpret_cast<const VariantData*>(data);
}
ArrayRefBase(TData* data) : _data(data) {}
TData* _data;
};

View File

@ -81,4 +81,15 @@ class CollectionData {
VariantSlot *getPreviousSlot(VariantSlot *) const;
};
inline const VariantData *collectionToVariant(
const CollectionData *collection) {
const void *data = collection; // prevent warning cast-align
return reinterpret_cast<const VariantData *>(data);
}
inline VariantData *collectionToVariant(CollectionData *collection) {
void *data = collection; // prevent warning cast-align
return reinterpret_cast<VariantData *>(data);
}
} // namespace ARDUINOJSON_NAMESPACE

View File

@ -18,7 +18,7 @@ template <typename TData>
class ObjectRefBase {
public:
operator VariantConstRef() const {
return VariantConstRef(getVariantData());
return VariantConstRef(collectionToVariant(_data));
}
FORCE_INLINE bool isNull() const {
@ -34,7 +34,7 @@ class ObjectRefBase {
}
FORCE_INLINE size_t nesting() const {
return variantNesting(getVariantData());
return variantNesting(collectionToVariant(_data));
}
FORCE_INLINE size_t size() const {
@ -42,11 +42,6 @@ class ObjectRefBase {
}
protected:
const VariantData* getVariantData() const {
const void* data = _data; // prevent warning cast-align
return reinterpret_cast<const VariantData*>(data);
}
ObjectRefBase(TData* data) : _data(data) {}
TData* _data;
};