diff options
Diffstat (limited to 'host/lib')
| -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 { | 
