1 #ifndef DASH__UTIL__CONFIG_H__ 2 #define DASH__UTIL__CONFIG_H__ 4 #include <dash/internal/Logging.h> 5 #include <dash/util/StaticConfig.h> 9 #include <unordered_map> 11 #include <type_traits> 45 typedef void (*callback_fun)(
const std::string &);
47 static std::unordered_map<std::string, callback_fun> callbacks_;
48 static std::unordered_map<std::string, std::string> config_values_;
51 static std::string get_str(
52 const std::string & key)
55 auto kv = Config::config_values_.find(key);
56 if (kv != Config::config_values_.end()) {
59 DASH_LOG_TRACE(
"util::Config::get_str >", key,
"->", value);
64 const std::string & key,
65 const std::string & value)
67 DASH_LOG_TRACE(
"util::Config::set_str >", key,
"->", value);
68 Config::config_values_[key] = value;
78 template<
typename ValueT>
80 typename std::enable_if<
81 std::is_same<ValueT, bool>::value, ValueT>::type
82 get(
const std::string & key)
84 bool value = (get_str(key) ==
"1") ||
85 (get_str(key +
"_BOOL") ==
"1");
87 DASH_LOG_TRACE(
"util::Config::get<bool>", key,
"->", value);
91 template<
typename ValueT>
93 typename std::enable_if<
94 std::is_floating_point<ValueT>::value, ValueT>::type
95 get(
const std::string & key)
97 ValueT value = std::stod(get_str(key).c_str());
98 DASH_LOG_TRACE(
"util::Config::get<fp>", key,
"->", value);
102 template<
typename ValueT>
104 typename std::enable_if<
105 !std::is_same<ValueT, bool>::value &&
106 std::is_integral<ValueT>::value, ValueT >::type
107 get(
const std::string & key)
109 ValueT value = std::strtoll(get_str(key).c_str(),
nullptr, 10);
110 DASH_LOG_TRACE(
"util::Config::get<integral>", key,
"->", value);
114 template<
typename ValueT>
116 typename std::enable_if<
117 !std::is_floating_point<ValueT>::value &&
118 !std::is_integral<ValueT>::value, ValueT>::type
119 get(
const std::string & key)
121 std::istringstream ss(get_str(key));
125 DASH_LOG_TRACE(
"util::Config::get<T>", key,
"->", value);
133 template<
typename ValueT>
135 typename std::enable_if<std::is_arithmetic<ValueT>::value,
void>::type
137 const std::string & key,
140 DASH_LOG_TRACE(
"util::Config::set(string,T)", key, value);
141 std::ostringstream ss;
143 std::string value_s = ss.str();
145 Config::config_values_[key] = value_s;
146 Config::on_change(key, value_s);
151 const std::string & key,
156 const std::string & key,
159 set(key, std::string(cstr));
166 static typename std::unordered_map<std::string, std::string>::iterator
168 return Config::config_values_.begin();
171 static typename std::unordered_map<std::string, std::string>::iterator
173 return Config::config_values_.end();
176 static bool is_set(
const std::string & key)
178 auto kv = Config::config_values_.find(key);
179 if (kv == Config::config_values_.end()) {
189 static void on_change(
190 const std::string & key,
191 const std::string & value)
193 auto callback_it = Config::callbacks_.find(key);
194 if (Config::callbacks_.end() != callback_it) {
195 ((*callback_it).second)(value);
199 static void dash_enable_logging_callback(
200 const std::string & value)
203 dash::internal::logging::enable_log();
204 DASH_LOG_TRACE(
"util::Config::set",
"Log enabled");
205 }
else if (value ==
"0") {
206 DASH_LOG_TRACE(
"util::Config::set",
"Disabling log");
207 dash::internal::logging::disable_log();
216 #endif // DASH__UTIL__CONFIG_H__ This class is a simple memory pool which holds allocates elements of size ValueType.