diff options
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>{}; +    } +} +  | 
