Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Adding convenient function for Fred Suter
authoralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 5 Mar 2007 16:09:30 +0000 (16:09 +0000)
committeralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 5 Mar 2007 16:09:30 +0000 (16:09 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@3199 48e7efb5-ca39-0410-a469-dd3cf9ba447f

include/simdag/simdag.h
src/simdag/sd_task.c

index 3bb899f..96ee925 100644 (file)
@@ -117,6 +117,7 @@ XBT_PUBLIC(void)              SD_task_destroy(SD_task_t task);
 XBT_PUBLIC(void)              SD_task_dependency_add(const char *name, void *data, SD_task_t src, SD_task_t dst);
 XBT_PUBLIC(void)              SD_task_dependency_remove(SD_task_t src, SD_task_t dst);
 XBT_PUBLIC(void*)             SD_task_dependency_get_data(SD_task_t src, SD_task_t dst);
 XBT_PUBLIC(void)              SD_task_dependency_add(const char *name, void *data, SD_task_t src, SD_task_t dst);
 XBT_PUBLIC(void)              SD_task_dependency_remove(SD_task_t src, SD_task_t dst);
 XBT_PUBLIC(void*)             SD_task_dependency_get_data(SD_task_t src, SD_task_t dst);
+XBT_PUBLIC(int)               SD_task_dependency_exists(SD_task_t src, SD_task_t dst);
 /** @} */
 
 /************************** Global *******************************************/
 /** @} */
 
 /************************** Global *******************************************/
index f2aa7bd..158184d 100644 (file)
@@ -301,6 +301,31 @@ void SD_task_dependency_add(const char *name, void *data, SD_task_t src, SD_task
       __SD_print_dependencies(dst); */
 }
 
       __SD_print_dependencies(dst); */
 }
 
+/**
+ * \brief Indacates whether there is a dependency between two tasks.
+ *
+ * \param src a task
+ * \param dst a task depending on \a src
+ */
+int SD_task_dependency_exists(SD_task_t src, SD_task_t dst) {
+  xbt_dynar_t dynar;
+  int length;
+  int i;
+  SD_dependency_t dependency;
+
+  SD_CHECK_INIT_DONE();
+  xbt_assert0(src != NULL && dst != NULL, "Invalid parameter");
+
+  dynar = src->tasks_after;
+  length = xbt_dynar_length(dynar);
+
+  for (i = 0; i < length; i++) {
+    xbt_dynar_get_cpy(dynar, i, &dependency);
+    if (dependency->dst == dst) return 1;
+  }
+  return 0;
+}
+
 /**
  * \brief Remove a dependency between two tasks
  *
 /**
  * \brief Remove a dependency between two tasks
  *