@@ -67,45 +67,44 @@ std::string valueToString(double value) {
67
67
// Allocate a buffer that is more than large enough to store the 16 digits of
68
68
// precision requested below.
69
69
char buffer[32 ];
70
+ int len = -1 ;
70
71
71
72
// Print into the buffer. We need not request the alternative representation
72
73
// that always has a decimal point because JSON doesn't distingish the
73
74
// concepts of reals and integers.
74
75
#if defined(_MSC_VER) && defined(__STDC_SECURE_LIB__) // Use secure version with
75
76
// visual studio 2005 to
76
77
// avoid warning.
77
- int len;
78
78
#if defined(WINCE)
79
79
len = _snprintf (buffer, sizeof (buffer), " %.16g" , value);
80
80
#else
81
81
len = sprintf_s (buffer, sizeof (buffer), " %.16g" , value);
82
82
#endif
83
- assert (len>=0 );
84
- fixNumericLocale (buffer, buffer + len);
85
83
#else
86
84
if ( isfinite ( value ))
87
85
{
88
- int len = snprintf (buffer, sizeof (buffer), " %.16g" , value);
89
- assert (len>=0 );
90
- fixNumericLocale (buffer, buffer + len);
86
+ len = snprintf (buffer, sizeof (buffer), " %.16g" , value);
91
87
}
92
88
else
93
89
{
94
90
// IEEE standard states that NaN values will not compare to themselves
95
91
if ( value != value)
96
92
{
97
- snprintf (buffer, sizeof (buffer), " null" );
93
+ len = snprintf (buffer, sizeof (buffer), " null" );
98
94
}
99
95
else if ( value < 0 )
100
96
{
101
- snprintf (buffer, sizeof (buffer), " -1e+9999" );
97
+ len = snprintf (buffer, sizeof (buffer), " -1e+9999" );
102
98
}
103
99
else
104
100
{
105
- snprintf (buffer, sizeof (buffer), " 1e+9999" );
101
+ len = snprintf (buffer, sizeof (buffer), " 1e+9999" );
106
102
}
103
+ // For those, we do not need to call fixNumLoc, but it is fast.
107
104
}
108
105
#endif
106
+ assert (len>=0 );
107
+ fixNumericLocale (buffer, buffer + len);
109
108
return buffer;
110
109
}
111
110
0 commit comments