Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Bugfix: set the dynar's value to 0 for the expanded indexes on "set" operations.
authormquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 30 Nov 2010 10:26:17 +0000 (10:26 +0000)
committermquinson <mquinson@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 30 Nov 2010 10:26:17 +0000 (10:26 +0000)
[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

src/dynar_unit.c
src/xbt/dynar.c

index c5bdf3f..81c685c 100644 (file)
@@ -8,7 +8,7 @@
 /* GENERATED FILE, DO NOT EDIT */
 /*******************************/
 
-#line 766 "xbt/dynar.c" 
+#line 790 "xbt/dynar.c" 
 
 #define NB_ELEM 5000
 
index 0519a4a..79c2128 100644 (file)
@@ -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;
   }