/* * Copyright (c) 2018 Samsung Electronics Co., Ltd. All Rights Reserved * * 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 "ConfigManager.h" #include namespace neurun { namespace config { ConfigManager &ConfigManager::instance() { static ConfigManager manager; return manager; } ConfigManager::ConfigManager() { auto fetch_from_env_var = [&](const std::string &key) { const char *value = std::getenv(key.c_str()); if (value != nullptr) { _map[key] = value; } }; #define CONFIG(Name, Type, Default) \ _map.insert({std::string{#Name}, std::string{Default}}); \ fetch_from_env_var(#Name); #include "Config.lst" #undef CONFIG } template <> bool ConfigManager::get(const std::string &key) const { auto raw = _map.at(key); static const std::array false_list{"0", "OFF", "FALSE", "N", "NO"}; auto false_found = std::find(false_list.begin(), false_list.end(), raw); return (false_found == false_list.end()); } template <> int ConfigManager::get(const std::string &key) const { auto raw = _map.at(key); return std::stoi(raw); } template <> std::string ConfigManager::get(const std::string &key) const { auto raw = _map.at(key); return raw; } } // namespace config } // namespace neurun