From: Martin Quinson Date: Tue, 5 Apr 2016 05:09:19 +0000 (+0200) Subject: xbt_config: kill an unused feature: multivalued variables X-Git-Tag: v3_13~180^2~1 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/66ad9903ba702428fa0ba27d22259bd0dd50c03b?hp=2db7ca916c24c9f6da047de60550dda47690e572 xbt_config: kill an unused feature: multivalued variables --- diff --git a/include/xbt/config.h b/include/xbt/config.h index ed4c4ef1ce..cf60d5eec1 100644 --- a/include/xbt/config.h +++ b/include/xbt/config.h @@ -148,7 +148,7 @@ XBT_PUBLIC(void) xbt_cfg_dump(const char *name, const char *indent, xbt_cfg_t cf * @{ */ XBT_PUBLIC(void) xbt_cfg_register(xbt_cfg_t * cfg, const char *name, const char *description, - e_xbt_cfgelm_type_t type, int min, int max, xbt_cfg_cb_t cb_set); + e_xbt_cfgelm_type_t type, int min, xbt_cfg_cb_t cb_set); XBT_PUBLIC(void) xbt_cfg_register_double (const char *name, const char *desc, double default_val, xbt_cfg_cb_t cb_set); XBT_PUBLIC(void) xbt_cfg_register_int (const char *name, const char *desc, int default_val, xbt_cfg_cb_t cb_set); XBT_PUBLIC(void) xbt_cfg_register_string (const char *name, const char *desc, const char*default_val,xbt_cfg_cb_t cb_set); diff --git a/src/simgrid/sg_config.cpp b/src/simgrid/sg_config.cpp index c9bc0aac4d..9919b8bb8e 100644 --- a/src/simgrid/sg_config.cpp +++ b/src/simgrid/sg_config.cpp @@ -346,7 +346,8 @@ static void _sg_cfg_cb__test_sleep(const char *name, int pos){ static void _sg_cfg_cb__surf_path(const char *name, int pos) { char *path = xbt_strdup(xbt_cfg_get_string_at(simgrid_config, name, pos)); - xbt_dynar_push(surf_path, &path); + if (path[0]) // ignore "" + xbt_dynar_push(surf_path, &path); } /* callback to decide if we want to use the model-checking */ @@ -475,7 +476,7 @@ void sg_config_init(int *argc, char **argv) /* Plugins configuration */ describe_model(description, surf_plugin_description, "plugin", "The plugins"); - xbt_cfg_register(&simgrid_config, "plugin", description, xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__plugin); + xbt_cfg_register(&simgrid_config, "plugin", description, xbt_cfgelm_string, 0, &_sg_cfg_cb__plugin); describe_model(description, surf_cpu_model_description, "model", "The model to use for the CPU"); xbt_cfg_register_string("cpu/model", description, "Cas01", &_sg_cfg_cb__cpu_model); @@ -521,8 +522,7 @@ void sg_config_init(int *argc, char **argv) NAN, _sg_cfg_cb__weight_S); /* real default for "network/weight_S" is set in network_*.cpp */ /* Inclusion path */ - xbt_cfg_register(&simgrid_config, "path", "Lookup path for inclusions in platform and deployment XML files", - xbt_cfgelm_string, 1, 0, _sg_cfg_cb__surf_path); + xbt_cfg_register_string("path", "Lookup path for inclusions in platform and deployment XML files", "", _sg_cfg_cb__surf_path); xbt_cfg_register_boolean("cpu/maxmin_selective_update", "Update the constraint set propagating recursively to others constraints (off by default when optim is set to lazy)", @@ -531,7 +531,7 @@ void sg_config_init(int *argc, char **argv) "Update the constraint set propagating recursively to others constraints (off by default when optim is set to lazy)", "no", NULL); /* Replay (this part is enabled even if MC it disabled) */ - xbt_cfg_register(&simgrid_config, "model-check/replay", "Enable replay mode with the given path", xbt_cfgelm_string, 0, 1, _sg_cfg_cb_model_check_replay); + xbt_cfg_register(&simgrid_config, "model-check/replay", "Enable replay mode with the given path", xbt_cfgelm_string, 0, _sg_cfg_cb_model_check_replay); #if HAVE_MC /* do model-checking-record */ @@ -665,49 +665,38 @@ void sg_config_init(int *argc, char **argv) xbt_cfg_register_string("smpi/coll_selector", "Which collective selector to use", "default", NULL); - xbt_cfg_register(&simgrid_config, "smpi/gather", - "Which collective to use for gather", - xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_gather); + xbt_cfg_register(&simgrid_config, "smpi/gather", "Which collective to use for gather", + xbt_cfgelm_string, 0, &_sg_cfg_cb__coll_gather); - xbt_cfg_register(&simgrid_config, "smpi/allgather", - "Which collective to use for allgather", - xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_allgather); + xbt_cfg_register(&simgrid_config, "smpi/allgather", "Which collective to use for allgather", + xbt_cfgelm_string, 0, &_sg_cfg_cb__coll_allgather); - xbt_cfg_register(&simgrid_config, "smpi/barrier", - "Which collective to use for barrier", - xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_barrier); + xbt_cfg_register(&simgrid_config, "smpi/barrier", "Which collective to use for barrier", + xbt_cfgelm_string, 0, &_sg_cfg_cb__coll_barrier); - xbt_cfg_register(&simgrid_config, "smpi/reduce_scatter", - "Which collective to use for reduce_scatter", - xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_reduce_scatter); + xbt_cfg_register(&simgrid_config, "smpi/reduce_scatter", "Which collective to use for reduce_scatter", + xbt_cfgelm_string, 0, &_sg_cfg_cb__coll_reduce_scatter); - xbt_cfg_register(&simgrid_config, "smpi/scatter", - "Which collective to use for scatter", - xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_scatter); + xbt_cfg_register(&simgrid_config, "smpi/scatter", "Which collective to use for scatter", + xbt_cfgelm_string, 0, &_sg_cfg_cb__coll_scatter); - xbt_cfg_register(&simgrid_config, "smpi/allgatherv", - "Which collective to use for allgatherv", - xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_allgatherv); + xbt_cfg_register(&simgrid_config, "smpi/allgatherv", "Which collective to use for allgatherv", + xbt_cfgelm_string, 0, &_sg_cfg_cb__coll_allgatherv); - xbt_cfg_register(&simgrid_config, "smpi/allreduce", - "Which collective to use for allreduce", - xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_allreduce); + xbt_cfg_register(&simgrid_config, "smpi/allreduce", "Which collective to use for allreduce", + xbt_cfgelm_string, 0, &_sg_cfg_cb__coll_allreduce); - xbt_cfg_register(&simgrid_config, "smpi/alltoall", - "Which collective to use for alltoall", - xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_alltoall); + xbt_cfg_register(&simgrid_config, "smpi/alltoall", "Which collective to use for alltoall", + xbt_cfgelm_string, 0, &_sg_cfg_cb__coll_alltoall); - xbt_cfg_register(&simgrid_config, "smpi/alltoallv", - "Which collective to use for alltoallv", - xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_alltoallv); + xbt_cfg_register(&simgrid_config, "smpi/alltoallv", "Which collective to use for alltoallv", + xbt_cfgelm_string, 0, &_sg_cfg_cb__coll_alltoallv); - xbt_cfg_register(&simgrid_config, "smpi/bcast", - "Which collective to use for bcast", - xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_bcast); + xbt_cfg_register(&simgrid_config, "smpi/bcast", "Which collective to use for bcast", + xbt_cfgelm_string, 0, &_sg_cfg_cb__coll_bcast); - xbt_cfg_register(&simgrid_config, "smpi/reduce", - "Which collective to use for reduce", - xbt_cfgelm_string, 0, 1, &_sg_cfg_cb__coll_reduce); + xbt_cfg_register(&simgrid_config, "smpi/reduce", "Which collective to use for reduce", + xbt_cfgelm_string, 0, &_sg_cfg_cb__coll_reduce); #endif // HAVE_SMPI xbt_cfg_register_boolean("exception/cutpath", "Whether to cut all path information from call traces, used e.g. in exceptions.", "no", NULL); diff --git a/src/xbt/config.c b/src/xbt/config.c index 1a5bb63284..b84c29ec44 100644 --- a/src/xbt/config.c +++ b/src/xbt/config.c @@ -33,7 +33,7 @@ typedef struct { /* Allowed type of the variable */ e_xbt_cfgelm_type_t type; - int min, max; + int min; unsigned isdefault:1; /* Callbacks */ @@ -87,7 +87,7 @@ void xbt_cfg_cpy(xbt_cfg_t tocopy, xbt_cfg_t * whereto) xbt_assert(tocopy, "cannot copy NULL config"); xbt_dict_foreach((xbt_dict_t) tocopy, cursor, name, variable) { - xbt_cfg_register(whereto, name, variable->desc, variable->type, variable->min, variable->max, variable->cb_set); + xbt_cfg_register(whereto, name, variable->desc, variable->type, variable->min, variable->cb_set); } } @@ -123,8 +123,8 @@ void xbt_cfg_dump(const char *name, const char *indent, xbt_cfg_t cfg) printf("%s %s:", indent, key); size = xbt_dynar_length(variable->content); - printf ("%d_to_%d_%s. Actual size=%d. postset=%p, List of values:\n", - variable->min, variable->max, xbt_cfgelm_type_name[variable->type], size, variable->cb_set); + printf ("%d_%s. Actual size=%d. postset=%p, List of values:\n", + variable->min, xbt_cfgelm_type_name[variable->type], size, variable->cb_set); switch (variable->type) { case xbt_cfgelm_int: @@ -190,12 +190,10 @@ void xbt_cfgelm_free(void *data) * @param name the name of the config element * @param desc a description for this item (used by xbt_cfg_help()) * @param type the type of the config element - * @param min the minimum number of values for this config element - * @param max the maximum number of values for this config element + * @param min the minimum number of values for this config element (0 for optional elements) * @param cb_set callback function called when a value is set */ -void xbt_cfg_register(xbt_cfg_t * cfg, const char *name, const char *desc, e_xbt_cfgelm_type_t type, int min, - int max, xbt_cfg_cb_t cb_set) +void xbt_cfg_register(xbt_cfg_t * cfg, const char *name, const char *desc, e_xbt_cfgelm_type_t type, int min, xbt_cfg_cb_t cb_set) { if (*cfg == NULL) *cfg = xbt_cfg_new(); @@ -207,13 +205,12 @@ void xbt_cfg_register(xbt_cfg_t * cfg, const char *name, const char *desc, e_xbt xbt_assert(NULL == res, "Refusing to register the config element '%s' twice.", name); res = xbt_new(s_xbt_cfgelm_t, 1); - XBT_DEBUG("Register cfg elm %s (%s) (%d to %d %s (=%d) @%p in set %p)", - name, desc, min, max, xbt_cfgelm_type_name[type], (int)type, res, *cfg); + XBT_DEBUG("Register cfg elm %s (%s) (%d %s (=%d) @%p in set %p)", + name, desc, min, xbt_cfgelm_type_name[type], (int)type, res, *cfg); res->desc = xbt_strdup(desc); res->type = type; res->min = min; - res->max = max; res->cb_set = cb_set; res->isdefault = 1; @@ -238,19 +235,19 @@ void xbt_cfg_register(xbt_cfg_t * cfg, const char *name, const char *desc, e_xbt } void xbt_cfg_register_double(const char *name, const char *desc, double default_value,xbt_cfg_cb_t cb_set){ - xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_double,1,1,cb_set); + xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_double,1,cb_set); xbt_cfg_setdefault_double(name, default_value); } void xbt_cfg_register_int(const char *name, const char *desc, int default_value,xbt_cfg_cb_t cb_set){ - xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_int,1,1,cb_set); + xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_int,1,cb_set); xbt_cfg_setdefault_int(name, default_value); } void xbt_cfg_register_string(const char *name, const char *desc, const char *default_value, xbt_cfg_cb_t cb_set){ - xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_string,1,1,cb_set); + xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_string,1,cb_set); xbt_cfg_setdefault_string(name, default_value); } void xbt_cfg_register_boolean(const char *name, const char *desc, const char*default_value,xbt_cfg_cb_t cb_set){ - xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_boolean,1,1,cb_set); + xbt_cfg_register(&simgrid_config,name,desc,xbt_cfgelm_boolean,1,cb_set); xbt_cfg_setdefault_boolean(name, default_value); } @@ -271,7 +268,6 @@ void xbt_cfg_register_alias(const char *newname, const char *oldname) res->desc = bprintf("Deprecated alias for %s",newname); res->type = xbt_cfgelm_alias; res->min = 1; - res->max = 1; res->isdefault = 1; res->content = (xbt_dynar_t)newname; @@ -295,7 +291,7 @@ void xbt_cfg_register_str(xbt_cfg_t * cfg, const char *entry) char *entrycpy = xbt_strdup(entry); char *tok; - int min, max; + int min; e_xbt_cfgelm_type_t type; XBT_DEBUG("Register string '%s'", entry); @@ -306,13 +302,6 @@ void xbt_cfg_register_str(xbt_cfg_t * cfg, const char *entry) min = strtol(tok, &tok, 10); xbt_assert(tok, "Invalid minimum in config element descriptor %s", entry); - xbt_assert(strcmp(tok, "_to_"), "Invalid config element descriptor : %s%s", - entry, "; Should be :_to__"); - tok += strlen("_to_"); - - max = strtol(tok, &tok, 10); - xbt_assert(tok, "Invalid maximum in config element descriptor %s", entry); - xbt_assert(*tok == '_', "Invalid config element descriptor: %s%s", entry, "; Should be :_to__"); tok++; @@ -321,7 +310,7 @@ void xbt_cfg_register_str(xbt_cfg_t * cfg, const char *entry) xbt_assert(type < xbt_cfgelm_type_count, "Invalid type in config element descriptor: %s%s", entry, "; Should be one of 'string', 'int' or 'double'."); - xbt_cfg_register(cfg, entrycpy, NULL, type, min, max, NULL); + xbt_cfg_register(cfg, entrycpy, NULL, type, min, NULL); free(entrycpy); /* strdup'ed by dict mechanism, but cannot be const */ } @@ -369,13 +358,8 @@ void xbt_cfg_help(xbt_cfg_t cfg) printf(" %s: %s\n", name, variable->desc); printf(" Type: %s; ", xbt_cfgelm_type_name[variable->type]); - if (variable->min != 1 || variable->max != 1) { - printf("Arity: min:%d to max:", variable->min); - if (variable->max == 0) - printf("(no bound); "); - else - printf("%d; ", variable->max); - } + if (variable->min != 1) + printf("Arity: min:%d", variable->min); size = xbt_dynar_length(variable->content); printf("Current value%s: ", (size <= 1 ? "" : "s")); @@ -405,6 +389,7 @@ void xbt_cfg_help(xbt_cfg_t cfg) } default: printf("Invalid type!!%s", sep); + break; } } } @@ -434,12 +419,6 @@ void xbt_cfg_check(void) THROWF(mismatch_error, 0, "Config elem %s theoretically accepts %d %s, but has a default of %d values.", name, variable->min, xbt_cfgelm_type_name[variable->type], size); } - - if (variable->max > 0 && variable->max < size) { - xbt_dict_cursor_free(&cursor); - THROWF(mismatch_error, 0, "Config elem %s accepts at most %d %s, but there is %d values.", - name, variable->max, xbt_cfgelm_type_name[variable->type], size); - } } xbt_dict_cursor_free(&cursor); } @@ -758,15 +737,7 @@ void xbt_cfg_set_int(const char *name, int val) { xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_int); - if (variable->max == 1) { - xbt_dynar_set(variable->content, 0, &val); - } else { - if (variable->max && xbt_dynar_length(variable->content) == (unsigned long) variable->max) - THROWF(mismatch_error, 0, "Cannot add value %d to the config element %s since it's already full (size=%d)", - val, name, variable->max); - - xbt_dynar_push(variable->content, &val); - } + xbt_dynar_set(variable->content, 0, &val); if (variable->cb_set) variable->cb_set(name, xbt_dynar_length(variable->content) - 1); @@ -783,15 +754,7 @@ void xbt_cfg_set_double(const char *name, double val) { xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_double); - if (variable->max == 1) { - xbt_dynar_set(variable->content, 0, &val); - } else { - if (variable->max && xbt_dynar_length(variable->content) == variable->max) - THROWF(mismatch_error, 0, "Cannot add value %f to the config element %s since it's already full (size=%d)", - val, name, variable->max); - - xbt_dynar_push(variable->content, &val); - } + xbt_dynar_set(variable->content, 0, &val); if (variable->cb_set) variable->cb_set(name, xbt_dynar_length(variable->content) - 1); @@ -810,22 +773,13 @@ void xbt_cfg_set_string(const char *name, const char *val) char *newval = xbt_strdup(val); xbt_cfgelm_t variable = xbt_cfgelm_get(simgrid_config, name, xbt_cfgelm_string); - if (variable->max == 1) { - if (!xbt_dynar_is_empty(variable->content)) { - char *sval = xbt_dynar_get_as(variable->content, 0, char *); - free(sval); - } - - xbt_dynar_set(variable->content, 0, &newval); - } else { - if (variable->max - && xbt_dynar_length(variable->content) == variable->max) - THROWF(mismatch_error, 0, "Cannot add value %s to the config element %s since it's already full (size=%d)", - name, val, variable->max); - - xbt_dynar_push(variable->content, &newval); + if (!xbt_dynar_is_empty(variable->content)) { + char *sval = xbt_dynar_get_as(variable->content, 0, char *); + free(sval); } + xbt_dynar_set(variable->content, 0, &newval); + if (variable->cb_set) variable->cb_set(name, xbt_dynar_length(variable->content) - 1); variable->isdefault = 0; @@ -855,15 +809,7 @@ void xbt_cfg_set_boolean(const char *name, const char *val) xbt_die("Value of option '%s' not valid. Should be a boolean (yes,no,on,off,true,false,0,1)", val); } - if (variable->max == 1) { - xbt_dynar_set(variable->content, 0, &bval); - } else { - if (variable->max && xbt_dynar_length(variable->content) == (unsigned long) variable->max) - THROWF(mismatch_error, 0, "Cannot add value %s to the config element %s since it's already full (size=%d)", - val, name, variable->max); - - xbt_dynar_push(variable->content, &bval); - } + xbt_dynar_set(variable->content, 0, &bval); if (variable->cb_set) variable->cb_set(name, xbt_dynar_length(variable->content) - 1); @@ -1031,9 +977,9 @@ static xbt_cfg_t make_set() xbt_cfg_t set = NULL; xbt_log_threshold_set(&_XBT_LOGV(xbt_cfg), xbt_log_priority_critical); - xbt_cfg_register_str(&set, "speed:1_to_2_int"); - xbt_cfg_register_str(&set, "peername:1_to_1_string"); - xbt_cfg_register_str(&set, "user:1_to_10_string"); + xbt_cfg_register_str(&set, "speed:1_int"); + xbt_cfg_register_str(&set, "peername:1_string"); + xbt_cfg_register_str(&set, "user:1_string"); return set; } /* end_of_make_set */ @@ -1044,7 +990,7 @@ XBT_TEST_UNIT("memuse", test_config_memuse, "Alloc and free a config set") { simgrid_config = make_set(); xbt_test_add("Alloc and free a config set"); - xbt_cfg_set_parse("peername:veloce user:mquinson\nuser:oaumage\tuser:alegrand"); + xbt_cfg_set_parse("peername:veloce user:bidule"); xbt_cfg_free(&simgrid_config); } @@ -1064,9 +1010,9 @@ XBT_TEST_UNIT("validation", test_config_validation, "Validation tests") } xbt_test_add("Having too much values of 'speed'"); - xbt_cfg_set_parse("peername:toto:42 user:alegrand"); + xbt_cfg_set_parse("peername:toto:42 user:machin"); TRY { - xbt_cfg_set_parse("speed:42 speed:24 speed:34"); + xbt_cfg_set_parse("speed:42 speed:24"); } CATCH(e) { if (e.category != mismatch_error || strncmp(e.msg, "Cannot add value 34 to the config elem speed", strlen("Config elem speed needs"))) @@ -1091,29 +1037,6 @@ XBT_TEST_UNIT("use", test_config_use, "Data retrieving tests") xbt_test_fail("Speed value = %d, I expected 42", ival); } - xbt_test_add("Get multiple values"); - { - /* get_multiple_value */ - xbt_dynar_t dyn; - - xbt_cfg_set_parse("peername:veloce user:foo\nuser:bar\tuser:toto"); - xbt_cfg_set_parse("speed:42"); - xbt_cfg_check(); - dyn = xbt_cfg_get_dynar("user"); - - if (xbt_dynar_length(dyn) != 3) - xbt_test_fail("Dynar length = %lu, I expected 3", xbt_dynar_length(dyn)); - - if (strcmp(xbt_dynar_get_as(dyn, 0, char *), "foo")) - xbt_test_fail("Dynar[0] = %s, I expected foo", xbt_dynar_get_as(dyn, 0, char *)); - - if (strcmp(xbt_dynar_get_as(dyn, 1, char *), "bar")) - xbt_test_fail("Dynar[1] = %s, I expected bar", xbt_dynar_get_as(dyn, 1, char *)); - - if (strcmp(xbt_dynar_get_as(dyn, 2, char *), "toto")) - xbt_test_fail("Dynar[2] = %s, I expected toto", xbt_dynar_get_as(dyn, 2, char *)); - } - xbt_test_add("Access to a non-existant entry"); { xbt_ex_t e;