Explorar o código

Moved floating point formatting to StringBuilder

Benoît Blanchon %!s(int64=11) %!d(string=hai) anos
pai
achega
63ae9ef096

+ 1 - 1
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:

+ 11 - 12
JsonGeneratorTests/StringBuilder.cpp

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

+ 1 - 5
JsonGeneratorTests/StringBuilder.h

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

+ 15 - 4
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)