aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/utils
diff options
context:
space:
mode:
authorAaron Rossetto <aaron.rossetto@ni.com>2020-03-18 07:31:16 -0500
committerAaron Rossetto <aaron.rossetto@ni.com>2020-03-18 07:43:20 -0500
commitb12c3b203773649e61f61344829924ab7ad43110 (patch)
treed3b425d01f2239ec73cc8378e51d323ec111ac08 /host/lib/utils
parent5fb585c328a45b022744e884ec9d52808a9354cb (diff)
downloaduhd-b12c3b203773649e61f61344829924ab7ad43110.tar.gz
uhd-b12c3b203773649e61f61344829924ab7ad43110.tar.bz2
uhd-b12c3b203773649e61f61344829924ab7ad43110.zip
utils: Add bool specialization to cast::from_str()
This adds a specialization to `uhd::cast::from_str()` to handle `bool` as a target type and interpret strings like 'y', 'Y', 'n', 'No', 'True', 'False', etc. as Boolean values, as well as the traditional '0' and '1' (which also work).
Diffstat (limited to 'host/lib/utils')
-rw-r--r--host/lib/utils/cast.cpp25
1 files changed, 25 insertions, 0 deletions
diff --git a/host/lib/utils/cast.cpp b/host/lib/utils/cast.cpp
index 635d844ee..6b008ff45 100644
--- a/host/lib/utils/cast.cpp
+++ b/host/lib/utils/cast.cpp
@@ -5,10 +5,35 @@
//
#include <uhd/utils/cast.hpp>
+#include <uhd/exception.hpp>
+#include <boost/algorithm/string.hpp>
using namespace uhd;
template <>
+bool cast::from_str(const std::string& val)
+{
+ try {
+ return (std::stoi(val) != 0);
+ } catch (std::exception& ex) {
+ if (boost::algorithm::to_lower_copy(val) == "true"
+ || boost::algorithm::to_lower_copy(val) == "yes"
+ || boost::algorithm::to_lower_copy(val) == "y"
+ || val == "1") {
+ return true;
+ } else if (boost::algorithm::to_lower_copy(val) == "false"
+ || boost::algorithm::to_lower_copy(val) == "no"
+ || boost::algorithm::to_lower_copy(val) == "n"
+ || val == "0") {
+ return false;
+ } else {
+ throw uhd::runtime_error("Cannot convert `" + val + "' to boolean!");
+ return false;
+ }
+ }
+}
+
+template <>
double cast::from_str(const std::string& val)
{
try {