bool isdefault = true;
public:
-
/* Callback */
xbt_cfg_cb_t old_callback = nullptr;
TypedConfigurationElement(const char* key, const char* desc, T value = T())
: ConfigurationElement(key, desc), content(std::move(value))
{}
- TypedConfigurationElement(const char* key, const char* desc, T value,
- xbt_cfg_cb_t cb)
- : ConfigurationElement(key, desc, cb), content(std::move(value))
+ TypedConfigurationElement(const char* key, const char* desc, T value, xbt_cfg_cb_t cb)
+ : ConfigurationElement(key, desc, cb), content(std::move(value))
{}
- TypedConfigurationElement(const char* key, const char* desc, T value,
- std::function<void(T&)> callback)
- : ConfigurationElement(key, desc), content(std::move(value)),
- callback(std::move(callback))
+ TypedConfigurationElement(const char* key, const char* desc, T value, std::function<void(T&)> callback)
+ : ConfigurationElement(key, desc), content(std::move(value)), callback(std::move(callback))
{}
- ~TypedConfigurationElement()=default;
+ ~TypedConfigurationElement() = default;
std::string getStringValue() override;
const char* getTypeName() override;
this->content = std::move(value);
this->update();
} else {
- XBT_DEBUG("Do not override configuration variable '%s' with value '%s'"
- " because it was already set.", key.c_str(), to_string(value).c_str());
+ XBT_DEBUG("Do not override configuration variable '%s' with value '%s' because it was already set.", key.c_str(),
+ to_string(value).c_str());
}
}
};
inline ConfigurationElement* Config::getDictElement(const char* name)
{
- try {
- return options.at(name);
- } catch (std::out_of_range& unfound) {
- try {
- ConfigurationElement* res = aliases.at(name);
+ auto opt = options.find(name);
+ if (opt != options.end()) {
+ return opt->second;
+ } else {
+ auto als = aliases.find(name);
+ if (als != aliases.end()) {
+ ConfigurationElement* res = als->second;
if (warn_for_aliases)
XBT_INFO("Option %s has been renamed to %s. Consider switching.", name, res->getKey().c_str());
return res;
- } catch (std::out_of_range& missing_key) {
+ } else {
throw simgrid::config::missing_key_error(std::string("Bad config key: ") + name);
}
}
}
// Horrible mess to translate C++ exceptions to C exceptions:
-// Exit from the catch blog (and do the correct exceptio cleaning)
-// before attempting to THROWF.
+// Exit from the catch block (and do the correct exception cleaning) before attempting to THROWF.
#define TRANSLATE_EXCEPTIONS(...) \
catch(simgrid::config::missing_key_error& e) { THROWF(not_found_error, 0, __VA_ARGS__); abort(); } \
catch(...) { THROWF(not_found_error, 0, __VA_ARGS__); abort(); }
(*simgrid_config)[key].setDefaultValue<int>(value);
return;
}
- TRANSLATE_EXCEPTIONS("Could not set variable %s to default integer %i",
- key, value);
+ TRANSLATE_EXCEPTIONS("Could not set variable %s to default integer %i", key, value);
}
/** @brief Set an integer value to \a name within \a cfg if it wasn't changed yet
(*simgrid_config)[key].setDefaultValue<double>(value);
return;
}
- TRANSLATE_EXCEPTIONS("Could not set variable %s to default double %f",
- key, value);
+ TRANSLATE_EXCEPTIONS("Could not set variable %s to default double %f", key, value);
}
/** @brief Set a string value to \a name within \a cfg if it wasn't changed yet
(*simgrid_config)[key].setDefaultValue<std::string>(value ? value : "");
return;
}
- TRANSLATE_EXCEPTIONS("Could not set variable %s to default string %s",
- key, value);
+ TRANSLATE_EXCEPTIONS("Could not set variable %s to default string %s", key, value);
}
/** @brief Set an boolean value to \a name within \a cfg if it wasn't changed yet
(*simgrid_config)[key].setDefaultValue<bool>(simgrid::config::parseBool(value));
return;
}
- TRANSLATE_EXCEPTIONS("Could not set variable %s to default boolean %s",
- key, value);
+ TRANSLATE_EXCEPTIONS("Could not set variable %s to default boolean %s", key, value);
}
/** @brief Set an integer value to \a name within \a cfg
(*simgrid_config)[key].setValue<int>(value);
return;
}
- TRANSLATE_EXCEPTIONS("Could not set variable %s to integer %i",
- key, value);
+ TRANSLATE_EXCEPTIONS("Could not set variable %s to integer %i", key, value);
}
/** @brief Set or add a double value to \a name within \a cfg
(*simgrid_config)[key].setValue<double>(value);
return;
}
- TRANSLATE_EXCEPTIONS("Could not set variable %s to double %f",
- key, value);
+ TRANSLATE_EXCEPTIONS("Could not set variable %s to double %f", key, value);
}
/** @brief Set or add a string value to \a name within \a cfg
(*simgrid_config)[key].setValue<std::string>(value ? value : "");
return;
}
- TRANSLATE_EXCEPTIONS("Could not set variable %s to string %s",
- key, value);
+ TRANSLATE_EXCEPTIONS("Could not set variable %s to string %s", key, value);
}
/** @brief Set or add a boolean value to \a name within \a cfg
(*simgrid_config)[key].setValue<bool>(simgrid::config::parseBool(value));
return;
}
- TRANSLATE_EXCEPTIONS("Could not set variable %s to boolean %s",
- key, value);
+ TRANSLATE_EXCEPTIONS("Could not set variable %s to boolean %s", key, value);
}
xbt_test_add("Get a single value");
{
/* get_single_value */
- int ival;
-
xbt_cfg_set_parse("peername:toto:42 speed:42");
- ival = xbt_cfg_get_int("speed");
+ int ival = xbt_cfg_get_int("speed");
if (ival != 42)
xbt_test_fail("Speed value = %d, I expected 42", ival);
}