mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 16:14:11 +01:00 
			
		
		
		
	Extract ArrayConstRef.hpp from ArrayRef.hpp
				
					
				
			This commit is contained in:
		
							
								
								
									
										111
									
								
								src/ArduinoJson/Array/ArrayConstRef.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								src/ArduinoJson/Array/ArrayConstRef.hpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | |||||||
|  | // ArduinoJson - https://arduinojson.org | ||||||
|  | // Copyright © 2014-2022, Benoit BLANCHON | ||||||
|  | // MIT License | ||||||
|  |  | ||||||
|  | #pragma once | ||||||
|  |  | ||||||
|  | #include <ArduinoJson/Array/ArrayIterator.hpp> | ||||||
|  | #include <ArduinoJson/Variant/VariantAttorney.hpp> | ||||||
|  | #include <ArduinoJson/Variant/VariantData.hpp> | ||||||
|  |  | ||||||
|  | namespace ARDUINOJSON_NAMESPACE { | ||||||
|  |  | ||||||
|  | class ObjectRef; | ||||||
|  |  | ||||||
|  | class ArrayConstRef : public VariantOperators<ArrayConstRef> { | ||||||
|  |   friend class ArrayRef; | ||||||
|  |   friend class VariantAttorney; | ||||||
|  |  | ||||||
|  |  public: | ||||||
|  |   typedef ArrayConstRefIterator iterator; | ||||||
|  |  | ||||||
|  |   FORCE_INLINE iterator begin() const { | ||||||
|  |     if (!_data) | ||||||
|  |       return iterator(); | ||||||
|  |     return iterator(_data->head()); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   FORCE_INLINE iterator end() const { | ||||||
|  |     return iterator(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   FORCE_INLINE ArrayConstRef() : _data(0) {} | ||||||
|  |   FORCE_INLINE ArrayConstRef(const CollectionData* data) : _data(data) {} | ||||||
|  |  | ||||||
|  |   FORCE_INLINE bool operator==(ArrayConstRef rhs) const { | ||||||
|  |     if (_data == rhs._data) | ||||||
|  |       return true; | ||||||
|  |     if (!_data || !rhs._data) | ||||||
|  |       return false; | ||||||
|  |  | ||||||
|  |     iterator it1 = begin(); | ||||||
|  |     iterator it2 = rhs.begin(); | ||||||
|  |  | ||||||
|  |     for (;;) { | ||||||
|  |       bool end1 = it1 == end(); | ||||||
|  |       bool end2 = it2 == rhs.end(); | ||||||
|  |       if (end1 && end2) | ||||||
|  |         return true; | ||||||
|  |       if (end1 || end2) | ||||||
|  |         return false; | ||||||
|  |       if (*it1 != *it2) | ||||||
|  |         return false; | ||||||
|  |       ++it1; | ||||||
|  |       ++it2; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   FORCE_INLINE VariantConstRef operator[](size_t index) const { | ||||||
|  |     return VariantConstRef(_data ? _data->getElement(index) : 0); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   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; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |  private: | ||||||
|  |   const VariantData* getData() const { | ||||||
|  |     return collectionToVariant(_data); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   const CollectionData* _data; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | template <> | ||||||
|  | struct Converter<ArrayConstRef> : private VariantAttorney { | ||||||
|  |   static void toJson(VariantConstRef src, VariantRef dst) { | ||||||
|  |     variantCopyFrom(getData(dst), getData(src), getPool(dst)); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static ArrayConstRef fromJson(VariantConstRef src) { | ||||||
|  |     const VariantData* data = getData(src); | ||||||
|  |     return data ? data->asArray() : 0; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   static bool checkJson(VariantConstRef src) { | ||||||
|  |     const VariantData* data = getData(src); | ||||||
|  |     return data && data->isArray(); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | }  // namespace ARDUINOJSON_NAMESPACE | ||||||
| @@ -4,94 +4,13 @@ | |||||||
|  |  | ||||||
| #pragma once | #pragma once | ||||||
|  |  | ||||||
| #include <ArduinoJson/Array/ArrayIterator.hpp> | #include <ArduinoJson/Array/ArrayConstRef.hpp> | ||||||
| #include <ArduinoJson/Array/ElementProxy.hpp> | #include <ArduinoJson/Array/ElementProxy.hpp> | ||||||
| #include <ArduinoJson/Variant/VariantAttorney.hpp> |  | ||||||
| #include <ArduinoJson/Variant/VariantData.hpp> |  | ||||||
|  |  | ||||||
| namespace ARDUINOJSON_NAMESPACE { | namespace ARDUINOJSON_NAMESPACE { | ||||||
|  |  | ||||||
| class ObjectRef; | class ObjectRef; | ||||||
|  |  | ||||||
| class ArrayConstRef : public VariantOperators<ArrayConstRef> { |  | ||||||
|   friend class ArrayRef; |  | ||||||
|   friend class VariantAttorney; |  | ||||||
|  |  | ||||||
|  public: |  | ||||||
|   typedef ArrayConstRefIterator iterator; |  | ||||||
|  |  | ||||||
|   FORCE_INLINE iterator begin() const { |  | ||||||
|     if (!_data) |  | ||||||
|       return iterator(); |  | ||||||
|     return iterator(_data->head()); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   FORCE_INLINE iterator end() const { |  | ||||||
|     return iterator(); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   FORCE_INLINE ArrayConstRef() : _data(0) {} |  | ||||||
|   FORCE_INLINE ArrayConstRef(const CollectionData* data) : _data(data) {} |  | ||||||
|  |  | ||||||
|   FORCE_INLINE bool operator==(ArrayConstRef rhs) const { |  | ||||||
|     if (_data == rhs._data) |  | ||||||
|       return true; |  | ||||||
|     if (!_data || !rhs._data) |  | ||||||
|       return false; |  | ||||||
|  |  | ||||||
|     iterator it1 = begin(); |  | ||||||
|     iterator it2 = rhs.begin(); |  | ||||||
|  |  | ||||||
|     for (;;) { |  | ||||||
|       bool end1 = it1 == end(); |  | ||||||
|       bool end2 = it2 == rhs.end(); |  | ||||||
|       if (end1 && end2) |  | ||||||
|         return true; |  | ||||||
|       if (end1 || end2) |  | ||||||
|         return false; |  | ||||||
|       if (*it1 != *it2) |  | ||||||
|         return false; |  | ||||||
|       ++it1; |  | ||||||
|       ++it2; |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   FORCE_INLINE VariantConstRef operator[](size_t index) const { |  | ||||||
|     return VariantConstRef(_data ? _data->getElement(index) : 0); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   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; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|  private: |  | ||||||
|   const VariantData* getData() const { |  | ||||||
|     return collectionToVariant(_data); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   const CollectionData* _data; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| class ArrayRef : public VariantOperators<ArrayRef> { | class ArrayRef : public VariantOperators<ArrayRef> { | ||||||
|   friend class VariantAttorney; |   friend class VariantAttorney; | ||||||
|  |  | ||||||
| @@ -220,23 +139,6 @@ class ArrayRef : public VariantOperators<ArrayRef> { | |||||||
|   MemoryPool* _pool; |   MemoryPool* _pool; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| template <> |  | ||||||
| struct Converter<ArrayConstRef> : private VariantAttorney { |  | ||||||
|   static void toJson(VariantConstRef src, VariantRef dst) { |  | ||||||
|     variantCopyFrom(getData(dst), getData(src), getPool(dst)); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   static ArrayConstRef fromJson(VariantConstRef src) { |  | ||||||
|     const VariantData* data = getData(src); |  | ||||||
|     return data ? data->asArray() : 0; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   static bool checkJson(VariantConstRef src) { |  | ||||||
|     const VariantData* data = getData(src); |  | ||||||
|     return data && data->isArray(); |  | ||||||
|   } |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| template <> | template <> | ||||||
| struct Converter<ArrayRef> : private VariantAttorney { | struct Converter<ArrayRef> : private VariantAttorney { | ||||||
|   static void toJson(VariantConstRef src, VariantRef dst) { |   static void toJson(VariantConstRef src, VariantRef dst) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user