+++ /dev/null
-#include <units.h>\r
-#include <unit.h>\r
-#include <fstreams.h>\r
-\r
-XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(tesh);\r
-\r
-units_t\r
-units_new(runner_t runner, fstreams_t fstreams)\r
-{\r
- fstream_t fstream;\r
- unsigned int i;\r
- unit_t unit;\r
- \r
- units_t units = xbt_new0(s_units_t, 1);\r
-\r
- units->items = xbt_dynar_new(sizeof(unit_t), (void_f_pvoid_t)unit_free);\r
-\r
- xbt_dynar_foreach(fstreams->items, i, fstream)\r
- {\r
- unit = unit_new(runner, NULL, NULL, fstream);\r
- xbt_dynar_push(units->items, &unit);\r
- }\r
- \r
- return units;\r
-}\r
-\r
-\r
-int\r
-units_is_empty(units_t units)\r
-{\r
- if(!units)\r
- {\r
- errno = EINVAL;\r
- return 0;\r
- }\r
- \r
- return (0 == xbt_dynar_length(units->items));\r
-}\r
-\r
-int\r
-units_get_size(units_t units)\r
-{\r
- if(!units)\r
- {\r
- errno = EINVAL;\r
- return -1;\r
- }\r
-\r
- return xbt_dynar_length(units->items);\r
-}\r
-\r
-\r
-int\r
-units_run_all(units_t units, xbt_os_mutex_t mutex)\r
-{\r
- unit_t unit;\r
- unsigned int i;\r
- \r
- if(!units)\r
- return EINVAL;\r
- \r
- if(!xbt_dynar_length(units->items))\r
- return EAGAIN;\r
-\r
- xbt_dynar_foreach(units->items, i, unit)\r
- {\r
- xbt_os_sem_acquire(jobs_sem);\r
- unit_run(unit, mutex);\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-int\r
-units_join_all(units_t units)\r
-{\r
- unit_t unit;\r
- unsigned int i;\r
- \r
- if(!units)\r
- return EINVAL;\r
- \r
- if(!xbt_dynar_length(units->items))\r
- return EAGAIN;\r
-\r
- xbt_dynar_foreach(units->items, i, unit)\r
- {\r
- if(unit->thread)\r
- xbt_os_thread_join(unit->thread, NULL);\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-int\r
-units_interrupt_all(units_t units)\r
-{\r
- unit_t unit;\r
- unsigned int i;\r
- \r
- if(!units)\r
- return EINVAL;\r
-\r
- if(!xbt_dynar_length(units->items))\r
- return EAGAIN;\r
-\r
- xbt_dynar_foreach(units->items, i, unit)\r
- {\r
- if(!(unit->successeded) && !(unit->interrupted))\r
- unit_interrupt(unit);\r
- else\r
- {\r
- if(!unit->released && unit->sem)\r
- {\r
- unit->released = 1;\r
- xbt_os_sem_release(unit->sem);\r
- }\r
- }\r
- \r
- }\r
- \r
- return 0;\r
-}\r
-\r
-int\r
-units_summuarize(units_t units)\r
-{\r
- unit_t unit;\r
- unsigned int i;\r
-\r
- if(!units)\r
- return EINVAL;\r
-\r
- if(!xbt_dynar_length(units->items))\r
- return EAGAIN;\r
-\r
- xbt_dynar_foreach(units->items, i, unit)\r
- {\r
- unit_summuarize(unit);\r
- }\r
- \r
- return 0;\r
- \r
-}\r
-\r
-int\r
-units_reset_all(units_t units)\r
-{\r
- unit_t unit;\r
- unsigned int i;\r
- \r
- if(!units)\r
- return EINVAL;\r
- \r
- if(!xbt_dynar_length(units->items))\r
- return EAGAIN;\r
-\r
- xbt_dynar_foreach(units->items, i, unit)\r
- {\r
- unit_reset(unit);\r
- }\r
- return 0;\r
-}\r
-\r
-int\r
-units_free(void** unitsptr)\r
-{\r
- if(!(*unitsptr))\r
- return EINVAL;\r
- \r
- if((*((units_t*)unitsptr))->items)\r
- xbt_dynar_free(&((*((units_t*)unitsptr))->items));\r
- \r
- free(*unitsptr);\r
- *unitsptr = NULL;\r
- \r
- return 0;\r
-}\r
-\r