3 #include <fstreams.h>
\r
5 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);
\r
8 units_new(runner_t runner, fstreams_t fstreams)
\r
14 units_t units = xbt_new0(s_units_t, 1);
\r
16 units->items = xbt_dynar_new(sizeof(unit_t), (void_f_pvoid_t)unit_free);
\r
18 xbt_dynar_foreach(fstreams->items, i, fstream)
\r
20 unit = unit_new(runner, NULL, NULL, fstream);
\r
21 xbt_dynar_push(units->items, &unit);
\r
29 units_is_empty(units_t units)
\r
37 return (0 == xbt_dynar_length(units->items));
\r
41 units_get_size(units_t units)
\r
49 return xbt_dynar_length(units->items);
\r
54 units_run_all(units_t units, xbt_os_mutex_t mutex)
\r
62 if(!xbt_dynar_length(units->items))
\r
65 xbt_dynar_foreach(units->items, i, unit)
\r
67 unit_run(unit, mutex);
\r
74 units_join_all(units_t units)
\r
82 if(!xbt_dynar_length(units->items))
\r
85 xbt_dynar_foreach(units->items, i, unit)
\r
88 xbt_os_thread_join(unit->thread, NULL);
\r
95 units_interrupt_all(units_t units)
\r
103 if(!xbt_dynar_length(units->items))
\r
106 xbt_dynar_foreach(units->items, i, unit)
\r
108 if(!(unit->successeded) && !(unit->interrupted))
\r
109 unit_interrupt(unit);
\r
112 if(!unit->released && unit->sem)
\r
114 unit->released = 1;
\r
115 xbt_os_sem_release(unit->sem);
\r
125 units_summuarize(units_t units)
\r
133 if(!xbt_dynar_length(units->items))
\r
136 xbt_dynar_foreach(units->items, i, unit)
\r
138 unit_summuarize(unit);
\r
146 units_reset_all(units_t units)
\r
154 if(!xbt_dynar_length(units->items))
\r
157 xbt_dynar_foreach(units->items, i, unit)
\r
165 units_free(void** unitsptr)
\r
170 if((*((units_t*)unitsptr))->items)
\r
171 xbt_dynar_free(&((*((units_t*)unitsptr))->items));
\r