Skip to content

Commit

Permalink
Merge pull request #1057 from chwarr/paren-minmax
Browse files Browse the repository at this point in the history
Guard against min/max being macros in a cross-compiler way
  • Loading branch information
miloyip authored Sep 6, 2017
2 parents 4bb4926 + e4c0ecf commit 5db5dd5
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 23 deletions.
24 changes: 5 additions & 19 deletions include/rapidjson/document.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,6 @@ RAPIDJSON_DIAG_PUSH
#ifdef _MSC_VER
RAPIDJSON_DIAG_OFF(4127) // conditional expression is constant
RAPIDJSON_DIAG_OFF(4244) // conversion from kXxxFlags to 'uint16_t', possible loss of data
#ifdef _MINWINDEF_ // see: http://stackoverflow.com/questions/22744262/cant-call-stdmax-because-minwindef-h-defines-max
#ifndef NOMINMAX
#pragma push_macro("min")
#pragma push_macro("max")
#undef min
#undef max
#endif
#endif
#endif

#ifdef __clang__
Expand Down Expand Up @@ -1018,14 +1010,14 @@ class GenericValue {
uint64_t u = GetUint64();
volatile double d = static_cast<double>(u);
return (d >= 0.0)
&& (d < static_cast<double>(std::numeric_limits<uint64_t>::max()))
&& (d < static_cast<double>((std::numeric_limits<uint64_t>::max)()))
&& (u == static_cast<uint64_t>(d));
}
if (IsInt64()) {
int64_t i = GetInt64();
volatile double d = static_cast<double>(i);
return (d >= static_cast<double>(std::numeric_limits<int64_t>::min()))
&& (d < static_cast<double>(std::numeric_limits<int64_t>::max()))
return (d >= static_cast<double>((std::numeric_limits<int64_t>::min)()))
&& (d < static_cast<double>((std::numeric_limits<int64_t>::max)()))
&& (i == static_cast<int64_t>(d));
}
return true; // double, int, uint are always lossless
Expand All @@ -1042,8 +1034,8 @@ class GenericValue {
bool IsLosslessFloat() const {
if (!IsNumber()) return false;
double a = GetDouble();
if (a < static_cast<double>(-std::numeric_limits<float>::max())
|| a > static_cast<double>(std::numeric_limits<float>::max()))
if (a < static_cast<double>(-(std::numeric_limits<float>::max)())
|| a > static_cast<double>((std::numeric_limits<float>::max)()))
return false;
double b = static_cast<double>(static_cast<float>(a));
return a >= b && a <= b; // Prevent -Wfloat-equal
Expand Down Expand Up @@ -2616,12 +2608,6 @@ class GenericObject {
};

RAPIDJSON_NAMESPACE_END
#ifdef _MINWINDEF_ // see: http://stackoverflow.com/questions/22744262/cant-call-stdmax-because-minwindef-h-defines-max
#ifndef NOMINMAX
#pragma pop_macro("min")
#pragma pop_macro("max")
#endif
#endif
RAPIDJSON_DIAG_POP

#endif // RAPIDJSON_DOCUMENT_H_
4 changes: 2 additions & 2 deletions test/unittest/itoatest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ template <typename T>
static void Verify(void(*f)(T, char*), char* (*g)(T, char*)) {
// Boundary cases
VerifyValue<T>(0, f, g);
VerifyValue<T>(std::numeric_limits<T>::min(), f, g);
VerifyValue<T>(std::numeric_limits<T>::max(), f, g);
VerifyValue<T>((std::numeric_limits<T>::min)(), f, g);
VerifyValue<T>((std::numeric_limits<T>::max)(), f, g);

// 2^n - 1, 2^n, 10^n - 1, 10^n until overflow
for (int power = 2; power <= 10; power += 8) {
Expand Down
2 changes: 1 addition & 1 deletion test/unittest/readertest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ TEST(Reader, ParseNumber_NormalPrecisionError) {
uint64_t bias1 = e.ToBias();
uint64_t bias2 = a.ToBias();
double ulp = static_cast<double>(bias1 >= bias2 ? bias1 - bias2 : bias2 - bias1);
ulpMax = std::max(ulpMax, ulp);
ulpMax = (std::max)(ulpMax, ulp);
ulpSum += ulp;
}
printf("ULP Average = %g, Max = %g \n", ulpSum / count, ulpMax);
Expand Down
2 changes: 1 addition & 1 deletion test/unittest/strtodtest.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ TEST(Strtod, CheckApproximationCase) {
}

// Remove common power of two factor from all three scaled values
int common_Exp2 = std::min(dS_Exp2, std::min(bS_Exp2, hS_Exp2));
int common_Exp2 = (std::min)(dS_Exp2, (std::min)(bS_Exp2, hS_Exp2));
dS_Exp2 -= common_Exp2;
bS_Exp2 -= common_Exp2;
hS_Exp2 -= common_Exp2;
Expand Down

0 comments on commit 5db5dd5

Please sign in to comment.