Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use function mergesort against qsort if possible.
authorNavarrop <Pierre.Navarro@imag.fr>
Tue, 26 Apr 2011 15:10:13 +0000 (17:10 +0200)
committerNavarrop <Pierre.Navarro@imag.fr>
Tue, 26 Apr 2011 15:10:38 +0000 (17:10 +0200)
buildtools/Cmake/CompleteInFiles.cmake
buildtools/Cmake/gras_config.h.in
src/xbt/dynar.c

index 4ec0567..74503d0 100644 (file)
@@ -82,6 +82,7 @@ CHECK_FUNCTION_EXISTS(asprintf HAVE_ASPRINTF)
 CHECK_FUNCTION_EXISTS(vasprintf HAVE_VASPRINTF)
 CHECK_FUNCTION_EXISTS(makecontext HAVE_MAKECONTEXT)
 CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
+CHECK_FUNCTION_EXISTS(mergesort HAVE_MERGESORT)
 
 #Check if __thread is defined
 exec_program("${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_thread_storage.c" 
index 2443ae7..ed0517f 100644 (file)
@@ -42,6 +42,9 @@
 #cmakedefine MMALLOC_WANT_OVERIDE_LEGACY @MMALLOC_WANT_OVERIDE_LEGACY@
 #cmakedefine HAVE_MC @HAVE_MC@
 
+/* Set to true if have the mergesort function */
+#cmakedefine HAVE_MERGESORT @HAVE_MERGESORT@
+
 /* Set to true if lib pcre is present */
 #cmakedefine HAVE_PCRE_LIB @HAVE_PCRE_LIB@
 
index 51d207b..7c3bcc6 100644 (file)
@@ -745,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);
 }