Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Platform generation : modify some interface
[simgrid.git] / src / surf / platf_generator.c
1
2
3 #include <simgrid/platf_generator.h>
4 #include "platf_generator_private.h"
5 #include <xbt.h>
6 #include <xbt/graph.h>
7 #include <xbt/RngStream.h>
8
9 static xbt_graph_t platform_graph = NULL;
10
11 static RngStream rng_stream = NULL;
12
13 void platf_random_seed(unsigned long seed[6]) {
14
15   if(rng_stream == NULL) {
16     //stream not created yet, we do it now
17     rng_stream = RngStream_CreateStream(NULL);
18   }
19   if(seed != NULL) {
20     RngStream_SetSeed(rng_stream, seed);
21   }
22 }
23
24 void platf_graph_init(int node_count) {
25   int i;
26   platform_graph = xbt_graph_new_graph(TRUE, NULL);
27   if(rng_stream == NULL) {
28     rng_stream = RngStream_CreateStream(NULL);
29   }
30
31   for(i=0 ; i<node_count ; i++) {
32     context_node_t node_data = NULL;
33     node_data = xbt_new(s_context_node_t, 1);
34     node_data->x = 0;
35     node_data->y = 0;
36     node_data->degree = 0;
37     node_data->kind = ROUTER;
38     xbt_graph_new_node(platform_graph, (void*) node_data);
39   }
40 }
41
42 void platf_graph_uniform(int node_count) {
43   xbt_dynar_t dynar_nodes = NULL;
44   xbt_node_t graph_node = NULL;
45   context_node_t node_data = NULL;
46   unsigned int i;
47   platf_graph_init(node_count);
48   dynar_nodes = xbt_graph_get_nodes(platform_graph);
49   xbt_dynar_foreach(dynar_nodes, i, graph_node) {
50     node_data = (context_node_t) xbt_graph_node_get_data(graph_node);
51     node_data->x = RngStream_RandU01(rng_stream);
52     node_data->y = RngStream_RandU01(rng_stream);
53   }
54 }