Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
1988eff4338b105886e21abe78168c80ac483eb0
[simgrid.git] / tools / tesh2 / src / units.c
1 #include <units.h>\r
2 #include <unit.h>\r
3 #include <fstreams.h>\r
4 \r
5 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);\r
6 \r
7 units_t\r
8 units_new(runner_t runner, fstreams_t fstreams)\r
9 {\r
10         fstream_t fstream;\r
11         unsigned int i;\r
12         unit_t unit;\r
13         \r
14         units_t units =  xbt_new0(s_units_t, 1);\r
15 \r
16         units->items = xbt_dynar_new(sizeof(unit_t), (void_f_pvoid_t)unit_free);\r
17 \r
18         xbt_dynar_foreach(fstreams->items, i, fstream)\r
19         {\r
20                 unit = unit_new(runner, NULL, NULL, fstream);\r
21                 xbt_dynar_push(units->items, &unit);\r
22         }\r
23         \r
24         return units;\r
25 }\r
26 \r
27 \r
28 int\r
29 units_is_empty(units_t units)\r
30 {\r
31         if(!units)\r
32         {\r
33                 errno = EINVAL;\r
34                 return 0;\r
35         }\r
36         \r
37         return (0 == xbt_dynar_length(units->items));\r
38 }\r
39 \r
40 int\r
41 units_get_size(units_t units)\r
42 {\r
43         if(!units)\r
44         {\r
45                 errno = EINVAL;\r
46                 return -1;\r
47         }\r
48 \r
49         return xbt_dynar_length(units->items);\r
50 }\r
51 \r
52 \r
53 int\r
54 units_run_all(units_t units, xbt_os_mutex_t mutex)\r
55 {\r
56         unit_t unit;\r
57         unsigned int i;\r
58         \r
59         if(!units)\r
60                 return EINVAL;\r
61                 \r
62         if(!xbt_dynar_length(units->items))\r
63                 return EAGAIN;\r
64 \r
65         xbt_dynar_foreach(units->items, i, unit)\r
66         {\r
67                 unit_run(unit, mutex);\r
68         }\r
69 \r
70         return 0;\r
71 }\r
72 \r
73 int\r
74 units_join_all(units_t units)\r
75 {\r
76         unit_t unit;\r
77         unsigned int i;\r
78         \r
79         if(!units)\r
80                 return EINVAL;\r
81                 \r
82         if(!xbt_dynar_length(units->items))\r
83                 return EAGAIN;\r
84 \r
85         xbt_dynar_foreach(units->items, i, unit)\r
86         {\r
87                 if(unit->thread)\r
88                         xbt_os_thread_join(unit->thread, NULL);\r
89         }\r
90 \r
91         return 0;\r
92 }\r
93 \r
94 int\r
95 units_interrupt_all(units_t units)\r
96 {\r
97         unit_t unit;\r
98         unsigned int i;\r
99         \r
100         if(!units)\r
101                 return EINVAL;\r
102 \r
103         if(!xbt_dynar_length(units->items))\r
104                 return EAGAIN;\r
105 \r
106         xbt_dynar_foreach(units->items, i, unit)\r
107         {\r
108                 if(!(unit->successeded) && !(unit->interrupted))\r
109                         unit_interrupt(unit);\r
110         }\r
111         \r
112         return 0;\r
113 }\r
114 \r
115 int\r
116 units_summuarize(units_t units)\r
117 {\r
118         unit_t unit;\r
119         unsigned int i;\r
120 \r
121         if(!units)\r
122                 return EINVAL;\r
123 \r
124         if(!xbt_dynar_length(units->items))\r
125                 return EAGAIN;\r
126 \r
127         xbt_dynar_foreach(units->items, i, unit)\r
128         {\r
129                 unit_summuarize(unit);\r
130         }\r
131         \r
132         return 0;\r
133         \r
134 }\r
135 \r
136 int\r
137 units_reset_all(units_t units)\r
138 {\r
139         unit_t unit;\r
140         unsigned int i;\r
141         \r
142         if(!units)\r
143                 return EINVAL;\r
144         \r
145         if(!xbt_dynar_length(units->items))\r
146                 return EAGAIN;\r
147 \r
148         xbt_dynar_foreach(units->items, i, unit)\r
149         {\r
150                 unit_reset(unit);\r
151         }\r
152         return 0;\r
153 }\r
154 \r
155 int\r
156 units_free(void** unitsptr)\r
157 {\r
158         if(!(*unitsptr))\r
159                 return EINVAL;\r
160 \r
161         xbt_dynar_free(&((*((units_t*)unitsptr))->items));\r
162                 \r
163         free(*unitsptr);\r
164         *unitsptr = NULL;\r
165         \r
166         return 0;\r
167 }\r
168 \r