1*58b9f456SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 2*58b9f456SAndroid Build Coastguard Worker // 3*58b9f456SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*58b9f456SAndroid Build Coastguard Worker // 5*58b9f456SAndroid Build Coastguard Worker // This file is dual licensed under the MIT and the University of Illinois Open 6*58b9f456SAndroid Build Coastguard Worker // Source Licenses. See LICENSE.TXT for details. 7*58b9f456SAndroid Build Coastguard Worker // 8*58b9f456SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*58b9f456SAndroid Build Coastguard Worker 10*58b9f456SAndroid Build Coastguard Worker #ifndef TEST_COMPARE_H 11*58b9f456SAndroid Build Coastguard Worker #define TEST_COMPARE_H 12*58b9f456SAndroid Build Coastguard Worker 13*58b9f456SAndroid Build Coastguard Worker #include <cstddef> 14*58b9f456SAndroid Build Coastguard Worker #include <type_traits> 15*58b9f456SAndroid Build Coastguard Worker #include <cstdlib> 16*58b9f456SAndroid Build Coastguard Worker #include <new> 17*58b9f456SAndroid Build Coastguard Worker #include <climits> 18*58b9f456SAndroid Build Coastguard Worker 19*58b9f456SAndroid Build Coastguard Worker template <class C> 20*58b9f456SAndroid Build Coastguard Worker class test_compare 21*58b9f456SAndroid Build Coastguard Worker : private C 22*58b9f456SAndroid Build Coastguard Worker { 23*58b9f456SAndroid Build Coastguard Worker int data_; 24*58b9f456SAndroid Build Coastguard Worker public: data_(data)25*58b9f456SAndroid Build Coastguard Worker explicit test_compare(int data = 0) : data_(data) {} 26*58b9f456SAndroid Build Coastguard Worker 27*58b9f456SAndroid Build Coastguard Worker typename C::result_type operator()28*58b9f456SAndroid Build Coastguard Worker operator()(typename std::add_lvalue_reference<const typename C::first_argument_type>::type x, 29*58b9f456SAndroid Build Coastguard Worker typename std::add_lvalue_reference<const typename C::second_argument_type>::type y) const 30*58b9f456SAndroid Build Coastguard Worker {return C::operator()(x, y);} 31*58b9f456SAndroid Build Coastguard Worker 32*58b9f456SAndroid Build Coastguard Worker bool operator==(const test_compare& c) const 33*58b9f456SAndroid Build Coastguard Worker {return data_ == c.data_;} 34*58b9f456SAndroid Build Coastguard Worker }; 35*58b9f456SAndroid Build Coastguard Worker 36*58b9f456SAndroid Build Coastguard Worker 37*58b9f456SAndroid Build Coastguard Worker template <class C> 38*58b9f456SAndroid Build Coastguard Worker class non_const_compare 39*58b9f456SAndroid Build Coastguard Worker { 40*58b9f456SAndroid Build Coastguard Worker // operator() deliberately not marked as 'const' operator()41*58b9f456SAndroid Build Coastguard Worker bool operator()(const C& x, const C& y) { return x < y; } 42*58b9f456SAndroid Build Coastguard Worker }; 43*58b9f456SAndroid Build Coastguard Worker 44*58b9f456SAndroid Build Coastguard Worker 45*58b9f456SAndroid Build Coastguard Worker #endif // TEST_COMPARE_H 46