From 63ae9ef0968c41357aecc7c6e24c0b5982076b14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Blanchon?= Date: Thu, 26 Jun 2014 13:28:42 +0200 Subject: [PATCH] Moved floating point formatting to StringBuilder --- JsonGeneratorTests/JsonObjectBase.cpp | 2 +- JsonGeneratorTests/StringBuilder.cpp | 23 +++++++++---------- JsonGeneratorTests/StringBuilder.h | 6 +---- .../StringBuilderAppendTests.cpp | 19 +++++++++++---- 4 files changed, 28 insertions(+), 22 deletions(-) diff --git a/JsonGeneratorTests/JsonObjectBase.cpp b/JsonGeneratorTests/JsonObjectBase.cpp index a1805c48..6c8d75f7 100644 --- a/JsonGeneratorTests/JsonObjectBase.cpp +++ b/JsonGeneratorTests/JsonObjectBase.cpp @@ -9,7 +9,7 @@ void JsonObjectBase::writeObjectTo(ObjectContainer& obj, StringBuilder& sb) break; case JSON_NUMBER: - sb.appendFormatted("%lg", obj.value.number); + sb.append(obj.value.number); break; case JSON_BOOLEAN: diff --git a/JsonGeneratorTests/StringBuilder.cpp b/JsonGeneratorTests/StringBuilder.cpp index 113ff95a..610c9fc7 100644 --- a/JsonGeneratorTests/StringBuilder.cpp +++ b/JsonGeneratorTests/StringBuilder.cpp @@ -3,8 +3,19 @@ * Benoit Blanchon 2014 - MIT License */ +#include +#include + #include "StringBuilder.h" +void StringBuilder::append(double value) +{ + char* tail = buffer + length; + + _snprintf(tail, capacity - length, "%lg", value); + + length += strlen(tail); +} void StringBuilder::append(const char* s) { @@ -86,16 +97,4 @@ void StringBuilder::appendEscaped(const char* s) // restore the original capacity capacity++; -} - -void StringBuilder::appendFormatted(const char* format, ...) -{ - char* tail = buffer + length; - - va_list args; - va_start(args, format); - vsnprintf(tail, capacity - length, format, args); - va_end(args); - - length += strlen(tail); } \ No newline at end of file diff --git a/JsonGeneratorTests/StringBuilder.h b/JsonGeneratorTests/StringBuilder.h index 1747eb6c..83989c73 100644 --- a/JsonGeneratorTests/StringBuilder.h +++ b/JsonGeneratorTests/StringBuilder.h @@ -5,10 +5,6 @@ #pragma once -#include -#include -#include - class StringBuilder { public: @@ -18,9 +14,9 @@ public: buffer[0] = 0; } + void append(double); void append(const char* s); void appendEscaped(const char* s); - void appendFormatted(const char* format, ...); private: char* buffer; diff --git a/JsonGeneratorTests/StringBuilderAppendTests.cpp b/JsonGeneratorTests/StringBuilderAppendTests.cpp index 900895d0..0730d3a6 100644 --- a/JsonGeneratorTests/StringBuilderAppendTests.cpp +++ b/JsonGeneratorTests/StringBuilderAppendTests.cpp @@ -27,13 +27,19 @@ namespace JsonGeneratorTests append(""); assertResultIs(""); } - + TEST_METHOD(Null) { - append(NULL); + append((char*)0); assertResultIs("null"); } + TEST_METHOD(Number) + { + append(3.14); + assertResultIs("3.14"); + } + TEST_METHOD(OneString) { append("ABCD"); @@ -55,8 +61,13 @@ namespace JsonGeneratorTests TEST_METHOD(SpecialChars) { - append("\\\"\/\b\f\n\r"); - assertResultIs("\\\"\/\b\f\n\r"); + append("\\\"\b\f\n\r"); + assertResultIs("\\\"\b\f\n\r"); + } + + void append(double d) + { + sb->append(d); } void append(const char* s)