aboutsummaryrefslogtreecommitdiffstats
path: root/host
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2021-08-31 11:46:39 +0200
committerAaron Rossetto <aaron.rossetto@ni.com>2021-10-19 12:21:33 -0700
commit91c10b66c23178e27bbff0e9173570c63e342736 (patch)
treeb9839cd72aa7ed2aaab52738b0610f81a5c8ac91 /host
parent692a588723ec77b62179b70e17eb157ef1b4ea31 (diff)
downloaduhd-91c10b66c23178e27bbff0e9173570c63e342736.tar.gz
uhd-91c10b66c23178e27bbff0e9173570c63e342736.tar.bz2
uhd-91c10b66c23178e27bbff0e9173570c63e342736.zip
uhd: math: Add a sign() function
We've been having issues with moving locations of Boost headers for this function, and it's simple enough to implement ourselves.
Diffstat (limited to 'host')
-rw-r--r--host/include/uhd/utils/math.hpp15
-rw-r--r--host/tests/math_test.cpp7
2 files changed, 22 insertions, 0 deletions
diff --git a/host/include/uhd/utils/math.hpp b/host/include/uhd/utils/math.hpp
index becc256f1..4918ddf2e 100644
--- a/host/include/uhd/utils/math.hpp
+++ b/host/include/uhd/utils/math.hpp
@@ -263,6 +263,21 @@ inline IntegerType gcd(IntegerType x, IntegerType y)
return _bmint::gcd<IntegerType>(x, y);
}
+//! Returns the sign of x
+//
+// Note: This is equivalent to the Boost.Math version, but without the
+// dependency.
+//
+// Returns +1 for positive arguments, -1 for negative arguments, and 0 if x is
+// zero.
+template <typename T>
+inline constexpr int sign(T x)
+{
+ // Note: If T is unsigned, then this will compile with a warning. Should
+ // we need that, expand the template logic.
+ return (T(0) < x) - (x < T(0));
+}
+
} // namespace math
} // namespace uhd
diff --git a/host/tests/math_test.cpp b/host/tests/math_test.cpp
index c1b6793bb..1fb01f5c1 100644
--- a/host/tests/math_test.cpp
+++ b/host/tests/math_test.cpp
@@ -17,3 +17,10 @@ BOOST_AUTO_TEST_CASE(test_gcd)
{
BOOST_CHECK_EQUAL(uhd::math::gcd<int>(6, 15), 3);
}
+
+BOOST_AUTO_TEST_CASE(test_sign)
+{
+ BOOST_CHECK_EQUAL(uhd::math::sign(2.3), +1);
+ BOOST_CHECK_EQUAL(uhd::math::sign(-2.3), -1);
+ BOOST_CHECK_EQUAL(uhd::math::sign(0.0), 0);
+}