// ArduinoJson - https://arduinojson.org // Copyright © 2014-2022, Benoit BLANCHON // MIT License #pragma once #include #include // for uint8_t #include #include #include #include #include #include #include #include #include namespace ARDUINOJSON_NAMESPACE { // Forward declarations. class ArrayRef; class ObjectRef; class VariantConstRef : public VariantTag, public VariantOperators, public VariantShortcuts { friend class VariantAttorney; public: VariantConstRef() : _data(0) {} explicit VariantConstRef(const VariantData* data) : _data(data) {} FORCE_INLINE bool isNull() const { return variantIsNull(_data); } FORCE_INLINE bool isUnbound() const { return !_data; } FORCE_INLINE size_t memoryUsage() const { return _data ? _data->memoryUsage() : 0; } FORCE_INLINE size_t nesting() const { return variantNesting(_data); } size_t size() const { return variantSize(_data); } template FORCE_INLINE typename enable_if::value && !is_same::value, T>::type as() const { return Converter::fromJson(*this); } template FORCE_INLINE typename enable_if::value, const char*>::type ARDUINOJSON_DEPRECATED("Replace as() with as()") as() const { return as(); } template FORCE_INLINE typename enable_if::value, char>::type ARDUINOJSON_DEPRECATED( "Support for char is deprecated, use int8_t or uint8_t instead") as() const { return static_cast(as()); } template FORCE_INLINE typename enable_if::value && !is_same::value, bool>::type is() const { return Converter::checkJson(*this); } template FORCE_INLINE typename enable_if::value, bool>::type ARDUINOJSON_DEPRECATED("Replace is() with is()") is() const { return is(); } template FORCE_INLINE typename enable_if::value, bool>::type ARDUINOJSON_DEPRECATED( "Support for char is deprecated, use int8_t or uint8_t instead") is() const { return is(); } template FORCE_INLINE operator T() const { return as(); } FORCE_INLINE VariantConstRef operator[](size_t index) const { return VariantConstRef(variantGetElement(_data, index)); } // operator[](const std::string&) const // operator[](const String&) const template FORCE_INLINE typename enable_if::value, VariantConstRef>::type operator[](const TString& key) const { return VariantConstRef(variantGetMember(_data, adaptString(key))); } // operator[](char*) const // operator[](const char*) const // operator[](const __FlashStringHelper*) const template FORCE_INLINE typename enable_if::value, VariantConstRef>::type operator[](TChar* key) const { return VariantConstRef(variantGetMember(_data, adaptString(key))); } protected: const VariantData* getData() const { return _data; } private: const VariantData* _data; }; } // namespace ARDUINOJSON_NAMESPACE