diff options
Diffstat (limited to 'host/lib/utils')
-rw-r--r-- | host/lib/utils/cast.cpp | 25 |
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 { |