Added JsonVariant::operator[](int)

This commit is contained in:
Benoit Blanchon
2014-11-04 10:20:47 +01:00
parent e25eaed75a
commit 97768ec176
3 changed files with 51 additions and 0 deletions

View File

@ -25,6 +25,11 @@ class JsonVariant {
public:
JsonVariant() : _type(Internals::JSON_UNDEFINED) {}
template <typename T>
explicit JsonVariant(T value) {
set(value);
}
void set(bool value);
void set(double value, uint8_t decimals = 2);
void set(signed char value) { set(static_cast<long>(value)); }
@ -91,6 +96,9 @@ class JsonVariant {
template <typename T>
void writeTo(T &writer) const;
size_t size() const;
JsonVariant &operator[](int index);
private:
JsonVariant(Internals::JsonVariantType type) : _type(type) {}

View File

@ -75,6 +75,17 @@ void JsonVariant::set(JsonObject &object) {
_content.asObject = &object;
}
size_t JsonVariant::size() const {
if (_type == JSON_ARRAY) return _content.asArray->size();
if (_type == JSON_OBJECT) return _content.asObject->size();
return 0;
}
JsonVariant &JsonVariant::operator[](int index) {
if (_type != JSON_ARRAY) return JsonVariant::invalid();
return _content.asArray->operator[](index);
}
template <typename T>
void JsonVariant::writeTo(T &writer) const {
switch (_type) {

View File

@ -0,0 +1,32 @@
// Copyright Benoit Blanchon 2014
// MIT License
//
// Arduino JSON library
// https://github.com/bblanchon/ArduinoJson
#include <gtest/gtest.h>
#include <ArduinoJson/StaticJsonBuffer.hpp>
#include <ArduinoJson/JsonArray.hpp>
#include <ArduinoJson/JsonObject.hpp>
using namespace ArduinoJson;
class JsonVariant_Subscript_Tests : public ::testing::Test {
protected:
StaticJsonBuffer<200> buffer;
JsonVariant variant;
};
TEST_F(JsonVariant_Subscript_Tests, Array) {
JsonArray &array = buffer.createArray();
array.add("element at index 0");
array.add("element at index 1");
variant = array;
EXPECT_EQ(2, variant.size());
EXPECT_STREQ("element at index 0", variant[0].asString());
EXPECT_STREQ("element at index 1", variant[1].asString());
EXPECT_FALSE(variant[-1].success());
EXPECT_FALSE(variant[3].success());
}