Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use function mergesort against qsort if possible.
[simgrid.git] / src / xbt / dynar.c
index 52d11fb..7c3bcc6 100644 (file)
@@ -676,12 +676,13 @@ XBT_INLINE void xbt_dynar_shift(xbt_dynar_t const dynar, void *const dst)
 
 static void _dynar_map(const xbt_dynar_t dynar, void_f_pvoid_t const op)
 {
-  char elm[SIZEOF_MAX];
+  char *const data = (char *) dynar->data;
+  const unsigned long elmsize = dynar->elmsize;
   const unsigned long used = dynar->used;
-  unsigned long i = 0;
+  unsigned long i;
 
   for (i = 0; i < used; i++) {
-    _xbt_dynar_get_elm(elm, dynar, i);
+    char* elm = (char*) data + i * elmsize;
     (*op) (elm);
   }
 }
@@ -744,8 +745,11 @@ XBT_INLINE void xbt_dynar_sort(xbt_dynar_t dynar,
 
   _dynar_lock(dynar);
 
+#ifdef HAVE_MERGESORT
+  mergesort(dynar->data, dynar->used, dynar->elmsize, compar_fn);
+#else
   qsort(dynar->data, dynar->used, dynar->elmsize, compar_fn);
-
+#endif
   _dynar_unlock(dynar);
 }