Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Working on SimDag.
[simgrid.git] / src / simdag / sd_workstation.c
1 #include "simdag/simdag.h"
2 #include "xbt/dict.h"
3 #include "xbt/sysdep.h"
4 #include "private.h"
5
6 /* Creates a workstation.
7  */
8 SG_workstation_t SG_workstation_create(void *data, const char *name, double power,
9                                       double available_power) {
10   xbt_assert0(power >= 0 && available_power >= 0, "Invalid parameter"); /* or > 0 ? */
11
12   SG_workstation_t workstation = xbt_new0(s_SG_workstation_t, 1);
13   
14   workstation->data = data;
15   workstation->name = xbt_strdup(name);
16   /*workstation->power = power;
17   workstation->available_power = power;*/
18   /* TODO: route */
19
20   return workstation;
21 }
22
23 /* Returns a workstation given its name, or NULL if there is no such workstation.
24  */
25 SG_workstation_t SG_workstation_get_by_name(const char *name) {
26   xbt_assert0(sg_global != NULL, "SG_init not called yet");
27   xbt_assert0(name != NULL, "Invalid parameter");
28
29   return xbt_dict_get_or_null(sg_global->workstations, name);
30 }
31
32 /* Returns a NULL-terminated array of existing workstations.
33  */
34 SG_workstation_t*  SG_workstation_get_list(void) {
35   xbt_assert0(sg_global != NULL, "SG_init not called yet");
36   SG_workstation_t* array = xbt_new0(SG_workstation_t, sg_global->workstation_count + 1);
37   
38   xbt_dict_cursor_t cursor;
39   char *key;
40   void *data;
41   int i=0;
42
43   xbt_dict_foreach(sg_global->workstations,cursor,key,data) {
44     array[i++] = (SG_workstation_t) data;
45   }
46   array[i] = NULL;
47
48   return array;
49 }
50
51 /* Returns the number or workstations.
52  */
53 int SG_workstation_get_number(void) {
54   xbt_assert0(sg_global != NULL, "SG_init not called yet");
55   return sg_global->workstation_count;
56 }
57
58 /* Sets the data of a workstation.
59  */
60 void SG_workstation_set_data(SG_workstation_t workstation, void *data) {
61   xbt_assert0(workstation != NULL, "Invalid parameter");
62   workstation->data = data;
63 }
64
65 /* Returns the data of a workstation.
66  */
67 void* SG_workstation_get_data(SG_workstation_t workstation) {
68   xbt_assert0(workstation != NULL, "Invalid parameter");
69   return workstation->data;
70 }
71
72 /* Returns the name of a workstation.
73  */
74 const char* SG_workstation_get_name(SG_workstation_t workstation) {
75   xbt_assert0(workstation != NULL, "Invalid parameter");
76   return workstation->name;
77 }
78
79 SG_link_t* SG_workstation_route_get_list(SG_workstation_t src, SG_workstation_t dst) {
80   /* TODO */
81   return NULL;
82 }
83
84 int SG_workstation_route_get_size(SG_workstation_t src, SG_workstation_t dst) {
85   /* TODO */
86   return 0;
87 }
88
89 /* Returns the total power of a workstation.
90  */
91 double SG_workstation_get_power(SG_workstation_t workstation) {
92   xbt_assert0(workstation != NULL, "Invalid parameter");
93   /* TODO */
94   return 0;
95   /*  return workstation->power;*/
96 }
97
98 /* Return the available power of a workstation.
99  */
100 double SG_workstation_get_available_power(SG_workstation_t workstation) {
101   xbt_assert0(workstation != NULL, "Invalid parameter");
102   /* TODO */
103   return 0;
104   /*return workstation->available_power;*/
105 }
106
107 /* Destroys a workstation. The user data (if any) should have been destroyed first.
108  */
109 void SG_workstation_destroy(SG_workstation_t workstation) {
110   xbt_assert0(workstation != NULL, "Invalid parameter");
111
112   if (workstation->name)
113     free(workstation->name);
114
115   /* TODO: route */
116
117   free(workstation);
118 }