X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/88fad0aaff9eb463f048bfdfe4ad6218aba44ddb..3836e4e27a13a0d389812e41a4d5d651ff0c158b:/src/xbt/config.cpp diff --git a/src/xbt/config.cpp b/src/xbt/config.cpp index 16c47dc636..0a5f2f3568 100644 --- a/src/xbt/config.cpp +++ b/src/xbt/config.cpp @@ -35,8 +35,6 @@ XBT_EXPORT_NO_IMPORT xbt_cfg_t simgrid_config = nullptr; namespace simgrid { namespace config { -missing_key_error::~missing_key_error() = default; - namespace { const char* true_values[] = { @@ -216,6 +214,7 @@ public: { this->content = std::move(value); this->update(); + this->unsetDefault(); } void setDefaultValue(T value) @@ -263,7 +262,7 @@ private: bool warn_for_aliases = true; public: - Config() = default; + Config(); ~Config(); // No copy: @@ -297,6 +296,10 @@ protected: ConfigurationElement* getDictElement(const char* name); }; +Config::Config() +{ + atexit(&sg_config_finalize); +} Config::~Config() { XBT_DEBUG("Frees cfg set %p", this); @@ -317,7 +320,7 @@ inline ConfigurationElement* Config::getDictElement(const char* name) XBT_INFO("Option %s has been renamed to %s. Consider switching.", name, res->getKey().c_str()); return res; } else { - throw simgrid::config::missing_key_error(std::string("Bad config key: ") + name); + THROWF(not_found_error, 0, "Bad config key: %s", name); } } } @@ -389,9 +392,10 @@ template XBT_PUBLIC std::string const& getConfig(const char* name); // ***** alias ***** -void alias(const char* realname, const char* aliasname) +void alias(const char* realname, std::initializer_list aliases) { - simgrid_config->alias(realname, aliasname); + for (auto const& aliasname : aliases) + simgrid_config->alias(realname, aliasname); } // ***** declareFlag ***** @@ -420,7 +424,6 @@ template XBT_PUBLIC void declareFlag(const char* name, const char* description, xbt_cfg_t xbt_cfg_new() { - atexit(&sg_config_finalize); return new simgrid::config::Config(); } void xbt_cfg_free(xbt_cfg_t * cfg) { delete *cfg; } @@ -515,31 +518,10 @@ void xbt_cfg_set_parse(const char *options) if (name.compare(0, path.length(), path) != 0) XBT_INFO("Configuration change: Set '%s' to '%s'", name.c_str(), val.c_str()); - try { - (*simgrid_config)[name.c_str()].setStringValue(val.c_str()); - } - catch (simgrid::config::missing_key_error& e) { - goto on_missing_key; - } - catch (...) { - goto on_exception; - } + (*simgrid_config)[name.c_str()].setStringValue(val.c_str()); } - return; - - /* Do not THROWF from a C++ exception catching context, or some cleanups will be missing */ -on_missing_key: - THROWF(not_found_error, 0, "Could not set variables %s", options); -on_exception: - THROWF(unknown_error, 0, "Could not set variables %s", options); } -// Horrible mess to translate C++ exceptions to C exceptions: -// 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(); } - /** @brief Set the value of a variable, using the string representation of that value * * @param key name of the variable to modify @@ -548,11 +530,7 @@ on_exception: void xbt_cfg_set_as_string(const char *key, const char *value) { - try { - (*simgrid_config)[key].setStringValue(value); - return; - } - TRANSLATE_EXCEPTIONS("Could not set variable %s as string %s", key, value); + (*simgrid_config)[key].setStringValue(value); } /** @brief Set an integer value to \a name within \a cfg if it wasn't changed yet @@ -562,11 +540,7 @@ void xbt_cfg_set_as_string(const char *key, const char *value) */ void xbt_cfg_setdefault_int(const char *key, int value) { - try { - (*simgrid_config)[key].setDefaultValue(value); - return; - } - TRANSLATE_EXCEPTIONS("Could not set variable %s to default integer %i", key, value); + (*simgrid_config)[key].setDefaultValue(value); } /** @brief Set an integer value to \a name within \a cfg if it wasn't changed yet @@ -576,11 +550,7 @@ void xbt_cfg_setdefault_int(const char *key, int value) */ void xbt_cfg_setdefault_double(const char *key, double value) { - try { - (*simgrid_config)[key].setDefaultValue(value); - return; - } - TRANSLATE_EXCEPTIONS("Could not set variable %s to default double %f", key, value); + (*simgrid_config)[key].setDefaultValue(value); } /** @brief Set a string value to \a name within \a cfg if it wasn't changed yet @@ -590,11 +560,7 @@ void xbt_cfg_setdefault_double(const char *key, double value) */ void xbt_cfg_setdefault_string(const char *key, const char *value) { - try { - (*simgrid_config)[key].setDefaultValue(value ? value : ""); - return; - } - TRANSLATE_EXCEPTIONS("Could not set variable %s to default string %s", key, value); + (*simgrid_config)[key].setDefaultValue(value ? value : ""); } /** @brief Set an boolean value to \a name within \a cfg if it wasn't changed yet @@ -604,11 +570,7 @@ void xbt_cfg_setdefault_string(const char *key, const char *value) */ void xbt_cfg_setdefault_boolean(const char *key, const char *value) { - try { - (*simgrid_config)[key].setDefaultValue(simgrid::config::parseBool(value)); - return; - } - TRANSLATE_EXCEPTIONS("Could not set variable %s to default boolean %s", key, value); + (*simgrid_config)[key].setDefaultValue(simgrid::config::parseBool(value)); } /** @brief Set an integer value to \a name within \a cfg @@ -618,11 +580,7 @@ void xbt_cfg_setdefault_boolean(const char *key, const char *value) */ void xbt_cfg_set_int(const char *key, int value) { - try { - (*simgrid_config)[key].setValue(value); - return; - } - TRANSLATE_EXCEPTIONS("Could not set variable %s to integer %i", key, value); + (*simgrid_config)[key].setValue(value); } /** @brief Set or add a double value to \a name within \a cfg @@ -632,11 +590,7 @@ void xbt_cfg_set_int(const char *key, int value) */ void xbt_cfg_set_double(const char *key, double value) { - try { - (*simgrid_config)[key].setValue(value); - return; - } - TRANSLATE_EXCEPTIONS("Could not set variable %s to double %f", key, value); + (*simgrid_config)[key].setValue(value); } /** @brief Set or add a string value to \a name within \a cfg @@ -647,11 +601,7 @@ void xbt_cfg_set_double(const char *key, double value) */ void xbt_cfg_set_string(const char* key, const char* value) { - try { - (*simgrid_config)[key].setValue(value); - return; - } - TRANSLATE_EXCEPTIONS("Could not set variable %s to string %s", key, value); + (*simgrid_config)[key].setValue(value); } /** @brief Set or add a boolean value to \a name within \a cfg @@ -661,21 +611,14 @@ void xbt_cfg_set_string(const char* key, const char* value) */ void xbt_cfg_set_boolean(const char *key, const char *value) { - try { - (*simgrid_config)[key].setValue(simgrid::config::parseBool(value)); - return; - } - TRANSLATE_EXCEPTIONS("Could not set variable %s to boolean %s", key, value); + (*simgrid_config)[key].setValue(simgrid::config::parseBool(value)); } /* Say if the value is the default value */ int xbt_cfg_is_default_value(const char *key) { - try { - return (*simgrid_config)[key].isDefault() ? 1 : 0; - } - TRANSLATE_EXCEPTIONS("Could not get variable %s", key); + return (*simgrid_config)[key].isDefault() ? 1 : 0; } /*----[ Getting ]---------------------------------------------------------*/ @@ -687,10 +630,7 @@ int xbt_cfg_is_default_value(const char *key) */ int xbt_cfg_get_int(const char *key) { - try { - return (*simgrid_config)[key].getValue(); - } - TRANSLATE_EXCEPTIONS("Could not get variable %s", key); + return (*simgrid_config)[key].getValue(); } /** @brief Retrieve a double value of a variable (get a warning if not uniq) @@ -701,10 +641,7 @@ int xbt_cfg_get_int(const char *key) */ double xbt_cfg_get_double(const char *key) { - try { - return (*simgrid_config)[key].getValue(); - } - TRANSLATE_EXCEPTIONS("Could not get variable %s", key); + return (*simgrid_config)[key].getValue(); } /** @brief Retrieve a string value of a variable (get a warning if not uniq) @@ -719,10 +656,7 @@ double xbt_cfg_get_double(const char *key) */ std::string xbt_cfg_get_string(const char* key) { - try { - return (*simgrid_config)[key].getValue(); - } - TRANSLATE_EXCEPTIONS("Could not get variable %s", key); + return (*simgrid_config)[key].getValue(); } /** @brief Retrieve a boolean value of a variable (get a warning if not uniq) @@ -734,10 +668,7 @@ std::string xbt_cfg_get_string(const char* key) */ int xbt_cfg_get_boolean(const char *key) { - try { - return (*simgrid_config)[key].getValue() ? 1 : 0; - } - TRANSLATE_EXCEPTIONS("Could not get variable %s", key); + return (*simgrid_config)[key].getValue() ? 1 : 0; } #ifdef SIMGRID_TEST