Moved floating point formatting to StringBuilder

This commit is contained in:
Benoît Blanchon
2014-06-26 13:28:42 +02:00
parent 33508e3fe0
commit 63ae9ef096
4 changed files with 28 additions and 22 deletions

View File

@ -9,7 +9,7 @@ void JsonObjectBase::writeObjectTo(ObjectContainer& obj, StringBuilder& sb)
break; break;
case JSON_NUMBER: case JSON_NUMBER:
sb.appendFormatted("%lg", obj.value.number); sb.append(obj.value.number);
break; break;
case JSON_BOOLEAN: case JSON_BOOLEAN:

View File

@ -3,8 +3,19 @@
* Benoit Blanchon 2014 - MIT License * Benoit Blanchon 2014 - MIT License
*/ */
#include <cstdio>
#include <cstring>
#include "StringBuilder.h" #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) void StringBuilder::append(const char* s)
{ {
@ -87,15 +98,3 @@ void StringBuilder::appendEscaped(const char* s)
// restore the original capacity // restore the original capacity
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);
}

View File

@ -5,10 +5,6 @@
#pragma once #pragma once
#include <cstdarg>
#include <cstdio>
#include <cstring>
class StringBuilder class StringBuilder
{ {
public: public:
@ -18,9 +14,9 @@ public:
buffer[0] = 0; buffer[0] = 0;
} }
void append(double);
void append(const char* s); void append(const char* s);
void appendEscaped(const char* s); void appendEscaped(const char* s);
void appendFormatted(const char* format, ...);
private: private:
char* buffer; char* buffer;

View File

@ -30,10 +30,16 @@ namespace JsonGeneratorTests
TEST_METHOD(Null) TEST_METHOD(Null)
{ {
append(NULL); append((char*)0);
assertResultIs("null"); assertResultIs("null");
} }
TEST_METHOD(Number)
{
append(3.14);
assertResultIs("3.14");
}
TEST_METHOD(OneString) TEST_METHOD(OneString)
{ {
append("ABCD"); append("ABCD");
@ -55,8 +61,13 @@ namespace JsonGeneratorTests
TEST_METHOD(SpecialChars) TEST_METHOD(SpecialChars)
{ {
append("\\\"\/\b\f\n\r"); append("\\\"\b\f\n\r");
assertResultIs("\\\"\/\b\f\n\r"); assertResultIs("\\\"\b\f\n\r");
}
void append(double d)
{
sb->append(d);
} }
void append(const char* s) void append(const char* s)