/* * compare.hpp * * Created on: Apr 1, 2013 * Author: Jan Travnicek */ #ifndef __COMPARE_HPP_ #define __COMPARE_HPP_ namespace std { template < typename T, typename Enable = void > struct compare; template<> struct compare<bool> { int operator()(bool first, bool second) const { return first - second; } }; template<> struct compare<char> { int operator()(char first, char second) const { return first - second; } }; template<> struct compare<short> { int operator()(short first, short second) const { return first - second; } }; template<> struct compare<unsigned> { int operator()(unsigned first, unsigned second) const { return first - second; } }; template<> struct compare<int> { int operator()(int first, int second) const { return first - second; } }; template<> struct compare<long> { int operator()(long first, long second) const { if ( first < second ) return -1; else if ( first > second ) return 1; else return 0; } }; template<> struct compare<long long> { int operator()(long long first, long long second) const { if ( first < second ) return -1; else if ( first > second ) return 1; else return 0; } }; template<> struct compare<double> { int operator()(double first, double second) const { if ( first < second ) return -1; else if ( first > second ) return 1; else return 0; } }; template<class T> struct compare<T*> { int operator()( T * const & first, T * const & second) const { static compare<typename std::decay < T >::type > comp; return comp(*first, *second); } }; template<class T> struct compare<T&> { int operator()( const T & first, const T & second) const { static compare<typename std::decay < T >::type > comp; return comp(first, second); } }; } /* namespace std */ #endif /* __COMPARE_HPP_ */