From 97768ec176dc38ac0b35fe05e5cb793e5e10194d Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Tue, 4 Nov 2014 10:20:47 +0100 Subject: [PATCH] Added JsonVariant::operator[](int) --- include/ArduinoJson/JsonVariant.hpp | 8 +++++++ src/JsonVariant.cpp | 11 ++++++++++ test/JsonVariant_Subscript_Tests.cpp | 32 ++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 test/JsonVariant_Subscript_Tests.cpp diff --git a/include/ArduinoJson/JsonVariant.hpp b/include/ArduinoJson/JsonVariant.hpp index b37c79bf..39a90a53 100644 --- a/include/ArduinoJson/JsonVariant.hpp +++ b/include/ArduinoJson/JsonVariant.hpp @@ -25,6 +25,11 @@ class JsonVariant { public: JsonVariant() : _type(Internals::JSON_UNDEFINED) {} + template + 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(value)); } @@ -91,6 +96,9 @@ class JsonVariant { template void writeTo(T &writer) const; + size_t size() const; + JsonVariant &operator[](int index); + private: JsonVariant(Internals::JsonVariantType type) : _type(type) {} diff --git a/src/JsonVariant.cpp b/src/JsonVariant.cpp index 2cd61930..5658390c 100644 --- a/src/JsonVariant.cpp +++ b/src/JsonVariant.cpp @@ -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 void JsonVariant::writeTo(T &writer) const { switch (_type) { diff --git a/test/JsonVariant_Subscript_Tests.cpp b/test/JsonVariant_Subscript_Tests.cpp new file mode 100644 index 00000000..17798555 --- /dev/null +++ b/test/JsonVariant_Subscript_Tests.cpp @@ -0,0 +1,32 @@ +// Copyright Benoit Blanchon 2014 +// MIT License +// +// Arduino JSON library +// https://github.com/bblanchon/ArduinoJson + +#include +#include +#include +#include + +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()); +}