[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