aboutsummaryrefslogtreecommitdiffstats
path: root/host/lib
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2019-08-26 10:51:52 -0700
committerMartin Braun <martin.braun@ettus.com>2019-11-26 11:49:10 -0800
commite250da5003bcc7a7068e54b11ba86e51563255be (patch)
treea02f3a67a428f3fcafee8c6a5e1d9fcfb03f750a /host/lib
parente9fa920ad86ee9d270789a564726a08591408312 (diff)
downloaduhd-e250da5003bcc7a7068e54b11ba86e51563255be.tar.gz
uhd-e250da5003bcc7a7068e54b11ba86e51563255be.tar.bz2
uhd-e250da5003bcc7a7068e54b11ba86e51563255be.zip
utils: cast: Add from_str() typecast
This is the inverse to std::to_string(), and we can overload it with UHD-internal types.
Diffstat (limited to 'host/lib')
-rw-r--r--host/lib/utils/CMakeLists.txt1
-rw-r--r--host/lib/utils/cast.cpp39
2 files changed, 40 insertions, 0 deletions
diff --git a/host/lib/utils/CMakeLists.txt b/host/lib/utils/CMakeLists.txt
index b4dd72c94..74b292fbb 100644
--- a/host/lib/utils/CMakeLists.txt
+++ b/host/lib/utils/CMakeLists.txt
@@ -219,6 +219,7 @@ set_source_files_properties(
# Append sources
########################################################################
LIBUHD_APPEND_SOURCES(
+ ${CMAKE_CURRENT_SOURCE_DIR}/cast.cpp
${CMAKE_CURRENT_SOURCE_DIR}/csv.cpp
${CMAKE_CURRENT_SOURCE_DIR}/config_parser.cpp
${CMAKE_CURRENT_SOURCE_DIR}/compat_check.cpp
diff --git a/host/lib/utils/cast.cpp b/host/lib/utils/cast.cpp
new file mode 100644
index 000000000..635d844ee
--- /dev/null
+++ b/host/lib/utils/cast.cpp
@@ -0,0 +1,39 @@
+//
+// Copyright 2019 Ettus Research, a National Instruments Brand
+//
+// SPDX-License-Identifier: GPL-3.0-or-later
+//
+
+#include <uhd/utils/cast.hpp>
+
+using namespace uhd;
+
+template <>
+double cast::from_str(const std::string& val)
+{
+ try {
+ return std::stod(val);
+ } catch (std::invalid_argument&) {
+ throw uhd::runtime_error(std::string("Cannot convert `") + val + "' to double!");
+ } catch (std::out_of_range&) {
+ throw uhd::runtime_error(std::string("Cannot convert `") + val + "' to double!");
+ }
+}
+
+template <>
+int cast::from_str(const std::string& val)
+{
+ try {
+ return std::stoi(val);
+ } catch (std::invalid_argument&) {
+ throw uhd::runtime_error(std::string("Cannot convert `") + val + "' to int!");
+ } catch (std::out_of_range&) {
+ throw uhd::runtime_error(std::string("Cannot convert `") + val + "' to int!");
+ }
+}
+
+template <>
+std::string cast::from_str(const std::string& val)
+{
+ return val;
+}