forked from bblanchon/ArduinoJson
Moved floating point formatting to StringBuilder
This commit is contained in:
@ -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:
|
||||||
|
@ -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);
|
|
||||||
}
|
|
@ -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;
|
||||||
|
@ -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)
|
||||||
|
Reference in New Issue
Block a user