Просмотр исходного кода

Added JsonVariant::operator[](int)

Benoit Blanchon 11 лет назад
Родитель
Сommit
97768ec176
3 измененных файлов с 51 добавлено и 0 удалено
  1. 8 0
      include/ArduinoJson/JsonVariant.hpp
  2. 11 0
      src/JsonVariant.cpp
  3. 32 0
      test/JsonVariant_Subscript_Tests.cpp

+ 8 - 0
include/ArduinoJson/JsonVariant.hpp

@@ -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) {}
 

+ 11 - 0
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 <typename T>
 void JsonVariant::writeTo(T &writer) const {
   switch (_type) {

+ 32 - 0
test/JsonVariant_Subscript_Tests.cpp

@@ -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());
+}