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;
case JSON_NUMBER:
sb.appendFormatted("%lg", obj.value.number);
sb.append(obj.value.number);
break;
case JSON_BOOLEAN:

View File

@ -3,8 +3,19 @@
* Benoit Blanchon 2014 - MIT License
*/
#include <cstdio>
#include <cstring>
#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);
}

View File

@ -5,10 +5,6 @@
#pragma once
#include <cstdarg>
#include <cstdio>
#include <cstring>
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;

View File

@ -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)