Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/kpu/kenlm.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorKenneth Heafield <github@kheafield.com>2017-04-11 12:48:49 +0300
committerKenneth Heafield <github@kheafield.com>2017-04-11 12:48:49 +0300
commitf3243eaff1366c7c60263ec0d21c9bfe4ab3591c (patch)
treece54c36201ede01cd99ae8271523bea820982713 /util
parentc8ef1e3191ceb57b49fabe092fdaf73f3032d0c4 (diff)
Change isnan handing to only use math.h on windows. Fixes #85.
Diffstat (limited to 'util')
-rw-r--r--util/file_piece.cc18
1 files changed, 13 insertions, 5 deletions
diff --git a/util/file_piece.cc b/util/file_piece.cc
index 8f6278f..79fd5a7 100644
--- a/util/file_piece.cc
+++ b/util/file_piece.cc
@@ -23,7 +23,9 @@
#include <sys/types.h>
#include <sys/stat.h>
+#if defined(_WIN32) || defined(_WIN64)
#include <math.h>
+#endif
namespace util {
@@ -174,19 +176,25 @@ StringPiece FirstToken(StringPiece str) {
return StringPiece(str.data(), i - str.data());
}
+// std::isnan is technically C++11 not C++98. But in practice this is a problem for visual studio.
+template <class T> inline int CrossPlatformIsNaN(T value) {
+#if defined(_WIN32) || defined(_WIN64)
+ return isnan(value);
+#else
+ return std::isnan(value);
+#endif
+}
+
const char *ParseNumber(StringPiece str, float &out) {
int count;
out = kConverter.StringToFloat(str.data(), str.size(), &count);
- // std::isnan is C++11, not C++98
- using namespace std;
- UTIL_THROW_IF_ARG(isnan(out) && str != "NaN" && str != "nan", ParseNumberException, (FirstToken(str)), "float");
+ UTIL_THROW_IF_ARG(CrossPlatformIsNaN(out) && str != "NaN" && str != "nan", ParseNumberException, (FirstToken(str)), "float");
return str.data() + count;
}
const char *ParseNumber(StringPiece str, double &out) {
int count;
out = kConverter.StringToDouble(str.data(), str.size(), &count);
- using namespace std;
- UTIL_THROW_IF_ARG(isnan(out) && str != "NaN" && str != "nan", ParseNumberException, (FirstToken(str)), "double");
+ UTIL_THROW_IF_ARG(CrossPlatformIsNaN(out) && str != "NaN" && str != "nan", ParseNumberException, (FirstToken(str)), "double");
return str.data() + count;
}
const char *ParseNumber(StringPiece str, long int &out) {