diff --git a/JsonGeneratorTests/JsonArray.h b/JsonGeneratorTests/JsonArray.h
index e279bace..58e81cde 100644
--- a/JsonGeneratorTests/JsonArray.h
+++ b/JsonGeneratorTests/JsonArray.h
@@ -19,30 +19,30 @@ public:
void add(const char* value)
{
- JsonValueContent v;
- v.string = value;
- addItem(JSON_STRING, v);
+ addItem(JsonValue(value));
}
void add(double value)
{
- JsonValueContent v;
- v.number = value;
- addItem(JSON_NUMBER, v);
+ addItem(JsonValue(value));
}
void add(bool value)
{
- JsonValueContent v;
- v.boolean = value;
- addItem(JSON_BOOLEAN, v);
+ addItem(JsonValue(value));
}
void add(JsonObjectBase& value)
{
- JsonValueContent v;
- v.object = &value;
- addItem(JSON_OBJECT, v);
+ addItem(JsonValue(value));
+ }
+
+ void addItem(JsonValue value)
+ {
+ if (itemCount >= N) return;
+
+ items[itemCount] = value;
+ itemCount++;
}
using JsonObjectBase::writeTo;
@@ -58,19 +58,10 @@ private:
for (int i = 0; i < itemCount; i++)
{
if (i>0) sb.append(",");
- writeValueTo(items[i], sb);
+ items[i].writeTo(sb);
}
sb.append("]");
}
-
- void addItem(JsonValueType type, JsonValueContent content)
- {
- if (itemCount >= N) return;
-
- items[itemCount].type = type;
- items[itemCount].content = content;
- itemCount++;
- }
};
diff --git a/JsonGeneratorTests/JsonGeneratorTests.vcxproj b/JsonGeneratorTests/JsonGeneratorTests.vcxproj
index 16a0860d..18e185bf 100644
--- a/JsonGeneratorTests/JsonGeneratorTests.vcxproj
+++ b/JsonGeneratorTests/JsonGeneratorTests.vcxproj
@@ -84,7 +84,7 @@
-
+
@@ -93,6 +93,7 @@
+
diff --git a/JsonGeneratorTests/JsonGeneratorTests.vcxproj.filters b/JsonGeneratorTests/JsonGeneratorTests.vcxproj.filters
index 0962d62c..b6aff73e 100644
--- a/JsonGeneratorTests/JsonGeneratorTests.vcxproj.filters
+++ b/JsonGeneratorTests/JsonGeneratorTests.vcxproj.filters
@@ -21,9 +21,6 @@
Source Files
-
- Source Files
-
Source Files
@@ -33,6 +30,9 @@
Source Files
+
+ Source Files
+
@@ -47,5 +47,8 @@
Header Files
+
+ Header Files
+
\ No newline at end of file
diff --git a/JsonGeneratorTests/JsonHashTable.h b/JsonGeneratorTests/JsonHashTable.h
index 6932618d..0919058a 100644
--- a/JsonGeneratorTests/JsonHashTable.h
+++ b/JsonGeneratorTests/JsonHashTable.h
@@ -19,13 +19,20 @@ public:
void add(const char* key, const char* value)
{
- JsonValueContent v;
- v.string = value;
- addItem(key, JSON_STRING, v);
+ addItem(key, JsonValue(value));
+ }
+
+ void addItem(const char* key, JsonValue value)
+ {
+ if (itemCount >= N) return;
+
+ items[itemCount].key = key;
+ items[itemCount].value = value;
+ itemCount++;
}
using JsonObjectBase::writeTo;
-
+
private:
struct KeyValuePair
@@ -46,20 +53,10 @@ private:
if (i>0) sb.append(",");
sb.appendEscaped(items[i].key);
sb.append(":");
- writeValueTo(items[i].value, sb);
+ items[i].value.writeTo(sb);
}
sb.append("}");
}
-
- void addItem(const char* key, JsonValueType type, JsonValueContent content)
- {
- if (itemCount >= N) return;
-
- items[itemCount].key = key;
- items[itemCount].value.type = type;
- items[itemCount].value.content = content;
- itemCount++;
- }
};
diff --git a/JsonGeneratorTests/JsonObjectBase.cpp b/JsonGeneratorTests/JsonObjectBase.cpp
deleted file mode 100644
index 008278c2..00000000
--- a/JsonGeneratorTests/JsonObjectBase.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include "JsonObjectBase.h"
-
-void JsonObjectBase::writeValueTo(JsonValue& obj, StringBuilder& sb)
-{
- switch (obj.type)
- {
- case JSON_STRING:
- sb.appendEscaped(obj.content.string);
- break;
-
- case JSON_NUMBER:
- sb.append(obj.content.number);
- break;
-
- case JSON_BOOLEAN:
- sb.append(obj.content.boolean ? "true" : "false");
- break;
-
- case JSON_OBJECT:
- if (obj.content.object)
- obj.content.object->writeTo(sb);
- else
- sb.append("null");
- break;
- }
-}
\ No newline at end of file
diff --git a/JsonGeneratorTests/JsonObjectBase.h b/JsonGeneratorTests/JsonObjectBase.h
index 1e15300c..c9939250 100644
--- a/JsonGeneratorTests/JsonObjectBase.h
+++ b/JsonGeneratorTests/JsonObjectBase.h
@@ -5,7 +5,7 @@
#pragma once
-#include "StringBuilder.h"
+#include "JsonValue.h"
class JsonObjectBase
{
@@ -17,32 +17,6 @@ public:
writeTo(sb);
}
-protected:
-
- enum JsonValueType
- {
- JSON_STRING,
- JSON_NUMBER,
- JSON_BOOLEAN,
- JSON_OBJECT,
- };
-
- union JsonValueContent
- {
- const char* string;
- double number;
- bool boolean;
- JsonObjectBase* object;
- };
-
- struct JsonValue
- {
- JsonValueType type;
- JsonValueContent content;
- };
-
- void writeValueTo(JsonValue& obj, StringBuilder& sb);
-
virtual void writeTo(StringBuilder& sb) = 0;
};
diff --git a/JsonGeneratorTests/JsonValue.cpp b/JsonGeneratorTests/JsonValue.cpp
new file mode 100644
index 00000000..fd99d1ed
--- /dev/null
+++ b/JsonGeneratorTests/JsonValue.cpp
@@ -0,0 +1,32 @@
+/*
+ * Arduino JSON library
+ * Benoit Blanchon 2014 - MIT License
+ */
+
+#include "JsonValue.h"
+#include "JsonObjectBase.h"
+
+void JsonValue::writeTo(StringBuilder& sb)
+{
+ switch (type)
+ {
+ case JSON_STRING:
+ sb.appendEscaped(content.string);
+ break;
+
+ case JSON_NUMBER:
+ sb.append(content.number);
+ break;
+
+ case JSON_BOOLEAN:
+ sb.append(content.boolean ? "true" : "false");
+ break;
+
+ case JSON_OBJECT:
+ if (content.object)
+ ((JsonObjectBase*)content.object)->writeTo(sb);
+ else
+ sb.append("null");
+ break;
+ }
+}
\ No newline at end of file
diff --git a/JsonGeneratorTests/JsonValue.h b/JsonGeneratorTests/JsonValue.h
new file mode 100644
index 00000000..a1567c84
--- /dev/null
+++ b/JsonGeneratorTests/JsonValue.h
@@ -0,0 +1,67 @@
+/*
+ * Arduino JSON library
+ * Benoit Blanchon 2014 - MIT License
+ */
+
+#pragma once
+
+#include "StringBuilder.h"
+
+class JsonObjectBase;
+
+class JsonValue
+{
+public:
+
+ JsonValue()
+ {
+ }
+
+ JsonValue(const char* value)
+ : type(JSON_STRING)
+ {
+ content.string = value;
+ }
+
+ JsonValue(double value)
+ : type(JSON_NUMBER)
+ {
+ content.number = value;
+ }
+
+ JsonValue(bool value)
+ : type(JSON_BOOLEAN)
+ {
+ content.boolean = value;
+ }
+
+ JsonValue(JsonObjectBase& value)
+ : type(JSON_OBJECT)
+ {
+ content.object = &value;
+ }
+
+ void writeTo(StringBuilder& sb);
+
+private:
+
+ enum Type
+ {
+ JSON_STRING,
+ JSON_NUMBER,
+ JSON_BOOLEAN,
+ JSON_OBJECT,
+ };
+
+ union Content
+ {
+ const char* string;
+ double number;
+ bool boolean;
+ JsonObjectBase* object;
+ };
+
+ Type type;
+ Content content;
+};
+