Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Sanitize the way surf options are declared: in surf_config not dupplicated in simix...
[simgrid.git] / src / simdag / sd_global.c
index a2caf4b..431dae5 100644 (file)
@@ -21,179 +21,10 @@ SD_global_t sd_global = NULL;
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
-static int _sd_init_status = 0; /* 0: beginning of time; 
-                                   1: pre-inited (cfg_set created); 
-                                   2: inited (running) */
-static xbt_cfg_t _sd_cfg_set = NULL;
-
-/* callback of the workstation_model variable */
-static void _sd_cfg_cb__workstation_model(const char *name, int pos)
-{
-  char *val;
-
-  xbt_assert0(_sd_init_status < 2,
-              "Cannot change the model after the initialization");
-
-  val = xbt_cfg_get_string(_sd_cfg_set, name);
-  find_model_description(surf_workstation_model_description, val);
-}
-
-/* callback of the cpu_model variable */
-static void _sd_cfg_cb__cpu_model(const char *name, int pos)
-{
-  char *val;
-
-  xbt_assert0(_sd_init_status < 2,
-              "Cannot change the model after the initialization");
-
-  val = xbt_cfg_get_string(_sd_cfg_set, name);
-  find_model_description(surf_cpu_model_description, val);
-}
-
-/* callback of the workstation_model variable */
-static void _sd_cfg_cb__network_model(const char *name, int pos)
-{
-  char *val;
-
-  xbt_assert0(_sd_init_status < 2,
-              "Cannot change the model after the initialization");
-
-  val = xbt_cfg_get_string(_sd_cfg_set, name);
-  find_model_description(surf_network_model_description, val);
-}
-
 XBT_LOG_EXTERNAL_CATEGORY(sd_kernel);
 XBT_LOG_EXTERNAL_CATEGORY(sd_task);
 XBT_LOG_EXTERNAL_CATEGORY(sd_workstation);
 
-/* create the config set and register what should be */
-static void sd_config_init(void)
-{
-
-  if (_sd_init_status)
-    return;                     /* Already inited, nothing to do */
-
-  /* Connect our log channels: that must be done manually under windows */
-  XBT_LOG_CONNECT(sd_kernel, sd);
-  XBT_LOG_CONNECT(sd_task, sd);
-  XBT_LOG_CONNECT(sd_workstation, sd);
-
-  _sd_init_status = 1;
-  _sd_cfg_set = xbt_cfg_new();
-
-  xbt_cfg_register(_sd_cfg_set,
-                   "workstation_model", xbt_cfgelm_string, 1, 1,
-                   &_sd_cfg_cb__workstation_model, NULL);
-
-  xbt_cfg_register(_sd_cfg_set,
-                   "cpu_model", xbt_cfgelm_string, 1, 1,
-                   &_sd_cfg_cb__cpu_model, NULL);
-  xbt_cfg_register(_sd_cfg_set,
-                   "network_model", xbt_cfgelm_string, 1, 1,
-                   &_sd_cfg_cb__network_model, NULL);
-
-  xbt_cfg_set_string(_sd_cfg_set, "workstation_model", "ptask_L07");
-}
-
-static void sd_config_finalize(void)
-{
-
-  if (!_sd_init_status)
-    return;                     /* Not initialized yet. Nothing to do */
-
-  xbt_cfg_free(&_sd_cfg_set);
-  _sd_init_status = 0;
-}
-
-static void sd_config(const char *name, va_list pa)
-{
-  if (!_sd_init_status) {
-    sd_config_init();
-  }
-  xbt_cfg_set_vargs(_sd_cfg_set, name, pa);
-}
-
-
-static void __sd_config_helper(const char *name, ...)
-{
-  va_list pa;
-  va_start(pa, name);
-
-  sd_config(name, pa);
-
-  va_end(pa);
-}
-
-static void sd_cfg_control_set(const char *control_string)
-{
-  /* To split the string in commands, and the cursors */
-  xbt_dynar_t set_strings;
-  char *str;
-  unsigned int cpt;
-
-  if (!control_string)
-    return;
-  DEBUG1("Parse log settings '%s'", control_string);
-
-  /* split the string, and remove empty entries */
-  set_strings = xbt_str_split_quoted(control_string);
-
-  if (xbt_dynar_length(set_strings) == 0) {     /* vicious user! */
-    xbt_dynar_free(&set_strings);
-    return;
-  }
-  /* Parse each entry and either use it right now (if the category was already
-     created), or store it for further use */
-  xbt_dynar_foreach(set_strings, cpt, str) {
-    char *control_string, *control_string_sav, *name, *value;
-
-
-    control_string = control_string_sav = strdup(str);
-    control_string += strspn(control_string, " ");
-    name = control_string;
-    control_string += strcspn(str, ":=");
-    value = control_string;
-    *value = 0;
-    value++;
-
-    xbt_assert1(strlen(name) != 0, "Invalid name for configuration: '%s'",
-                name);
-    xbt_assert1(strlen(value) != 0,
-                "Invalid value for configuration: '%s'", value);
-    INFO2("setting '%s' to '%s'", name, value);
-
-    __sd_config_helper(name, value);
-
-    free(control_string_sav);
-  }
-  xbt_dynar_free(&set_strings);
-}
-
-static void sd_cfg_init(int *argc, char **argv)
-{
-  int i, j;
-  char *opt;
-
-  for (i = 1; i < *argc; i++) {
-    if (!strncmp(argv[i], "--cfg=", strlen("--cfg="))) {
-      opt = strchr(argv[i], '=');
-      opt++;
-
-      sd_cfg_control_set(opt);
-      DEBUG1("Did apply '%s' as config setting", opt);
-      /*remove this from argv */
-
-      for (j = i + 1; j < *argc; j++) {
-        argv[j - 1] = argv[j];
-      }
-
-      argv[j - 1] = NULL;
-      (*argc)--;
-      i--;                      /* compensate effect of next loop incrementation */
-    }
-  }
-}
-
 /**
  * \brief Initialises SD internal data
  *
@@ -211,6 +42,12 @@ void SD_init(int *argc, char **argv)
 
   xbt_assert0(!SD_INITIALISED(), "SD_init() already called");
 
+  /* Connect our log channels: that must be done manually under windows */
+  XBT_LOG_CONNECT(sd_kernel, sd);
+  XBT_LOG_CONNECT(sd_task, sd);
+  XBT_LOG_CONNECT(sd_workstation, sd);
+
+
   sd_global = xbt_new(s_SD_global_t, 1);
   sd_global->workstations = xbt_dict_new();
   sd_global->workstation_count = 0;
