+ xbt_assert2(xbt_dict_get_or_null
+ (traces_set_list, A_surfxml_trace_c_connect_trace),
+ "Cannot connect trace %s to %s: trace unknown",
+ A_surfxml_trace_c_connect_trace,
+ A_surfxml_trace_c_connect_element);
+
+ switch (A_surfxml_trace_c_connect_kind) {
+ case A_surfxml_trace_c_connect_kind_HOST_AVAIL:
+ xbt_dict_set(trace_connect_list_host_avail,
+ A_surfxml_trace_c_connect_trace,
+ xbt_strdup(A_surfxml_trace_c_connect_element), free);
+ break;
+ case A_surfxml_trace_c_connect_kind_POWER:
+ xbt_dict_set(trace_connect_list_power, A_surfxml_trace_c_connect_trace,
+ xbt_strdup(A_surfxml_trace_c_connect_element), free);
+ break;
+ case A_surfxml_trace_c_connect_kind_LINK_AVAIL:
+ xbt_dict_set(trace_connect_list_link_avail,
+ A_surfxml_trace_c_connect_trace,
+ xbt_strdup(A_surfxml_trace_c_connect_element), free);
+ break;
+ case A_surfxml_trace_c_connect_kind_BANDWIDTH:
+ xbt_dict_set(trace_connect_list_bandwidth,
+ A_surfxml_trace_c_connect_trace,
+ xbt_strdup(A_surfxml_trace_c_connect_element), free);
+ break;
+ case A_surfxml_trace_c_connect_kind_LATENCY:
+ xbt_dict_set(trace_connect_list_latency, A_surfxml_trace_c_connect_trace,
+ xbt_strdup(A_surfxml_trace_c_connect_element), free);
+ break;
+ default:
+ xbt_die(bprintf("Cannot connect trace %s to %s: kind of trace unknown",
+ A_surfxml_trace_c_connect_trace,
+ A_surfxml_trace_c_connect_element));
+ }
+}
+
+/* Random tag functions */
+
+double get_cpu_power(const char *power)
+{
+ double power_scale = 0.0;
+ const char *p, *q;
+ char *generator;
+ random_data_t random = NULL;
+ /* randomness is inserted like this: power="$rand(my_random)" */
+ if (((p = strstr(power, "$rand(")) != NULL)
+ && ((q = strstr(power, ")")) != NULL)) {
+ if (p < q) {
+ generator = xbt_malloc(q - (p + 6) + 1);
+ memcpy(generator, p + 6, q - (p + 6));
+ generator[q - (p + 6)] = '\0';
+ xbt_assert1((random =
+ xbt_dict_get_or_null(random_data_list, generator)),
+ "Random generator %s undefined", generator);
+ power_scale = random_generate(random);