aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib/utils
diff options
context:
space:
mode:
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 {