From: mquinson Date: Tue, 6 Oct 2009 16:58:17 +0000 (+0000) Subject: Add various getters to task structure: X-Git-Tag: SVN~987 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/012d0bddbd960e51d7ddff501523d9a994b0d8dd Add various getters to task structure: * list of preceding/following tasks: SD_task_get_parents(task) and SD_task_get_children(task) * amount of workstations and list: SD_task_get_workstation_count(task) SD_task_get_workstation_list(task) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@6726 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/ChangeLog b/ChangeLog index 1cf92b9d80..b6903c82be 100644 --- a/ChangeLog +++ b/ChangeLog @@ -67,6 +67,11 @@ SimGrid (3.3.4) unstable; urgency=low - SD_task_create_comm_e2e() for end-to-end communication - SD_task_create_comp_seq() for sequential computation Use SD_task_schedulev() / SD_task_schedulel() to schedule them. + * Add getters on list of preceding/following tasks: + SD_task_get_parents(task) and SD_task_get_children(task) + * Add getters on amount of workstations and list: + SD_task_get_workstation_count(t) and SD_task_get_workstation_list(t) + Bug fixes: * GTNetS wrappers should now be usable again (and betterly tested too) diff --git a/include/simdag/simdag.h b/include/simdag/simdag.h index 9b6d259f5b..8ef3b96aea 100644 --- a/include/simdag/simdag.h +++ b/include/simdag/simdag.h @@ -132,6 +132,10 @@ XBT_PUBLIC(void) SD_task_schedule(SD_task_t task, int workstation_nb, XBT_PUBLIC(void) SD_task_unschedule(SD_task_t task); XBT_PUBLIC(double) SD_task_get_start_time(SD_task_t task); XBT_PUBLIC(double) SD_task_get_finish_time(SD_task_t task); +XBT_PUBLIC(xbt_dynar_t) SD_task_get_parents(SD_task_t task); +XBT_PUBLIC(xbt_dynar_t) SD_task_get_children(SD_task_t task); +XBT_PUBLIC(int) SD_task_get_workstation_count(SD_task_t task); +XBT_PUBLIC(SD_workstation_t*) SD_task_get_workstation_list(SD_task_t task); XBT_PUBLIC(void) SD_task_destroy(SD_task_t task); XBT_PUBLIC(void) SD_task_dump(SD_task_t task); diff --git a/src/simdag/sd_task.c b/src/simdag/sd_task.c index 901e8f0010..d2970258ab 100644 --- a/src/simdag/sd_task.c +++ b/src/simdag/sd_task.c @@ -168,6 +168,77 @@ const char *SD_task_get_name(SD_task_t task) return task->name; } +/** @brief Returns the dynar of the parents of a task + * + * \param task a task + * \return a newly allocated dynar comprising the parents of this task + */ + +xbt_dynar_t SD_task_get_parents(SD_task_t task) +{ + unsigned int i; + xbt_dynar_t parents; + SD_dependency_t dep; + SD_CHECK_INIT_DONE(); + xbt_assert0(task != NULL, "Invalid parameter"); + + parents = xbt_dynar_new(sizeof(SD_task_t), NULL); + xbt_dynar_foreach(task->tasks_before, i, dep){ + xbt_dynar_push(parents, &(dep->src)); + } + return parents; +} + +/** @brief Returns the dynar of the parents of a task + * + * \param task a task + * \return a newly allocated dynar comprising the parents of this task + */ +xbt_dynar_t SD_task_get_children(SD_task_t task) +{ + unsigned int i; + xbt_dynar_t children; + SD_dependency_t dep; + SD_CHECK_INIT_DONE(); + xbt_assert0(task != NULL, "Invalid parameter"); + + children = xbt_dynar_new(sizeof(SD_task_t), NULL); + xbt_dynar_foreach(task->tasks_after, i, dep){ + xbt_dynar_push(children, &(dep->dst)); + } + return children; +} + +/** + * \brief Returns the amount of workstations involved in a task + * + * Only call this on already scheduled tasks! + * \param task a task + */ +int SD_task_get_workstation_count(SD_task_t task) +{ + SD_CHECK_INIT_DONE(); + xbt_assert0(task != NULL, "Invalid parameter"); + // xbt_assert1( task->state_set != sd_global->scheduled_task_set, + // "Unscheduled task %s", task->name); + return task->workstation_nb; +} + +/** + * \brief Returns the list of workstations involved in a task + * + * Only call this on already scheduled tasks! + * \param task a task + */ +SD_workstation_t* SD_task_get_workstation_list(SD_task_t task) +{ + SD_CHECK_INIT_DONE(); + xbt_assert0(task != NULL, "Invalid parameter"); + //xbt_assert1( task->state_set != sd_global->scheduled_task_set, + // "Unscheduled task %s", task->name); + return task->workstation_list; +} + /** * \brief Returns the total amount of a task *