// ArduinoJson - arduinojson.org // Copyright Benoit Blanchon 2014-2018 // MIT License #pragma once #include "Configuration.hpp" #include "JsonVariantBase.hpp" #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4522) #endif namespace ArduinoJson { class JsonArraySubscript : public JsonVariantBase { public: FORCE_INLINE JsonArraySubscript(JsonArray& array, size_t index) : _array(array), _index(index) {} FORCE_INLINE JsonArraySubscript& operator=(const JsonArraySubscript& src) { _array.set(_index, src); return *this; } // Replaces the value // // operator=(TValue) // TValue = bool, long, int, short, float, double, RawJson, JsonVariant, // const std::string&, const String&, // const JsonArray&, const JsonObject& template FORCE_INLINE JsonArraySubscript& operator=(const T& src) { _array.set(_index, src); return *this; } // // operator=(TValue) // TValue = const char*, const char[N], const FlashStringHelper* template FORCE_INLINE JsonArraySubscript& operator=(const T* src) { _array.set(_index, src); return *this; } FORCE_INLINE bool success() const { return _index < _array.size(); } template FORCE_INLINE typename Internals::JsonVariantAs::type as() const { return _array.get(_index); } template FORCE_INLINE bool is() const { return _array.is(_index); } // Replaces the value // // bool set(TValue) // TValue = bool, long, int, short, float, double, RawJson, JsonVariant, // const std::string&, const String&, // const JsonArray&, const JsonObject& template FORCE_INLINE bool set(const TValue& value) { return _array.set(_index, value); } // // bool set(TValue) // TValue = const char*, const char[N], const FlashStringHelper* template FORCE_INLINE bool set(const TValue* value) { return _array.set(_index, value); } // // bool set(TValue, uint8_t decimals); // TValue = float, double template DEPRECATED("Second argument is not supported anymore") FORCE_INLINE bool set(const TValue& value, uint8_t) { return _array.set(_index, value); } private: JsonArray& _array; const size_t _index; }; #if ARDUINOJSON_ENABLE_STD_STREAM inline std::ostream& operator<<(std::ostream& os, const JsonArraySubscript& source) { return source.printTo(os); } #endif inline JsonArraySubscript JsonArray::operator[](size_t index) { return JsonArraySubscript(*this, index); } inline const JsonArraySubscript JsonArray::operator[](size_t index) const { return JsonArraySubscript(*const_cast(this), index); } template inline JsonArraySubscript JsonVariantSubscripts::operator[]( size_t index) { return impl()->template as()[index]; } template inline const JsonArraySubscript JsonVariantSubscripts::operator[]( size_t index) const { return impl()->template as()[index]; } } // namespace ArduinoJson #ifdef _MSC_VER #pragma warning(pop) #endif