]> git.cworth.org Git - apitrace/commitdiff
Allow NaN, Infinity in JSON.
authorJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 26 Oct 2012 22:45:35 +0000 (23:45 +0100)
committerJosé Fonseca <jose.r.fonseca@gmail.com>
Fri, 26 Oct 2012 22:45:35 +0000 (23:45 +0100)
Non-standard but widely support (json.py, qjson)

retrace/json.hpp

index 2f50a8c55aedc28fccad91c1493031289113cc2b..4ad2ab35d2fd9f270fd4c53845b4ef0293b0b422 100644 (file)
@@ -37,8 +37,9 @@
 #ifdef _MSC_VER
 #  include <float.h>
 #  define isfinite _finite
+#  define isnan _isnan
 #else
-#  include <math.h> // isfinite
+#  include <math.h> // isfinite, isnan
 #endif
 
 #include <iomanip>
@@ -335,15 +336,21 @@ public:
 
     template<class T>
     inline void writeNumber(T n) {
-        if (!isfinite(n)) {
-            // NaN/Inf
-            writeNull();
+        separator();
+        if (isnan(n)) {
+            // NaN is non-standard but widely supported
+            os << "NaN";
+        } else if (!isfinite(n)) {
+            // Infinite is non-standard but widely supported
+            if (n < 0) {
+                os << '-';
+            }
+            os << "Infinity";
         } else {
-            separator();
             os << std::dec << std::setprecision(std::numeric_limits<T>::digits10 + 1) << n;
-            value = true;
-            space = ' ';
         }
+        value = true;
+        space = ' ';
     }
     
     inline void writeStringMember(const char *name, const char *s) {