A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use function mergesort against qsort if possible.
[simgrid.git]
/
src
/
xbt
/
dynar.c
diff --git
a/src/xbt/dynar.c
b/src/xbt/dynar.c
index
52d11fb
..
7c3bcc6
100644
(file)
--- a/
src/xbt/dynar.c
+++ b/
src/xbt/dynar.c
@@
-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)
{
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;
const unsigned long used = dynar->used;
- unsigned long i
= 0
;
+ unsigned long i;
for (i = 0; i < used; i++) {
for (i = 0; i < used; i++) {
-
_xbt_dynar_get_elm(elm, dynar, i)
;
+
char* elm = (char*) data + i * elmsize
;
(*op) (elm);
}
}
(*op) (elm);
}
}
@@
-744,8
+745,11
@@
XBT_INLINE void xbt_dynar_sort(xbt_dynar_t dynar,
_dynar_lock(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);
qsort(dynar->data, dynar->used, dynar->elmsize, compar_fn);
-
+#endif
_dynar_unlock(dynar);
}
_dynar_unlock(dynar);
}