@@ -238,15 +75,15 @@ void SD_init(int *argc, char **argv)
   sd_global->task_number = 0;
 
   surf_init(argc, argv);
-  sd_cfg_init(argc, argv);
+  xbt_cfg_set_string(_surf_cfg_set, "workstation_model", "ptask_L07");
 }
 
 /**
  * \brief Reinits the application part of the simulation (experimental feature)
- * 
- * This function allows you to run several simulations on the same platform 
- * by resetting the part describing the application. 
- * 
+ *
+ * This function allows you to run several simulations on the same platform
+ * by resetting the part describing the application.
+ *
  * @warning: this function is still experimental and not perfect. For example,
  * the simulation clock (and traces usage) is not reset. So, do not use it if
  * you use traces in your simulation, and do not use absolute timing after using it.
@@ -304,7 +141,7 @@ void SD_application_reinit(void)
  *
  *     \include simgrid.dtd
  *
- * Here is a small example of such a platform: 
+ * Here is a small example of such a platform:
  *
  *     \include small_platform.xml
  */
@@ -314,73 +151,16 @@ void SD_create_environment(const char *platform_file)
   char *name = NULL;
   void *surf_workstation = NULL;
   void *surf_link = NULL;
-  char *workstation_model_name;
-  int workstation_id = -1;
 
   SD_CHECK_INIT_DONE();
 
   DEBUG0("SD_create_environment");
 
-  sd_config_init();
   surf_timer_model_init(platform_file);
-
-  workstation_model_name =
-    xbt_cfg_get_string(_sd_cfg_set, "workstation_model");
-
-  DEBUG1("Model : %s", workstation_model_name);
-  workstation_id =
-    find_model_description(surf_workstation_model_description,
-                           workstation_model_name);
-  if (!strcmp(workstation_model_name, "compound")) {
-    xbt_ex_t e;
-    char *network_model_name = NULL;
-    char *cpu_model_name = NULL;
-    int network_id = -1;
-    int cpu_id = -1;
-
-    TRY {
-      cpu_model_name = xbt_cfg_get_string(_sd_cfg_set, "cpu_model");
-    } CATCH(e) {
-      if (e.category == bound_error) {
-        xbt_assert0(0,
-                    "Set a cpu model to use with the 'compound' workstation model");
-        xbt_ex_free(e);
-      } else {
-        RETHROW;
-      }
-    }
-
-    TRY {
-      network_model_name = xbt_cfg_get_string(_sd_cfg_set, "network_model");
-    }
-    CATCH(e) {
-      if (e.category == bound_error) {
-        xbt_assert0(0,
-                    "Set a network model to use with the 'compound' workstation model");
-        xbt_ex_free(e);
-      } else {
-        RETHROW;
-      }
-    }
-
-    network_id =
-      find_model_description(surf_network_model_description,
-                             network_model_name);
-    cpu_id =
-      find_model_description(surf_cpu_model_description, cpu_model_name);
-
-    surf_cpu_model_description[cpu_id].model_init(platform_file);
-    surf_network_model_description[network_id].model_init(platform_file);
-  }
-
-  DEBUG0("Call workstation_model_init");
-  surf_workstation_model_description[workstation_id].model_init
-    (platform_file);
+  surf_config_models_setup(platform_file);
 
   parse_platform_file(platform_file);
 
-  _sd_init_status = 2;
-
   /* now let's create the SD wrappers for workstations and links */
   xbt_dict_foreach(workstation_set, cursor, name, surf_workstation) {
     __SD_workstation_create(surf_workstation, NULL);
@@ -401,7 +181,7 @@ void SD_create_environment(const char *platform_file)
  * The simulation will be stopped when its time reaches \a how_long,
  * when a watch point is reached, or when no more task can be executed.
  * Then you can call SD_simulate() again.
- * 
+ *
  * \param how_long maximum duration of the simulation (a negative value means no time limit)
  * \return a NULL-terminated array of \ref SD_task_t whose state has changed.
  * \see SD_task_schedule(), SD_task_watch()