+static void routing_parse_Srandom(void)
+{
+ double mean, std, min, max, seed;
+ char *random_id = A_surfxml_random_id;
+ char *random_radical = A_surfxml_random_radical;
+ char *rd_name = NULL;
+ char *rd_value;
+ surf_parse_get_double(&mean,A_surfxml_random_mean);
+ surf_parse_get_double(&std,A_surfxml_random_std_deviation);
+ surf_parse_get_double(&min,A_surfxml_random_min);
+ surf_parse_get_double(&max,A_surfxml_random_max);
+ surf_parse_get_double(&seed,A_surfxml_random_seed);
+
+ double res = 0;
+ int i = 0;
+ random_data_t random = xbt_new0(s_random_data_t, 1);
+ char *tmpbuf;
+
+ xbt_dynar_t radical_elements;
+ unsigned int iter;
+ char *groups;
+ int start, end;
+ xbt_dynar_t radical_ends;
+
+ random->generator = A_surfxml_random_generator;
+ random->seed = seed;
+ random->min = min;
+ random->max = max;
+
+ /* Check user stupidities */
+ if (max < min)
+ THROW2(arg_error, 0, "random->max < random->min (%f < %f)", max, min);
+ if (mean < min)
+ THROW2(arg_error, 0, "random->mean < random->min (%f < %f)", mean,
+ min);
+ if (mean > max)
+ THROW2(arg_error, 0, "random->mean > random->max (%f > %f)", mean,
+ max);
+
+ /* normalize the mean and standard deviation before storing */
+ random->mean = (mean - min) / (max - min);
+ random->std = std / (max - min);
+
+ if (random->mean * (1 - random->mean) < random->std * random->std)
+ THROW2(arg_error, 0, "Invalid mean and standard deviation (%f and %f)",
+ random->mean, random->std);
+
+ XBT_DEBUG("id = '%s' min = '%f' max = '%f' mean = '%f' std_deviatinon = '%f' generator = '%d' seed = '%ld' radical = '%s'",
+ random_id,
+ random->min,
+ random->max,
+ random->mean,
+ random->std,
+ random->generator,
+ random->seed,
+ random_radical);
+
+ if(xbt_dict_size(random_value)==0)
+ random_value = xbt_dict_new();
+
+ if(!strcmp(random_radical,""))
+ {
+ res = random_generate(random);
+ rd_value = bprintf("%f",res);
+ xbt_dict_set(random_value, random_id, rd_value, free);
+ }
+ else
+ {
+ radical_elements = xbt_str_split(random_radical, ",");
+ xbt_dynar_foreach(radical_elements, iter, groups) {
+ radical_ends = xbt_str_split(groups, "-");
+ switch (xbt_dynar_length(radical_ends)) {
+ case 1:
+ xbt_assert1(!xbt_dict_get_or_null(random_value,random_id),"Custom Random '%s' already exists !",random_id);
+ res = random_generate(random);
+ tmpbuf = bprintf("%s%d",random_id,atoi(xbt_dynar_getfirst_as(radical_ends,char *)));
+ xbt_dict_set(random_value, tmpbuf, bprintf("%f",res), free);
+ xbt_free(tmpbuf);
+ break;
+
+ case 2: surf_parse_get_int(&start,
+ xbt_dynar_get_as(radical_ends, 0, char *));
+ surf_parse_get_int(&end, xbt_dynar_get_as(radical_ends, 1, char *));
+ for (i = start; i <= end; i++) {
+ xbt_assert1(!xbt_dict_get_or_null(random_value,random_id),"Custom Random '%s' already exists !",bprintf("%s%d",random_id,i));
+ res = random_generate(random);
+ tmpbuf = bprintf("%s%d",random_id,i);
+ xbt_dict_set(random_value, tmpbuf, bprintf("%f",res), free);
+ xbt_free(tmpbuf);
+ }
+ break;
+ default:
+ XBT_INFO("Malformed radical");
+ }
+ res = random_generate(random);
+ rd_name = bprintf("%s_router",random_id);
+ rd_value = bprintf("%f",res);
+ xbt_dict_set(random_value, rd_name, rd_value, free);
+
+ xbt_dynar_free(&radical_ends);
+ }
+ free(rd_name);
+ xbt_dynar_free(&radical_elements);
+ }
+}
+
+static void routing_parse_Erandom(void)
+{
+ xbt_dict_cursor_t cursor = NULL;
+ char *key;
+ char *elem;
+
+ xbt_dict_foreach(random_value, cursor, key, elem) {
+ XBT_DEBUG("%s = %s",key,elem);
+ }
+
+}
+