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 xbt_os_sem_acquire(jobs_sem);
\r
68 unit_run(unit, mutex);
\r
75 units_join_all(units_t units)
\r
83 if(!xbt_dynar_length(units->items))
\r
86 xbt_dynar_foreach(units->items, i, unit)
\r
89 xbt_os_thread_join(unit->thread, NULL);
\r
96 units_interrupt_all(units_t units)
\r
104 if(!xbt_dynar_length(units->items))
\r
107 xbt_dynar_foreach(units->items, i, unit)
\r
109 if(!(unit->successeded) && !(unit->interrupted))
\r
110 unit_interrupt(unit);
\r
113 if(!unit->released && unit->sem)
\r
115 unit->released = 1;
\r
116 xbt_os_sem_release(unit->sem);
\r
126 units_summuarize(units_t units)
\r
134 if(!xbt_dynar_length(units->items))
\r
137 xbt_dynar_foreach(units->items, i, unit)
\r
139 unit_summuarize(unit);
\r
147 units_reset_all(units_t units)
\r
155 if(!xbt_dynar_length(units->items))
\r
158 xbt_dynar_foreach(units->items, i, unit)
\r
166 units_free(void** unitsptr)
\r
171 if((*((units_t*)unitsptr))->items)
\r
172 xbt_dynar_free(&((*((units_t*)unitsptr))->items));
\r