mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-01-20 16:41:02 +00:00
- backported RapidJSON fix from Raze.
This commit is contained in:
parent
7e1982fa65
commit
15465f0785
1 changed files with 22 additions and 14 deletions
36
src/common/thirdparty/rapidjson/writer.h
vendored
36
src/common/thirdparty/rapidjson/writer.h
vendored
|
@ -552,30 +552,38 @@ inline bool Writer<StringBuffer>::WriteUint64(uint64_t u) {
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
inline bool Writer<StringBuffer>::WriteDouble(double d) {
|
inline bool Writer<StringBuffer>::WriteDouble(double d) {
|
||||||
|
bool ret = true;
|
||||||
if (internal::Double(d).IsNanOrInf()) {
|
if (internal::Double(d).IsNanOrInf()) {
|
||||||
// Note: This code path can only be reached if (RAPIDJSON_WRITE_DEFAULT_FLAGS & kWriteNanAndInfFlag).
|
// Note: This code path can only be reached if (RAPIDJSON_WRITE_DEFAULT_FLAGS & kWriteNanAndInfFlag).
|
||||||
if (!(kWriteDefaultFlags & kWriteNanAndInfFlag))
|
if (!(kWriteDefaultFlags & kWriteNanAndInfFlag))
|
||||||
return false;
|
{
|
||||||
if (internal::Double(d).IsNan()) {
|
// if we abort here, the writer is left in a broken state, unable to recover, so better write a 0 in addition to returning an error.
|
||||||
PutReserve(*os_, 3);
|
ret = false;
|
||||||
PutUnsafe(*os_, 'N'); PutUnsafe(*os_, 'a'); PutUnsafe(*os_, 'N');
|
d = 0;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (internal::Double(d).Sign()) {
|
|
||||||
PutReserve(*os_, 9);
|
|
||||||
PutUnsafe(*os_, '-');
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
PutReserve(*os_, 8);
|
{
|
||||||
PutUnsafe(*os_, 'I'); PutUnsafe(*os_, 'n'); PutUnsafe(*os_, 'f');
|
if (internal::Double(d).IsNan()) {
|
||||||
PutUnsafe(*os_, 'i'); PutUnsafe(*os_, 'n'); PutUnsafe(*os_, 'i'); PutUnsafe(*os_, 't'); PutUnsafe(*os_, 'y');
|
PutReserve(*os_, 3);
|
||||||
return true;
|
PutUnsafe(*os_, 'N'); PutUnsafe(*os_, 'a'); PutUnsafe(*os_, 'N');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (internal::Double(d).Sign()) {
|
||||||
|
PutReserve(*os_, 9);
|
||||||
|
PutUnsafe(*os_, '-');
|
||||||
|
}
|
||||||
|
else
|
||||||
|
PutReserve(*os_, 8);
|
||||||
|
PutUnsafe(*os_, 'I'); PutUnsafe(*os_, 'n'); PutUnsafe(*os_, 'f');
|
||||||
|
PutUnsafe(*os_, 'i'); PutUnsafe(*os_, 'n'); PutUnsafe(*os_, 'i'); PutUnsafe(*os_, 't'); PutUnsafe(*os_, 'y');
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char *buffer = os_->Push(25);
|
char *buffer = os_->Push(25);
|
||||||
char* end = internal::dtoa(d, buffer, maxDecimalPlaces_);
|
char* end = internal::dtoa(d, buffer, maxDecimalPlaces_);
|
||||||
os_->Pop(static_cast<size_t>(25 - (end - buffer)));
|
os_->Pop(static_cast<size_t>(25 - (end - buffer)));
|
||||||
return true;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42)
|
#if defined(RAPIDJSON_SSE2) || defined(RAPIDJSON_SSE42)
|
||||||
|
|
Loading…
Reference in a new issue