diff options
author | Martin Braun <martin.braun@ettus.com> | 2017-11-10 21:43:09 -0800 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2018-02-01 06:35:37 +0100 |
commit | 4ebfea45f32cc845d7887e552e8c6084d8ef3067 (patch) | |
tree | 03072dbab4870b9d648d154331d0ee7911da1b24 /host/lib/utils | |
parent | 21be43d40a0fe33af9597e77fb3465caa7079033 (diff) | |
download | uhd-4ebfea45f32cc845d7887e552e8c6084d8ef3067.tar.gz uhd-4ebfea45f32cc845d7887e552e8c6084d8ef3067.tar.bz2 uhd-4ebfea45f32cc845d7887e552e8c6084d8ef3067.zip |
lib: Add config_parser class
This class is not publicly exported. It is meant to read config files in
the INI format.
Reviewed-by: Brent Stapleton <brent.stapleton@ettus.com>
Diffstat (limited to 'host/lib/utils')
-rw-r--r-- | host/lib/utils/CMakeLists.txt | 1 | ||||
-rw-r--r-- | host/lib/utils/config_parser.cpp | 59 |
2 files changed, 60 insertions, 0 deletions
diff --git a/host/lib/utils/CMakeLists.txt b/host/lib/utils/CMakeLists.txt index 91a579853..afaf99274 100644 --- a/host/lib/utils/CMakeLists.txt +++ b/host/lib/utils/CMakeLists.txt @@ -159,6 +159,7 @@ SET_SOURCE_FILES_PROPERTIES( ######################################################################## LIBUHD_APPEND_SOURCES( ${CMAKE_CURRENT_SOURCE_DIR}/csv.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/config_parser.cpp ${CMAKE_CURRENT_SOURCE_DIR}/eeprom_utils.cpp ${CMAKE_CURRENT_SOURCE_DIR}/gain_group.cpp ${CMAKE_CURRENT_SOURCE_DIR}/ihex.cpp diff --git a/host/lib/utils/config_parser.cpp b/host/lib/utils/config_parser.cpp new file mode 100644 index 000000000..a88a99a01 --- /dev/null +++ b/host/lib/utils/config_parser.cpp @@ -0,0 +1,59 @@ +// +// Copyright 2018 Ettus Research, a National Instruments Company +// +// SPDX-License-Identifier: GPL-3.0+ +// + +#include <uhdlib/utils/config_parser.hpp> +#include <boost/format.hpp> +#include <boost/filesystem.hpp> +#include <boost/property_tree/ini_parser.hpp> + +using namespace uhd; + +config_parser::config_parser(const std::string &path) +{ + if (not path.empty() and boost::filesystem::exists(path)) { + try { + boost::property_tree::ini_parser::read_ini(path, _pt); + } catch (const boost::property_tree::ini_parser_error &) { + throw uhd::runtime_error(str( + boost::format("Unable to parse file %s") + % path + )); + } + } +} + +void config_parser::read_file(const std::string &path) +{ + config_parser new_config(path); + for (const auto& section : new_config.sections()) { + for (const auto& key : new_config.options(section)) { + set<std::string>( + section, + key, + new_config.get<std::string>(section, key) + ); + } + } +} + +std::vector<std::string> config_parser::sections() +{ + try { + return _options(_pt); + } catch (const boost::property_tree::ptree_bad_path &) { + return std::vector<std::string>{}; + } +} + +std::vector<std::string> config_parser::options(const std::string §ion) +{ + try { + return _options(_pt.get_child(section)); + } catch (const boost::property_tree::ptree_bad_path &) { + return std::vector<std::string>{}; + } +} + |