diff --git a/JsonGeneratorTests/JsonArray.h b/JsonGeneratorTests/JsonArray.h index ef955861..d8bca15c 100644 --- a/JsonGeneratorTests/JsonArray.h +++ b/JsonGeneratorTests/JsonArray.h @@ -5,48 +5,93 @@ #pragma once +#include + +enum JsonObjectType +{ + JSON_STRING, + JSON_NUMBER, +}; + +union JsonObjectValue +{ + const char* string; + double number; +}; + +struct JsonObject +{ + JsonObjectType type; + JsonObjectValue value; +}; + template class JsonArray { + + public: JsonArray() { itemCount = 0; } - void add(const char* data) + void add(const char* value) { - if (itemCount < N) - items[itemCount++] = data; + if (itemCount >= N) return; + + items[itemCount].type = JSON_STRING; + items[itemCount].value.string = value; + itemCount++; + } + + void add(double value) + { + if (itemCount >= N) return; + + items[itemCount].type = JSON_NUMBER; + items[itemCount].value.number = value; + itemCount++; } void writeTo(char* buffer, size_t bufferSize) { buffer[0] = 0; - append("[", buffer, bufferSize); + append(buffer, bufferSize, "["); for (int i = 0; i < itemCount; i++) { if (i>0) - append(",", buffer, bufferSize); + append(buffer, bufferSize, ","); - append("'", buffer, bufferSize); - append(items[i], buffer, bufferSize); - append("'", buffer, bufferSize); + switch (items[i].type) + { + case JSON_STRING: + append(buffer, bufferSize, "'%s'", items[i].value.string); + break; + + case JSON_NUMBER: + append(buffer, bufferSize, "%lg", items[i].value.number); + break; + } } - append("]", buffer, bufferSize); + append(buffer, bufferSize, "]"); } private: - const char* items[N]; + JsonObject items[N]; int itemCount; - void append(const char* source, char* dest, size_t destSize) + void append(char* dest, size_t destSize, const char* format, ...) { int len = strlen(dest); - strncpy(dest + len, source, destSize - len); + + va_list args; + va_start(args, format); + vsnprintf(dest + len, destSize - len, format, args); + va_end(args); } }; diff --git a/JsonGeneratorTests/JsonArrayTests.cpp b/JsonGeneratorTests/JsonArrayTests.cpp index d06d2e75..4f14309c 100644 --- a/JsonGeneratorTests/JsonArrayTests.cpp +++ b/JsonGeneratorTests/JsonArrayTests.cpp @@ -40,6 +40,13 @@ namespace JsonGeneratorTests AssertJsonIs("['hello','world']"); } + TEST_METHOD(OneNumber) + { + arr.add(3.14); + + AssertJsonIs("[3.14]"); + } + void AssertJsonIs(const char* expected) { char buffer[256];