From: Chris Lattner Date: Mon, 1 Dec 2008 21:11:25 +0000 (+0000) Subject: reenable array_pod_sort, this time hopefully happy on 64-bit X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=c65fc3bd27a84281da9819b5fe89a01535a14ecf;p=oota-llvm.git 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 --- diff --git a/include/llvm/ADT/STLExtras.h b/include/llvm/ADT/STLExtras.h index a9e195e1256..9f487615607 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 +static int (*get_array_pad_sort_comparator(const T &X)) + (const void*, const void*) { + return array_pod_sort_comparator; +} + /// 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 -namespace llvm { - template 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