diff options
author | Aaron Rossetto <aaron.rossetto@ni.com> | 2020-03-18 07:31:16 -0500 |
---|---|---|
committer | Aaron Rossetto <aaron.rossetto@ni.com> | 2020-03-18 07:43:20 -0500 |
commit | b12c3b203773649e61f61344829924ab7ad43110 (patch) | |
tree | d3b425d01f2239ec73cc8378e51d323ec111ac08 /host/lib/utils | |
parent | 5fb585c328a45b022744e884ec9d52808a9354cb (diff) | |
download | uhd-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.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 { |