Fix for fpclassify.h NDK porting work. Change-Id: I69df1b4caf2941ed96a53e35e43ec54073f84f59
diff --git a/include/ceres/fpclassify.h b/include/ceres/fpclassify.h index 75a9e17..5a9ea15 100644 --- a/include/ceres/fpclassify.h +++ b/include/ceres/fpclassify.h
@@ -53,34 +53,29 @@ classification == _FPCLASS_PN; } #elif defined(ANDROID) -# if defined(_STLP_CMATH) -// On Android when using STLPort, the isinf and isfinite functions are not -// available, so reimplement them. + +// On Android when using the GNU STL, the C++ fpclassify functions are not +// available. Strictly speaking, the std functions are are not standard until +// C++11. Instead use the C99 macros on Android. +inline bool IsNaN (double x) { return isnan(x); } +inline bool IsNormal (double x) { return isnormal(x); } + +// On Android NDK r6, when using STLPort, the isinf and isfinite functions are +// not available, so reimplement them. +# if defined(_STLPORT_VERSION) +inline bool IsInfinite(double x) { + return x == std::numeric_limits<double>::infinity() || + x == -std::numeric_limits<double>::infinity(); +} inline bool IsFinite(double x) { return !isnan(x) && !IsInfinite(x); } - -inline bool IsInfinite(double x) { - return x == std::numeric_limits<T>::infinity() || - x == -std::numeric_limits<T>::infinity(); -} # else inline bool IsFinite (double x) { return isfinite(x); } inline bool IsInfinite(double x) { return isinf(x); } -# endif // defined(_STLP_CMATH) - -inline bool IsNaN (double x) { return isnan(x); } -inline bool IsNormal (double x) { return isnormal(x); } - -#elif defined(ANDROID) -// On Android when using the GNU STL, the C++ fpclassify functions are not -// available. Strictly speaking, the std functions are are not standard until -// C++11. Instead use the C99 macros on Android. -inline bool IsFinite (double x) { return isfinite(x); } -inline bool IsInfinite(double x) { return isinf(x); } -inline bool IsNaN (double x) { return isnan(x); } -inline bool IsNormal (double x) { return isnormal(x); } +# endif // defined(_STLPORT_VERSION) #else +// These definitions are for the normal Unix suspects. // TODO(keir): Test the "else" with more platforms. inline bool IsFinite (double x) { return std::isfinite(x); } inline bool IsInfinite(double x) { return std::isinf(x); }