mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	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