From: mquinson Date: Tue, 30 Nov 2010 10:26:17 +0000 (+0000) Subject: Bugfix: set the dynar's value to 0 for the expanded indexes on "set" operations. X-Git-Tag: v3_5~90 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/bfe98911a4c3fa925c1ef59b08259295642f9d9f Bugfix: set the dynar's value to 0 for the expanded indexes on "set" operations. [Cristian, manually rebased by Mt] Conflicts: src/dynar_unit.c src/xbt/dynar.c git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@8741 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/src/dynar_unit.c b/src/dynar_unit.c index c5bdf3f69e..81c685c3da 100644 --- a/src/dynar_unit.c +++ b/src/dynar_unit.c @@ -8,7 +8,7 @@ /* GENERATED FILE, DO NOT EDIT */ /*******************************/ -#line 766 "xbt/dynar.c" +#line 790 "xbt/dynar.c" #define NB_ELEM 5000 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; }