X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/81b748b0102d2d3014a0b2c13f553ebe0362d679..20facf82f92baf2401e73847b694eea761622a4c:/src/xbt/dynar.c diff --git a/src/xbt/dynar.c b/src/xbt/dynar.c index 5df4655f16..79c21283ad 100644 --- a/src/xbt/dynar.c +++ b/src/xbt/dynar.c @@ -390,6 +390,28 @@ XBT_INLINE void *xbt_dynar_get_ptr(const xbt_dynar_t dynar, return res; } +XBT_INLINE void *xbt_dynar_set_at_ptr(const xbt_dynar_t dynar, + const unsigned long idx) +{ + + void *res; + _dynar_lock(dynar); + _sanity_check_dynar(dynar); + + _xbt_dynar_expand(dynar, idx + 1); + + if (idx >= dynar->used) { + _xbt_clear_mem(((char * const)dynar->data) + dynar->used * dynar->elmsize, + (idx + 1 - dynar->used)*dynar->elmsize); + dynar->used = idx + 1; + } + + _dynar_unlock(dynar); + + res = _xbt_dynar_elm(dynar, idx); + + return res; +} static void XBT_INLINE /* not synchronized */ _xbt_dynar_set(xbt_dynar_t dynar, @@ -402,6 +424,8 @@ _xbt_dynar_set(xbt_dynar_t dynar, _xbt_dynar_expand(dynar, idx + 1); if (idx >= dynar->used) { + _xbt_clear_mem(((char * const)dynar->data) + dynar->used * dynar->elmsize, + (idx + 1 - dynar->used)*dynar->elmsize); dynar->used = idx + 1; } @@ -708,6 +732,7 @@ XBT_INLINE void xbt_dynar_cursor_unlock(xbt_dynar_t dynar) /** @brief Sorts a dynar according to the function compar_fn * + * \param dynar the dynar to sort * \param compar_fn comparison function of type (int (compar_fn*) (void*) (void*)). * * Remark: if the elements stored in the dynar are structures, the compar_fn