X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/138e6f86566611611b1115c957cae0a1c6a85a4b..1d04f47ddcc46f37eca622ca5a343c7197115990:/src/xbt/config.cpp diff --git a/src/xbt/config.cpp b/src/xbt/config.cpp index eaa8450d2f..814ec46182 100644 --- a/src/xbt/config.cpp +++ b/src/xbt/config.cpp @@ -15,6 +15,7 @@ #include #include +#include #include #include #include "xbt/misc.h" @@ -29,11 +30,14 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_cfg, xbt, "configuration support"); XBT_EXPORT_NO_IMPORT(xbt_cfg_t) simgrid_config = nullptr; +extern "C" { + XBT_PUBLIC(void) sg_config_finalize(); +} namespace simgrid { namespace config { -missing_key_error::~missing_key_error() noexcept {} +missing_key_error::~missing_key_error() {} class Config; @@ -447,8 +451,10 @@ template XBT_PUBLIC(void) declareFlag(const char* name, const char* description, T value, std::function callback) { - if (simgrid_config == nullptr) + if (simgrid_config == nullptr) { simgrid_config = xbt_cfg_new(); + atexit(sg_config_finalize); + } simgrid_config->registerOption( name, description, std::move(value), std::move(callback)); } @@ -467,7 +473,7 @@ template XBT_PUBLIC(void) declareFlag(const char* name, // ***** C bindings ***** -xbt_cfg_t xbt_cfg_new(void) { return new simgrid::config::Config(); } +xbt_cfg_t xbt_cfg_new() { return new simgrid::config::Config(); } void xbt_cfg_free(xbt_cfg_t * cfg) { delete *cfg; } void xbt_cfg_dump(const char *name, const char *indent, xbt_cfg_t cfg) @@ -487,35 +493,43 @@ void xbt_cfg_register_double(const char *name, double default_value, void xbt_cfg_register_int(const char *name, int default_value,xbt_cfg_cb_t cb_set, const char *desc) { - if (simgrid_config == nullptr) + if (simgrid_config == nullptr) { simgrid_config = xbt_cfg_new(); + atexit(&sg_config_finalize); + } simgrid_config->registerOption(name, desc, default_value, cb_set); } void xbt_cfg_register_string(const char *name, const char *default_value, xbt_cfg_cb_t cb_set, const char *desc) { - if (simgrid_config == nullptr) + if (simgrid_config == nullptr) { simgrid_config = xbt_cfg_new(); + atexit(sg_config_finalize); + } simgrid_config->registerOption(name, desc, default_value ? default_value : "", cb_set); } void xbt_cfg_register_boolean(const char *name, const char*default_value,xbt_cfg_cb_t cb_set, const char *desc) { - if (simgrid_config == nullptr) + if (simgrid_config == nullptr) { simgrid_config = xbt_cfg_new(); + atexit(sg_config_finalize); + } simgrid_config->registerOption(name, desc, simgrid::config::parseBool(default_value), cb_set); } void xbt_cfg_register_alias(const char *realname, const char *aliasname) { - if (simgrid_config == nullptr) + if (simgrid_config == nullptr) { simgrid_config = xbt_cfg_new(); + atexit(sg_config_finalize); + } simgrid_config->alias(realname, aliasname); } -void xbt_cfg_aliases(void) { simgrid_config->showAliases(); } -void xbt_cfg_help(void) { simgrid_config->help(); } +void xbt_cfg_aliases() { simgrid_config->showAliases(); } +void xbt_cfg_help() { simgrid_config->help(); } /*----[ Setting ]---------------------------------------------------------*/ @@ -822,6 +836,7 @@ int xbt_cfg_get_boolean(const char *key) #include "xbt.h" #include "xbt/ex.h" +#include #include