diff --git a/JsonGenerator.cpp b/JsonGenerator.cpp index 9250e2f8..8d6444be 100644 --- a/JsonGenerator.cpp +++ b/JsonGenerator.cpp @@ -6,6 +6,7 @@ // This file is here to help the Arduino IDE find the .cpp files #include "JsonGenerator/EscapedString.cpp" +#include "JsonGenerator/JsonArrayBase.cpp" #include "JsonGenerator/JsonValue.cpp" #include "JsonGenerator/JsonHashTableBase.cpp" #include "JsonGenerator/StringBuilder.cpp" \ No newline at end of file diff --git a/JsonGenerator/JsonArray.h b/JsonGenerator/JsonArray.h index 9427c669..52e748a3 100644 --- a/JsonGenerator/JsonArray.h +++ b/JsonGenerator/JsonArray.h @@ -5,65 +5,24 @@ #pragma once -#include "JsonObjectBase.h" -#include "StringBuilder.h" +#include "JsonArrayBase.h" namespace ArduinoJson { namespace Generator { template - class JsonArray : public JsonObjectBase + class JsonArray : public JsonArrayBase { public: JsonArray() + : JsonArrayBase(items, N) { - itemCount = 0; - } - template - void add(T value) - { - if (itemCount >= N) return; - - items[itemCount++].set(value); - } - - template - void add(double value) - { - if (itemCount >= N) return; - - Internals::JsonValue& v = items[itemCount++]; - v.set(value); - } - - using JsonObjectBase::printTo; + } private: Internals::JsonValue items[N]; - int itemCount; - - virtual size_t printTo(Print& p) const - { - size_t n = 0; - - n += p.write('['); - - for (int i = 0; i < itemCount; i++) - { - if (i > 0) - { - n += p.write(','); - } - - n += items[i].printTo(p); - } - - n += p.write(']'); - - return n; - } }; } } \ No newline at end of file diff --git a/JsonGenerator/JsonArrayBase.cpp b/JsonGenerator/JsonArrayBase.cpp new file mode 100644 index 00000000..4d7f9380 --- /dev/null +++ b/JsonGenerator/JsonArrayBase.cpp @@ -0,0 +1,29 @@ +/* +* Arduino JSON library +* Benoit Blanchon 2014 - MIT License +*/ + +#include "JsonArrayBase.h" + +using namespace ArduinoJson::Generator; + +size_t JsonArrayBase::printTo(Print& p) const +{ + size_t n = 0; + + n += p.write('['); + + for (int i = 0; i < count; i++) + { + if (i > 0) + { + n += p.write(','); + } + + n += items[i].printTo(p); + } + + n += p.write(']'); + + return n; +} \ No newline at end of file diff --git a/JsonGenerator/JsonArrayBase.h b/JsonGenerator/JsonArrayBase.h new file mode 100644 index 00000000..54d44d68 --- /dev/null +++ b/JsonGenerator/JsonArrayBase.h @@ -0,0 +1,49 @@ +/* +* Arduino JSON library +* Benoit Blanchon 2014 - MIT License +*/ + +#pragma once + +#include "JsonObjectBase.h" + +namespace ArduinoJson +{ + namespace Generator + { + class JsonArrayBase : public JsonObjectBase + { + public: + JsonArrayBase(Internals::JsonValue* items, int capacity) + : items(items), capacity(capacity), count(0) + { + + } + + template + void add(T value) + { + if (count >= capacity) return; + + items[count++].set(value); + } + + template + void add(double value) + { + if (count >= capacity) return; + + Internals::JsonValue& v = items[count++]; + v.set(value); + } + + virtual size_t printTo(Print& p) const; + + using JsonObjectBase::printTo; + + private: + Internals::JsonValue* items; + int count, capacity; + }; + } +} \ No newline at end of file diff --git a/JsonGenerator/JsonHashTableBase.cpp b/JsonGenerator/JsonHashTableBase.cpp index 738ecd67..504a8e86 100644 --- a/JsonGenerator/JsonHashTableBase.cpp +++ b/JsonGenerator/JsonHashTableBase.cpp @@ -8,7 +8,7 @@ size_t JsonHashTableBase::printTo(Print& p) const n += p.write('{'); - for (int i = 0; i < itemCount; i++) + for (int i = 0; i < count; i++) { if (i > 0) { diff --git a/JsonGenerator/JsonHashTableBase.h b/JsonGenerator/JsonHashTableBase.h index 90c8aeef..1a577af4 100644 --- a/JsonGenerator/JsonHashTableBase.h +++ b/JsonGenerator/JsonHashTableBase.h @@ -19,21 +19,21 @@ namespace ArduinoJson template void add(const char* key, T value) { - if (itemCount >= capacity) return; + if (count >= capacity) return; - items[itemCount].key.set(key); - items[itemCount].value.set(value); - itemCount++; + items[count].key.set(key); + items[count].value.set(value); + count++; } template void add(const char* key, double value) { - if (itemCount >= capacity) return; + if (count >= capacity) return; - items[itemCount].key.set(key); - items[itemCount].value.set(value); - itemCount++; + items[count].key.set(key); + items[count].value.set(value); + count++; } using JsonObjectBase::printTo; @@ -49,13 +49,13 @@ namespace ArduinoJson }; JsonHashTableBase(KeyValuePair* items, int capacity) - : items(items), capacity(capacity), itemCount(0) + : items(items), capacity(capacity), count(0) { } private: KeyValuePair* items; - int itemCount; + int count; int capacity; }; } diff --git a/JsonGenerator/README.md b/JsonGenerator/README.md index 26c325df..a119bfed 100644 --- a/JsonGenerator/README.md +++ b/JsonGenerator/README.md @@ -163,5 +163,5 @@ This table is for an 8-bit Arduino, types would be bigger on a 32-bit processor. | Type | Size in bytes | | ---------------------- | ------------- | -| JsonArray<N> | 4 + 6 x N | +| JsonArray<N> | 8 + 6 x N | | JsonHashTable<N> | 8 + 8 x N | diff --git a/JsonGeneratorTests/JsonGeneratorTests.vcxproj b/JsonGeneratorTests/JsonGeneratorTests.vcxproj index ae2dfc70..48e3c786 100644 --- a/JsonGeneratorTests/JsonGeneratorTests.vcxproj +++ b/JsonGeneratorTests/JsonGeneratorTests.vcxproj @@ -85,6 +85,7 @@ + @@ -97,6 +98,7 @@ + diff --git a/JsonGeneratorTests/JsonGeneratorTests.vcxproj.filters b/JsonGeneratorTests/JsonGeneratorTests.vcxproj.filters index 9e50c6c3..caa97f7b 100644 --- a/JsonGeneratorTests/JsonGeneratorTests.vcxproj.filters +++ b/JsonGeneratorTests/JsonGeneratorTests.vcxproj.filters @@ -42,6 +42,9 @@ Source Files + + Source Files + @@ -71,5 +74,8 @@ Header Files + + Header Files + \ No newline at end of file