X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3f17e7a2d9e727cf8ba2da354280f3afd329c8a6..b44a4c1363c2831e4ce15471740af17c7b0f4c08:/src/simdag/sd_link.c diff --git a/src/simdag/sd_link.c b/src/simdag/sd_link.c index 0edd95e860..3ab7818b95 100644 --- a/src/simdag/sd_link.c +++ b/src/simdag/sd_link.c @@ -10,16 +10,55 @@ SD_link_t __SD_link_create(void *surf_link, void *data) { SD_CHECK_INIT_DONE(); xbt_assert0(surf_link != NULL, "surf_link is NULL !"); - SD_link_t link = xbt_new0(s_SD_link_t, 1); link->surf_link = surf_link; link->data = data; /* user data */ const char *name = SD_link_get_name(link); xbt_dict_set(sd_global->links, name, link, __SD_link_destroy); /* add the link to the dictionary */ + sd_global->link_count++; return link; } +/** + * \brief Returns the link list + * + * Use SD_link_get_number() to know the array size. + * + * \return an array of \ref SD_link_t containing all links + * \see SD_link_get_number() + */ +const SD_link_t* SD_link_get_list(void) { + SD_CHECK_INIT_DONE(); + xbt_assert0(SD_link_get_number() > 0, "There is no link!"); + + SD_link_t *array = sd_global->link_list; + xbt_dict_cursor_t cursor; + char *key; + void *data; + int i; + + if (array == NULL) { /* this is the first time the function is called */ + array = xbt_new0(SD_link_t, sd_global->link_count); + + i = 0; + xbt_dict_foreach(sd_global->links, cursor, key, data) { + array[i++] = (SD_link_t) data; + } + } + return array; +} + +/** + * \brief Returns the number of links + * + * \return the number of existing links + * \see SD_link_get_list() + */ +int SD_link_get_number(void) { + SD_CHECK_INIT_DONE(); + return sd_global->link_count; +} /** * \brief Returns the user data of a link