diff options
author | Chris Lattner <sabre@nondot.org> | 2008-12-01 21:11:25 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-12-01 21:11:25 +0000 |
commit | c65fc3bd27a84281da9819b5fe89a01535a14ecf (patch) | |
tree | 35607b86fd6ed662c564185738d4d4b1f180d602 | |
parent | 57036da328feb62f50b503a6ac956fc5a8b2dca2 (diff) |
reenable array_pod_sort, this time hopefully happy on 64-bit
and big endian systems.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@60371 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/ADT/STLExtras.h | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/include/llvm/ADT/STLExtras.h b/include/llvm/ADT/STLExtras.h index a9e195e125..9f48761560 100644 --- a/include/llvm/ADT/STLExtras.h +++ b/include/llvm/ADT/STLExtras.h @@ -231,6 +231,15 @@ static inline int array_pod_sort_comparator(const void *P1, const void *P2) { return 1; return 0; } + +/// get_array_pad_sort_comparator - This is an internal helper function used to +/// get type deduction of T right. +template<typename T> +static int (*get_array_pad_sort_comparator(const T &X)) + (const void*, const void*) { + return array_pod_sort_comparator<T>; +} + /// array_pod_sort - This sorts an array with the specified start and end /// extent. This is just like std::sort, except that it calls qsort instead of @@ -246,18 +255,12 @@ static inline int array_pod_sort_comparator(const void *P1, const void *P2) { /// /// NOTE: If qsort_r were portable, we could allow a custom comparator and /// default to std::less. -} -#include <algorithm> -namespace llvm { - template<class IteratorTy> static inline void array_pod_sort(IteratorTy Start, IteratorTy End) { - std::sort(Start, End); - // Don't dereference start iterator of empty sequence. - //if (Start == End) return; - //qsort(&*Start, End-Start, sizeof(*Start), - // array_pod_sort_comparator<*Start>); + if (Start == End) return; + qsort(&*Start, End-Start, sizeof(*Start), + get_array_pad_sort_comparator(*Start)); } } // End llvm namespace |