Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
xbt_config: kill an unused feature: multivalued variables
authorMartin Quinson <martin.quinson@loria.fr>
Tue, 5 Apr 2016 05:09:19 +0000 (07:09 +0200)
committerMartin Quinson <martin.quinson@loria.fr>
Tue, 5 Apr 2016 05:09:19 +0000 (07:09 +0200)
include/xbt/config.h
src/simgrid/sg_config.cpp
src/xbt/config.c

index ed4c4ef..cf60d5e 100644 (file)
@@ -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);
index c9bc0aa..9919b8b 100644 (file)
@@ -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);
index 1a5bb63..b84c29e 100644 (file)
@@ -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 <name>:<min nb>_to_<max nb>_<type>");
-  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 <name>:<min nb>_to_<max nb>_<type>");
   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;