X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9ce5fa048b590a9b36685485ddf713718c5de392..bfe98911a4c3fa925c1ef59b08259295642f9d9f:/src/xbt/dynar.c diff --git a/src/xbt/dynar.c b/src/xbt/dynar.c index 0519a4a494..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; }