// Copyright Benoit Blanchon 2014-2016 // MIT License // // Arduino JSON library // https://github.com/bblanchon/ArduinoJson // If you like this project, please add a star! #pragma once #include "JsonArray.hpp" #include "JsonArraySubscript.hpp" namespace ArduinoJson { inline JsonArraySubscript JsonArray::operator[](size_t index) { return JsonArraySubscript(*this, index); } inline JsonVariant JsonArray::operator[](size_t index) const { return get(index); } inline bool JsonArray::add(bool value) { return addNode(value); } inline bool JsonArray::add(float value, uint8_t decimals) { return addNode(JsonVariant(value, decimals)); } inline bool JsonArray::add(double value, uint8_t decimals) { return addNode(JsonVariant(value, decimals)); } inline bool JsonArray::add(signed char value) { return addNode(value); } inline bool JsonArray::add(signed long value) { return addNode(value); } inline bool JsonArray::add(signed int value) { return addNode(value); } inline bool JsonArray::add(signed short value) { return addNode(value); } inline bool JsonArray::add(unsigned char value) { return addNode(value); } inline bool JsonArray::add(unsigned long value) { return addNode(value); } inline bool JsonArray::add(unsigned int value) { return addNode(value); } inline bool JsonArray::add(unsigned short value) { return addNode(value); } inline bool JsonArray::add(const char *value) { return addNode(value); } inline bool JsonArray::add(const String &value) { return addNode(value); } inline bool JsonArray::add(JsonArray &array) { return addNode(array); } inline bool JsonArray::add(JsonObject &object) { return addNode(object); } template inline bool JsonArray::add(const T &variant) { return addNode(variant); } template inline bool JsonArray::addNode(TValue value) { node_type *node = addNewNode(); if (node == NULL) return false; setNodeValue(node, value); return true; } inline void JsonArray::set(size_t index, bool value) { return setNodeAt(index, value); } inline void JsonArray::set(size_t index, float value, uint8_t decimals) { return setNodeAt(index, JsonVariant(value, decimals)); } inline void JsonArray::set(size_t index, double value, uint8_t decimals) { return setNodeAt(index, JsonVariant(value, decimals)); } inline void JsonArray::set(size_t index, signed char value) { return setNodeAt(index, value); } inline void JsonArray::set(size_t index, signed long value) { return setNodeAt(index, value); } inline void JsonArray::set(size_t index, signed int value) { return setNodeAt(index, value); } inline void JsonArray::set(size_t index, signed short value) { return setNodeAt(index, value); } inline void JsonArray::set(size_t index, unsigned char value) { return setNodeAt(index, value); } inline void JsonArray::set(size_t index, unsigned long value) { return setNodeAt(index, value); } inline void JsonArray::set(size_t index, unsigned int value) { return setNodeAt(index, value); } inline void JsonArray::set(size_t index, unsigned short value) { return setNodeAt(index, value); } inline void JsonArray::set(size_t index, const char *value) { return setNodeAt(index, value); } inline void JsonArray::set(size_t index, const String &value) { return setNodeAt(index, value); } inline void JsonArray::set(size_t index, JsonArray &array) { return setNodeAt(index, array); } inline void JsonArray::set(size_t index, JsonObject &object) { return setNodeAt(index, object); } template inline void JsonArray::set(size_t index, const T &variant) { return setNodeAt(index, variant); } template inline void JsonArray::setNodeAt(size_t index, TValue value) { node_type *node = getNodeAt(index); if (node == NULL) return; setNodeValue(node, value); } template inline void JsonArray::setNodeValue(node_type *node, TValue value) { node->content = value; } template <> inline void JsonArray::setNodeValue(node_type *node, const String &value) { node->content = _buffer->strdup(value); } inline JsonVariant JsonArray::get(size_t index) const { node_type *node = getNodeAt(index); return node ? node->content : JsonVariant(); } template inline T JsonArray::get(size_t index) const { node_type *node = getNodeAt(index); return node ? node->content.as() : JsonVariant::invalid(); } template inline bool JsonArray::is(size_t index) const { node_type *node = getNodeAt(index); return node ? node->content.is() : false; } template inline const JsonArraySubscript JsonVariantBase::operator[]( int index) const { return asArray()[index]; } template <> inline JsonArray &JsonVariant::invalid() { return JsonArray::invalid(); } template <> inline JsonArray const &JsonVariant::invalid() { return JsonArray::invalid(); } template <> inline JsonArray &JsonVariant::as() const { if (_type == Internals::JSON_ARRAY) return *_content.asArray; return JsonArray::invalid(); } template <> inline const JsonArray &JsonVariant::as() const { if (_type == Internals::JSON_ARRAY) return *_content.asArray; return JsonArray::invalid(); } }