From 71d4b02a7fa8ee5c00cadf633e22de6dc07c158e Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Sat, 21 Mar 2015 14:14:48 +0300 Subject: [PATCH] Dependency on math.h and the last 'using namespace std' were removed --- libuavcan/include/uavcan/marshal/float_spec.hpp | 10 +++------- libuavcan/include/uavcan/util/templates.hpp | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/libuavcan/include/uavcan/marshal/float_spec.hpp b/libuavcan/include/uavcan/marshal/float_spec.hpp index 2ee680f184..b77328f44a 100644 --- a/libuavcan/include/uavcan/marshal/float_spec.hpp +++ b/libuavcan/include/uavcan/marshal/float_spec.hpp @@ -16,9 +16,7 @@ #ifndef UAVCAN_CPP_VERSION # error UAVCAN_CPP_VERSION #endif -#if UAVCAN_CPP_VERSION < UAVCAN_CPP11 -# include // Needed for isfinite() -#else +#if UAVCAN_CPP_VERSION >= UAVCAN_CPP11 # include // Assuming that in C++11 mode all standard headers are available #endif @@ -169,8 +167,7 @@ public: private: static inline void saturate(StorageType& value) { - using namespace std; - if ((IsExactRepresentation == 0) && isfinite(value)) + if ((IsExactRepresentation == 0) && isFinite(value)) { if (value > max()) { @@ -189,8 +186,7 @@ private: static inline void truncate(StorageType& value) { - using namespace std; - if ((IsExactRepresentation == 0) && isfinite(value)) + if ((IsExactRepresentation == 0) && isFinite(value)) { if (value > max()) { diff --git a/libuavcan/include/uavcan/util/templates.hpp b/libuavcan/include/uavcan/util/templates.hpp index e25102790d..e2572ff3d3 100644 --- a/libuavcan/include/uavcan/util/templates.hpp +++ b/libuavcan/include/uavcan/util/templates.hpp @@ -470,6 +470,20 @@ inline bool isInfinity(T arg) #endif } +/** + * Replacement for std::isfinite(). + * Note that direct float comparison (==, !=) is intentionally avoided. + */ +template +inline bool isFinite(T arg) +{ +#if UAVCAN_CPP_VERSION >= UAVCAN_CPP11 + return std::isfinite(arg); +#else + return !isNaN(arg) && !isInfinity(arg); +#endif +} + /** * Replacement for std::signbit(). * Note that direct float comparison (==, !=) is intentionally avoided.