-
- xbt_cfgelm_t variable;
- unsigned int cpt;
- int seen;
-
- variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_int);
-
- if (xbt_dynar_length(variable->content) == variable->min)
- THROWF(mismatch_error, 0,
- "Cannot remove value %d from the config element %s since it's already at its minimal size (=%d)",
- val, name, variable->min);
-
- xbt_dynar_foreach(variable->content, cpt, seen) {
- if (seen == val) {
- if (variable->cb_rm)
- variable->cb_rm(name, cpt);
- xbt_dynar_cursor_rm(variable->content, &cpt);
- return;
- }
- }
-
- THROWF(not_found_error, 0,
- "Can't remove the value %d of config element %s: value not found.",
- val, name);
-}
-
-/** @brief Remove the provided \e val double value from a variable
- *
- * \arg cfg the config set
- * \arg name the name of the variable
- * \arg val the value to be removed
- */
-
-void xbt_cfg_rm_double(xbt_cfg_t cfg, const char *name, double val)
-{
- xbt_cfgelm_t variable;
- unsigned int cpt;
- double seen;
-
- variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_double);
-
- if (xbt_dynar_length(variable->content) == variable->min)
- THROWF(mismatch_error, 0,
- "Cannot remove value %f from the config element %s since it's already at its minimal size (=%d)",
- val, name, variable->min);
-
- xbt_dynar_foreach(variable->content, cpt, seen) {
- if (seen == val) {
- xbt_dynar_cursor_rm(variable->content, &cpt);
- if (variable->cb_rm)
- variable->cb_rm(name, cpt);
- return;
- }
- }
-
- THROWF(not_found_error, 0,
- "Can't remove the value %f of config element %s: value not found.",
- val, name);
-}
-
-/** @brief Remove the provided \e val string value from a variable
- *
- * \arg cfg the config set
- * \arg name the name of the variable
- * \arg val the value of the string which will be removed
- */
-void xbt_cfg_rm_string(xbt_cfg_t cfg, const char *name, const char *val)
-{
- xbt_cfgelm_t variable;
- unsigned int cpt;
- char *seen;
-
- variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_string);
-
- if (xbt_dynar_length(variable->content) == variable->min)
- THROWF(mismatch_error, 0,
- "Cannot remove value %s from the config element %s since it's already at its minimal size (=%d)",
- name, val, variable->min);
-
- xbt_dynar_foreach(variable->content, cpt, seen) {
- if (!strcpy(seen, val)) {
- if (variable->cb_rm)
- variable->cb_rm(name, cpt);
- xbt_dynar_cursor_rm(variable->content, &cpt);
- return;
- }
- }
-
- THROWF(not_found_error, 0,
- "Can't remove the value %s of config element %s: value not found.",
- val, name);
-}
-
-/** @brief Remove the provided \e val peer value from a variable
- *
- * \arg cfg the config set
- * \arg name the name of the variable
- * \arg peer the peername
- * \arg port the port number
- */
-
-void
-xbt_cfg_rm_peer(xbt_cfg_t cfg, const char *name, const char *peer,
- int port)
-{
- xbt_cfgelm_t variable;
- unsigned int cpt;
- xbt_peer_t seen;
-
- variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_peer);
-
- if (xbt_dynar_length(variable->content) == variable->min)
- THROWF(mismatch_error, 0,
- "Cannot remove value %s:%d from the config element %s since it's already at its minimal size (=%d)",
- peer, port, name, variable->min);
-
- xbt_dynar_foreach(variable->content, cpt, seen) {
- if (!strcpy(seen->name, peer) && seen->port == port) {
- if (variable->cb_rm)
- variable->cb_rm(name, cpt);
- xbt_dynar_cursor_rm(variable->content, &cpt);
- return;
- }
- }
-
- THROWF(not_found_error, 0,
- "Can't remove the value %s:%d of config element %s: value not found.",
- peer, port, name);
-}
-
-/** @brief Remove the \e pos th value from the provided variable */
-
-void xbt_cfg_rm_at(xbt_cfg_t cfg, const char *name, int pos)
-{
-
- xbt_cfgelm_t variable;
-
- variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_any);
-
- if (xbt_dynar_length(variable->content) == variable->min)
- THROWF(mismatch_error, 0,
- "Cannot remove %dth value from the config element %s since it's already at its minimal size (=%d)",
- pos, name, variable->min);
-
- if (variable->cb_rm)
- variable->cb_rm(name, pos);
- xbt_dynar_remove_at(variable->content, pos, NULL);
-}
-
-/** @brief Remove all the values from a variable
- *
- * \arg cfg the config set
- * \arg name the name of the variable
- */
-
-void xbt_cfg_empty(xbt_cfg_t cfg, const char *name)
-{
- xbt_cfgelm_t variable = NULL;
- xbt_ex_t e;
-
- TRY {
- variable = xbt_dict_get((xbt_dict_t) cfg, name);
- }
- CATCH(e) {
- if (e.category != not_found_error)
- RETHROW;
-
- xbt_ex_free(e);
- THROWF(not_found_error, 0,
- "Can't empty '%s' since this config element does not exist",
- name);
- }
-
- if (variable) {
- if (variable->cb_rm) {
- unsigned int cpt;
- void *ignored;
- xbt_dynar_foreach(variable->content, cpt, ignored) {
- variable->cb_rm(name, cpt);
- }
- }
- xbt_dynar_reset(variable->content);
- }
-}
-/*
- * Say if the value is the default value
- */
-int xbt_cfg_is_default_value(xbt_cfg_t cfg, const char *name)
-{
- xbt_cfgelm_t variable = xbt_cfgelm_get(cfg, name, xbt_cfgelm_any);