forked from bblanchon/ArduinoJson
Inline class ObjectRefBase
This commit is contained in:
@ -11,11 +11,16 @@ namespace ARDUINOJSON_NAMESPACE {
|
|||||||
|
|
||||||
class ArrayRef;
|
class ArrayRef;
|
||||||
|
|
||||||
template <typename TData>
|
class ObjectConstRef : public VariantOperators<ObjectConstRef> {
|
||||||
class ObjectRefBase {
|
friend class ObjectRef;
|
||||||
friend class VariantAttorney;
|
friend class VariantAttorney;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
typedef ObjectConstIterator iterator;
|
||||||
|
|
||||||
|
ObjectConstRef() : _data(0) {}
|
||||||
|
ObjectConstRef(const CollectionData* data) : _data(data) {}
|
||||||
|
|
||||||
operator VariantConstRef() const {
|
operator VariantConstRef() const {
|
||||||
return VariantConstRef(collectionToVariant(_data));
|
return VariantConstRef(collectionToVariant(_data));
|
||||||
}
|
}
|
||||||
@ -40,33 +45,6 @@ class ObjectRefBase {
|
|||||||
return _data ? _data->size() : 0;
|
return _data ? _data->size() : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
|
||||||
const VariantData* getData() const {
|
|
||||||
return collectionToVariant(_data);
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename TAdaptedString>
|
|
||||||
inline VariantData* getMember(TAdaptedString key) const {
|
|
||||||
if (!_data)
|
|
||||||
return 0;
|
|
||||||
return _data->getMember(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
ObjectRefBase(TData* data) : _data(data) {}
|
|
||||||
TData* _data;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ObjectConstRef : public ObjectRefBase<const CollectionData>,
|
|
||||||
public VariantOperators<ObjectConstRef> {
|
|
||||||
friend class ObjectRef;
|
|
||||||
typedef ObjectRefBase<const CollectionData> base_type;
|
|
||||||
|
|
||||||
public:
|
|
||||||
typedef ObjectConstIterator iterator;
|
|
||||||
|
|
||||||
ObjectConstRef() : base_type(0) {}
|
|
||||||
ObjectConstRef(const CollectionData* data) : base_type(data) {}
|
|
||||||
|
|
||||||
FORCE_INLINE iterator begin() const {
|
FORCE_INLINE iterator begin() const {
|
||||||
if (!_data)
|
if (!_data)
|
||||||
return iterator();
|
return iterator();
|
||||||
@ -126,20 +104,31 @@ class ObjectConstRef : public ObjectRefBase<const CollectionData>,
|
|||||||
}
|
}
|
||||||
return count == rhs.size();
|
return count == rhs.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const VariantData* getData() const {
|
||||||
|
return collectionToVariant(_data);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename TAdaptedString>
|
||||||
|
const VariantData* getMember(TAdaptedString key) const {
|
||||||
|
if (!_data)
|
||||||
|
return 0;
|
||||||
|
return _data->getMember(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
const CollectionData* _data;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ObjectRef : public ObjectRefBase<CollectionData>,
|
class ObjectRef : public VariantOperators<ObjectRef> {
|
||||||
public VariantOperators<ObjectRef> {
|
|
||||||
typedef ObjectRefBase<CollectionData> base_type;
|
|
||||||
|
|
||||||
friend class VariantAttorney;
|
friend class VariantAttorney;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef ObjectIterator iterator;
|
typedef ObjectIterator iterator;
|
||||||
|
|
||||||
FORCE_INLINE ObjectRef() : base_type(0), _pool(0) {}
|
FORCE_INLINE ObjectRef() : _data(0), _pool(0) {}
|
||||||
FORCE_INLINE ObjectRef(MemoryPool* buf, CollectionData* data)
|
FORCE_INLINE ObjectRef(MemoryPool* buf, CollectionData* data)
|
||||||
: base_type(data), _pool(buf) {}
|
: _data(data), _pool(buf) {}
|
||||||
|
|
||||||
operator VariantRef() const {
|
operator VariantRef() const {
|
||||||
void* data = _data; // prevent warning cast-align
|
void* data = _data; // prevent warning cast-align
|
||||||
@ -150,6 +139,30 @@ class ObjectRef : public ObjectRefBase<CollectionData>,
|
|||||||
return ObjectConstRef(_data);
|
return ObjectConstRef(_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
operator VariantConstRef() const {
|
||||||
|
return VariantConstRef(collectionToVariant(_data));
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCE_INLINE bool isNull() const {
|
||||||
|
return _data == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCE_INLINE operator bool() const {
|
||||||
|
return _data != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCE_INLINE size_t memoryUsage() const {
|
||||||
|
return _data ? _data->memoryUsage() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCE_INLINE size_t nesting() const {
|
||||||
|
return variantNesting(collectionToVariant(_data));
|
||||||
|
}
|
||||||
|
|
||||||
|
FORCE_INLINE size_t size() const {
|
||||||
|
return _data ? _data->size() : 0;
|
||||||
|
}
|
||||||
|
|
||||||
FORCE_INLINE iterator begin() const {
|
FORCE_INLINE iterator begin() const {
|
||||||
if (!_data)
|
if (!_data)
|
||||||
return iterator();
|
return iterator();
|
||||||
@ -239,7 +252,7 @@ class ObjectRef : public ObjectRefBase<CollectionData>,
|
|||||||
return operator[](key).template to<ObjectRef>();
|
return operator[](key).template to<ObjectRef>();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
private:
|
||||||
MemoryPool* getPool() const {
|
MemoryPool* getPool() const {
|
||||||
return _pool;
|
return _pool;
|
||||||
}
|
}
|
||||||
@ -252,6 +265,13 @@ class ObjectRef : public ObjectRefBase<CollectionData>,
|
|||||||
return collectionToVariant(_data);
|
return collectionToVariant(_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename TAdaptedString>
|
||||||
|
inline VariantData* getMember(TAdaptedString key) const {
|
||||||
|
if (!_data)
|
||||||
|
return 0;
|
||||||
|
return _data->getMember(key);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename TAdaptedString>
|
template <typename TAdaptedString>
|
||||||
void removeMember(TAdaptedString key) const {
|
void removeMember(TAdaptedString key) const {
|
||||||
if (!_data)
|
if (!_data)
|
||||||
@ -259,7 +279,7 @@ class ObjectRef : public ObjectRefBase<CollectionData>,
|
|||||||
_data->removeMember(key);
|
_data->removeMember(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
CollectionData* _data;
|
||||||
MemoryPool* _pool;
|
MemoryPool* _pool;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user