[llvm-commits] [llvm] r60371 - /llvm/trunk/include/llvm/ADT/STLExtras.h
Chris Lattner
sabre at nondot.org
Mon Dec 1 13:11:25 PST 2008
Author: lattner
Date: Mon Dec 1 15:11:25 2008
New Revision: 60371
URL: http://llvm.org/viewvc/llvm-project?rev=60371&view=rev
Log:
reenable array_pod_sort, this time hopefully happy on 64-bit
and big endian systems.
Modified:
llvm/trunk/include/llvm/ADT/STLExtras.h
Modified: llvm/trunk/include/llvm/ADT/STLExtras.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/ADT/STLExtras.h?rev=60371&r1=60370&r2=60371&view=diff
==============================================================================
--- llvm/trunk/include/llvm/ADT/STLExtras.h (original)
+++ llvm/trunk/include/llvm/ADT/STLExtras.h Mon Dec 1 15:11:25 2008
@@ -231,6 +231,15 @@
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 @@
///
/// 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
More information about the llvm-commits
mailing list