From 5cf744dbac8700a0dc89fc682b5cdcbd4aa49146 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 29 Oct 2014 21:18:27 +0100 Subject: [PATCH] Huge refactoring in progress... --- include/ArduinoJson/JsonArray.hpp | 14 ++++++++++++++ include/ArduinoJson/JsonObject.hpp | 12 ++++++++++++ include/ArduinoJson/JsonValue.hpp | 25 +++++++++++++++++++++---- test/Issue10.cpp | 8 ++++---- test/JsonArray_Container_Tests.cpp | 11 +++++------ test/JsonArray_Iterator_Tests.cpp | 4 ++-- 6 files changed, 58 insertions(+), 16 deletions(-) diff --git a/include/ArduinoJson/JsonArray.hpp b/include/ArduinoJson/JsonArray.hpp index 0b211a64..88bde904 100644 --- a/include/ArduinoJson/JsonArray.hpp +++ b/include/ArduinoJson/JsonArray.hpp @@ -10,6 +10,7 @@ #include "JsonArrayIterator.hpp" #include "JsonArrayConstIterator.hpp" #include "JsonPrintable.hpp" +#include "JsonObject.hpp" namespace ArduinoJson { class JsonArray : public JsonPrintable { @@ -22,6 +23,8 @@ class JsonArray : public JsonPrintable { int size() const; + bool success() {return _buffer != NULL;} + value_type &operator[](int index) const; value_type &add(); @@ -30,6 +33,14 @@ class JsonArray : public JsonPrintable { add().set(value); } + void add(JsonArray &nestedArray) { + add().set(nestedArray); + } + + void add(JsonObject&nestedObject){ + add().set(nestedObject); + } + JsonArray &createNestedArray(); JsonObject &createNestedObject(); @@ -44,6 +55,9 @@ class JsonArray : public JsonPrintable { virtual void writeTo(Internals::JsonWriter &writer) const; private: + JsonArray(const JsonArray&); // copy is forbidden, use a reference instead + JsonArray& operator=(const JsonArray&); // copy is forbidden, use a reference instead + inline void addNode(Internals::JsonArrayNode *node); JsonBuffer *_buffer; diff --git a/include/ArduinoJson/JsonObject.hpp b/include/ArduinoJson/JsonObject.hpp index a43e1c7e..9bfc8b59 100644 --- a/include/ArduinoJson/JsonObject.hpp +++ b/include/ArduinoJson/JsonObject.hpp @@ -10,6 +10,7 @@ #include "JsonObjectIterator.hpp" #include "JsonPrintable.hpp" #include "Internals/JsonObjectNode.hpp" +#include "JsonArray.hpp" namespace ArduinoJson { class JsonObject : public JsonPrintable { @@ -31,6 +32,14 @@ class JsonObject : public JsonPrintable { (*this)[key] = value; } + void add(key_type key, JsonArray &nestedArray) { + (*this)[key] = nestedArray; + } + + void add(key_type key, JsonObject &nestedObject) { + (*this)[key] = nestedObject; + } + JsonArray &createNestedArray(key_type key); JsonObject &createNestedObject(key_type key); @@ -45,6 +54,9 @@ class JsonObject : public JsonPrintable { virtual void writeTo(Internals::JsonWriter &writer) const; private: + JsonObject(const JsonObject&); // copy is forbidden, use a reference instead + JsonObject& operator=(const JsonObject&); // copy is forbidden, use a reference instead + void addNode(Internals::JsonObjectNode *nodeToAdd); void removeNode(Internals::JsonObjectNode *nodeToRemove); diff --git a/include/ArduinoJson/JsonValue.hpp b/include/ArduinoJson/JsonValue.hpp index 672df832..4f598bee 100644 --- a/include/ArduinoJson/JsonValue.hpp +++ b/include/ArduinoJson/JsonValue.hpp @@ -26,6 +26,22 @@ class JsonValue { void set(JsonArray &array); void set(JsonObject &object); + template + JsonValue &operator=(T value) { + set(value); + return *this; + } + + JsonValue &operator=(JsonArray& array) { + set(array); + return *this; + } + + JsonValue &operator=(JsonObject& object) { + set(object); + return *this; + } + JsonArray &asArray(); JsonObject &asObject(); bool asBool() const; @@ -34,10 +50,7 @@ class JsonValue { long asLong() const; template - JsonValue &operator=(T value) { - set(value); - return *this; - } + T as(){} static JsonValue &invalid() { return _invalid; } @@ -50,4 +63,8 @@ class JsonValue { Internals::JsonValueContent _content; static JsonValue _invalid; }; + +template <> +int JsonValue::as() { return asLong(); } + } diff --git a/test/Issue10.cpp b/test/Issue10.cpp index 7a4acaf2..83c85341 100644 --- a/test/Issue10.cpp +++ b/test/Issue10.cpp @@ -43,10 +43,10 @@ class Issue10 : public testing::Test { TEST_F(Issue10, PopulateArrayByAddingAnObject) { StaticJsonBuffer<200> json; - JsonArray array = json.createArray(); + JsonArray &array = json.createArray(); for (int i = 0; i < 2; i++) { - JsonObject object = json.createObject(); + JsonObject &object = json.createObject(); object["id"] = persons[i].id; object["name"] = persons[i].name; @@ -60,10 +60,10 @@ TEST_F(Issue10, PopulateArrayByAddingAnObject) { TEST_F(Issue10, PopulateArrayByCreatingNestedObjects) { StaticJsonBuffer<200> json; - JsonArray array = json.createArray(); + JsonArray &array = json.createArray(); for (int i = 0; i < 2; i++) { - JsonObject object = array.createNestedObject(); + JsonObject &object = array.createNestedObject(); object["id"] = persons[i].id; object["name"] = persons[i].name; diff --git a/test/JsonArray_Container_Tests.cpp b/test/JsonArray_Container_Tests.cpp index 0745f115..a6b25802 100644 --- a/test/JsonArray_Container_Tests.cpp +++ b/test/JsonArray_Container_Tests.cpp @@ -15,9 +15,8 @@ using namespace ArduinoJson; class JsonArray_Container_Tests : public ::testing::Test { protected: - virtual void SetUp() { - json.clear(); - array = json.createArray(); + JsonArray_Container_Tests() + : array(json.createArray()) { } template @@ -33,7 +32,7 @@ class JsonArray_Container_Tests : public ::testing::Test { void sizeMustBe(int expected) { EXPECT_EQ(expected, array.size()); } StaticJsonBuffer<256> json; - JsonArray array; + JsonArray &array; private: template @@ -92,8 +91,8 @@ TEST_F(JsonArray_Container_Tests, CanStoreStrings) { } TEST_F(JsonArray_Container_Tests, CanStoreNestedArrays) { - JsonArray innerarray1 = json.createArray(); - JsonArray innerarray2 = json.createArray(); + JsonArray &innerarray1 = json.createArray(); + JsonArray &innerarray2 = json.createArray(); array.add(innerarray1); array.add(innerarray2); diff --git a/test/JsonArray_Iterator_Tests.cpp b/test/JsonArray_Iterator_Tests.cpp index 05e25af6..009586d8 100644 --- a/test/JsonArray_Iterator_Tests.cpp +++ b/test/JsonArray_Iterator_Tests.cpp @@ -13,7 +13,7 @@ using namespace ArduinoJson; TEST(JsonArray_Iterator_Test, SimpleTest) { StaticJsonBuffer<100> jsonBuffer; - JsonArray array = jsonBuffer.createArray(); + JsonArray &array = jsonBuffer.createArray(); array.add(12); array.add(34); @@ -26,5 +26,5 @@ TEST(JsonArray_Iterator_Test, SimpleTest) { EXPECT_NE(end, it); EXPECT_EQ(34, it->as()); ++it; - EXPECT_EQ(array.end(), it); + EXPECT_EQ(end, it); }