diff options
Diffstat (limited to 'libs/ini-config')
-rw-r--r-- | libs/ini-config/CMakeLists.txt | 38 | ||||
-rw-r--r-- | libs/ini-config/ini-config.cpp | 100 | ||||
-rw-r--r-- | libs/ini-config/ini-config.hpp | 61 |
3 files changed, 0 insertions, 199 deletions
diff --git a/libs/ini-config/CMakeLists.txt b/libs/ini-config/CMakeLists.txt deleted file mode 100644 index ceb48259..00000000 --- a/libs/ini-config/CMakeLists.txt +++ /dev/null @@ -1,38 +0,0 @@ -########################################################################### -# Copyright 2015, 2016, 2017 IoT.bzh -# -# author: Fulup Ar Foll <fulup@iot.bzh> -# contrib: Romain Forlot <romain.forlot@iot.bzh> -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -########################################################################### - -# Add target to project dependency list -PROJECT_TARGET_ADD(ini-config) - - # Define project Target - add_library(${TARGET_NAME} STATIC ${TARGET_NAME}.cpp) - - # Binder exposes a unique public entry point - SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES - OUTPUT_NAME ${TARGET_NAME} - ) - - # Define target includes - TARGET_INCLUDE_DIRECTORIES(${TARGET_NAME} - PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} - ) - - # Library dependencies (include updates automatically) - TARGET_LINK_LIBRARIES(${TARGET_NAME} - ${link_libraries}) diff --git a/libs/ini-config/ini-config.cpp b/libs/ini-config/ini-config.cpp deleted file mode 100644 index 9ce0fdc8..00000000 --- a/libs/ini-config/ini-config.cpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (C) 2015, 2016 ,2017, 2018, 2019 "IoT\.bzh" - * Author "Loïc Collignon" <loic.collignon@iot.bzh> - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include "ini-config.hpp" - -bool starts_with(const std::string& text, const std::string& token) -{ - if(text.length() < token.length()) return false; - return (text.compare(0, token.length(), token) == 0); -} - -void ini_config::read_file(const std::string& filename) -{ - std::ifstream f(filename); - if (f) - { - std::regex r_section("^\\s*\\[([^\\]]+)\\]\\s*(#.*)?$"); - std::regex r_key("^\\s*([^\\s]+)\\s*=\\s*\"([^\"]+)\"\\s*(#.*)?$"); - std::string current_section; - std::string line; - while (std::getline(f, line)) - { - std::smatch mr; - - switch (qualify(line)) - { - case line_type::section: - if (std::regex_match(line, mr, r_section) && mr.size() >= 2 && mr[1].matched) - { - current_section = mr[1].str(); - } - break; - case line_type::key: - if(std::regex_match(line, mr, r_key) && mr.size() >= 2 && mr[1].matched) - { - std::string key = current_section + '/' + mr[1].str(); - config_[key] = (mr.size() >= 3 && mr[2].matched) ? mr[2].str() : ""; - } - break; - case line_type::ignore: - break; - } - } - } -} - -ini_config::map ini_config::get_keys(const std::string& section, bool wo_prefix) -{ - map ret; - std::string key; - - std::string prefix = section + '/'; - for(auto i = config_.begin(); - i != config_.end(); - ++i) - { - if (starts_with(i->first, prefix)) - { - if(wo_prefix) - key = i->first.substr(section.size()+1); - else - key = i->first; - ret[key] = i->second; - } - } - return ret; -} - -std::string ini_config::get_value(const std::string& section, const std::string& key) -{ - return config_[section + '/' + key]; -} - -ini_config::line_type ini_config::qualify(std::string& line) -{ - if (line.size()) - { - for (std::string::value_type c : line) - { - if (c == '#') return line_type::ignore; - if (c == '[') return line_type::section; - if (!std::isspace(c, std::locale("C"))) return line_type::key; - } - } - return line_type::ignore; -} diff --git a/libs/ini-config/ini-config.hpp b/libs/ini-config/ini-config.hpp deleted file mode 100644 index ba934edf..00000000 --- a/libs/ini-config/ini-config.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright (C) 2015, 2016 ,2017, 2018, 2019 "IoT\.bzh" - * Author "Loïc Collignon" <loic.collignon@iot.bzh> - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef INI_CONFIG_HPP -#define INI_CONFIG_HPP - -#include <string> -#include <fstream> -#include <map> -#include <regex> -#include <algorithm> - -// Représente un fichier de configuration. -class ini_config -{ -public: - using map = std::map<std::string, std::string>; - - void read_file(const std::string& filename); - - map get_keys(const std::string& section, bool wo_prefix=true); - std::string get_value(const std::string& section, const std::string& key); - - typename map::size_type size() const { return config_.size(); } - typename map::iterator begin() { return config_.begin(); } - typename map::iterator end() { return config_.end(); } - typename map::const_iterator cbegin() const { return config_.cbegin(); } - typename map::const_iterator cend() const { return config_.cend(); } - typename map::reverse_iterator rbegin() { return config_.rbegin(); } - typename map::reverse_iterator rend() { return config_.rend(); } - typename map::const_reverse_iterator crbegin() const { return config_.crbegin(); } - typename map::const_reverse_iterator crend() const { return config_.crend(); } - -private: - map config_; - - enum class line_type - { - ignore = 0, - section = 1, - key = 2 - }; - - line_type qualify(std::string& line); -}; - -#endif // INI_CONFIG_HPP |