X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FADT%2FSTLExtras.h;h=aee500d4fb6c92abe8fc2250735a75a78bf08a8a;hb=658c62862e470b59aaf25825de64d93fbaf8cb93;hp=8dbf79031c35a918c73fc6b3cf25aee2621b065d;hpb=9467f0e3bd2b0fece0d50a6d92f996b4f3952096;p=oota-llvm.git diff --git a/include/llvm/ADT/STLExtras.h b/include/llvm/ADT/STLExtras.h index 8dbf79031c3..aee500d4fb6 100644 --- a/include/llvm/ADT/STLExtras.h +++ b/include/llvm/ADT/STLExtras.h @@ -29,6 +29,16 @@ namespace llvm { // Extra additions to //===----------------------------------------------------------------------===// +template +struct identity : public std::unary_function { + Ty &operator()(Ty &self) const { + return self; + } + const Ty &operator()(const Ty &self) const { + return self; + } +}; + template struct less_ptr : public std::binary_function { bool operator()(const Ty* left, const Ty* right) const { @@ -49,7 +59,7 @@ struct greater_ptr : public std::binary_function { // for_each(V.begin(), B.end(), deleter); // template -static inline void deleter(T *Ptr) { +inline void deleter(T *Ptr) { delete Ptr; } @@ -186,25 +196,21 @@ inline ItTy prior(ItTy it) // // do stuff // else // // do other stuff - -namespace -{ - template - struct tier { - typedef T1 &first_type; - typedef T2 &second_type; - - first_type first; - second_type second; - - tier(first_type f, second_type s) : first(f), second(s) { } - tier& operator=(const std::pair& p) { - first = p.first; - second = p.second; - return *this; - } - }; -} +template +struct tier { + typedef T1 &first_type; + typedef T2 &second_type; + + first_type first; + second_type second; + + tier(first_type f, second_type s) : first(f), second(s) { } + tier& operator=(const std::pair& p) { + first = p.first; + second = p.second; + return *this; + } +}; template inline tier tie(T1& f, T2& s) { @@ -225,14 +231,14 @@ inline T *array_endof(T (&x)[N]) { /// Find the length of an array. template -inline size_t array_lengthof(T (&x)[N]) { +inline size_t array_lengthof(T (&)[N]) { return N; } /// array_pod_sort_comparator - This is helper function for array_pod_sort, /// which just uses operator< on T. template -static inline int array_pod_sort_comparator(const void *P1, const void *P2) { +inline int array_pod_sort_comparator(const void *P1, const void *P2) { if (*reinterpret_cast(P1) < *reinterpret_cast(P2)) return -1; if (*reinterpret_cast(P2) < *reinterpret_cast(P1)) @@ -243,7 +249,7 @@ static inline int array_pod_sort_comparator(const void *P1, const void *P2) { /// 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)) +inline int (*get_array_pad_sort_comparator(const T &)) (const void*, const void*) { return array_pod_sort_comparator; } @@ -264,7 +270,7 @@ static int (*get_array_pad_sort_comparator(const T &X)) /// NOTE: If qsort_r were portable, we could allow a custom comparator and /// default to std::less. template -static inline void array_pod_sort(IteratorTy Start, IteratorTy End) { +inline void array_pod_sort(IteratorTy Start, IteratorTy End) { // Don't dereference start iterator of empty sequence. if (Start == End) return; qsort(&*Start, End-Start, sizeof(*Start), @@ -272,13 +278,13 @@ static inline void array_pod_sort(IteratorTy Start, IteratorTy End) { } template -static inline void array_pod_sort(IteratorTy Start, IteratorTy End, +inline void array_pod_sort(IteratorTy Start, IteratorTy End, int (*Compare)(const void*, const void*)) { // Don't dereference start iterator of empty sequence. if (Start == End) return; qsort(&*Start, End-Start, sizeof(*Start), Compare); } - + //===----------------------------------------------------------------------===// // Extra additions to //===----------------------------------------------------------------------===//