// ArduinoJson - https://arduinojson.org // Copyright © 2014-2022, Benoit BLANCHON // MIT License #pragma once #include #include #include namespace ARDUINOJSON_NAMESPACE { class JsonObject; class JsonArrayConst : public VariantOperators { friend class JsonArray; friend class VariantAttorney; public: typedef JsonArrayConstIterator iterator; FORCE_INLINE iterator begin() const { if (!_data) return iterator(); return iterator(_data->head()); } FORCE_INLINE iterator end() const { return iterator(); } FORCE_INLINE JsonArrayConst() : _data(0) {} FORCE_INLINE JsonArrayConst(const CollectionData* data) : _data(data) {} FORCE_INLINE bool operator==(JsonArrayConst 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 JsonVariantConst operator[](size_t index) const { return JsonVariantConst(_data ? _data->getElement(index) : 0); } operator JsonVariantConst() const { return JsonVariantConst(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 : private VariantAttorney { static void toJson(JsonVariantConst src, JsonVariant dst) { variantCopyFrom(getData(dst), getData(src), getPool(dst)); } static JsonArrayConst fromJson(JsonVariantConst src) { const VariantData* data = getData(src); return data ? data->asArray() : 0; } static bool checkJson(JsonVariantConst src) { const VariantData* data = getData(src); return data && data->isArray(); } }; } // namespace ARDUINOJSON_NAMESPACE