3 #include <fstreams.h>
\r
4 \r XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);
5 \r\runits_t
\r units_new(runner_t runner, fstreams_t fstreams)
\r
10 \r\runits_t units = xbt_new0(s_units_t, 1);
12 xbt_dynar_new(sizeof(unit_t), (void_f_pvoid_t) unit_free);
13 \r\rxbt_dynar_foreach(fstreams->items, i, fstream)
\r {
14 \runit = unit_new(runner, NULL, NULL, fstream);
15 \rxbt_dynar_push(units->items, &unit);
20 \r\r\rint
\r units_is_empty(units_t units)
\r
27 \r\rreturn (0 == xbt_dynar_length(units->items));
30 \r\rint
\r units_get_size(units_t units)
\r
37 \r\rreturn xbt_dynar_length(units->items);
40 \r\r\rint
\r units_run_all(units_t units, xbt_os_mutex_t mutex)
\r
46 \r\rif (!xbt_dynar_length(units->items))
48 \r\rxbt_dynar_foreach(units->items, i, unit)
\r {
49 \rxbt_os_sem_acquire(jobs_sem);
50 \runit_run(unit, mutex);
55 \r\rint
\r units_join_all(units_t units)
\r
61 \r\rif (!xbt_dynar_length(units->items))
63 \r\rxbt_dynar_foreach(units->items, i, unit)
\r {
65 \rxbt_os_thread_join(unit->thread, NULL);
70 \r\rint
\r units_interrupt_all(units_t units)
\r
76 \r\rif (!xbt_dynar_length(units->items))
78 \r\rxbt_dynar_foreach(units->items, i, unit)
\r {
79 \rif (!(unit->successeded) && !(unit->interrupted))
80 \runit_interrupt(unit);
84 \rif (!unit->released && unit->sem)
87 \rxbt_os_sem_release(unit->sem);
94 \r\rint
\r units_summuarize(units_t units)
\r
100 \r\rif (!xbt_dynar_length(units->items))
102 \r\rxbt_dynar_foreach(units->items, i, unit)
\r {
103 \runit_summuarize(unit);
108 \r\rint
\r units_reset_all(units_t units)
\r
114 \r\rif (!xbt_dynar_length(units->items))
116 \r\rxbt_dynar_foreach(units->items, i, unit)
\r {
122 \r\rint
\r units_free(void **unitsptr)
\r
126 \r\rif ((*((units_t *) unitsptr))->items)
127 \rxbt_dynar_free(&((*((units_t *) unitsptr))->items));