// ********************************************************************** // // Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved. // // This copy of Ice is licensed to you under the terms described in the // ICE_LICENSE file included in this distribution. // // ********************************************************************** #ifndef ICE_COMPARABLE_H #define ICE_COMPARABLE_H namespace Ice { template inline bool targetEquals(const T& lhs, const U& rhs) { if(lhs && rhs) { return *lhs == *rhs; } else { return !lhs && !rhs; } } template struct TargetEquals { bool operator()(const T& lhs, const T& rhs) const { return targetEquals(lhs, rhs); } }; template inline bool targetLess(const T& lhs, const U& rhs) { if(lhs && rhs) { return *lhs < *rhs; } else { return !lhs && rhs; } } template struct TargetLess { bool operator()(const T& lhs, const T& rhs) const { return targetLess(lhs, rhs); } }; #ifdef ICE_CPP11_MAPPING template::value>> bool operator<(const C& lhs, const C& rhs) { return lhs.ice_tuple() < rhs.ice_tuple(); } template::value>> bool operator<=(const C& lhs, const C& rhs) { return lhs.ice_tuple() <= rhs.ice_tuple(); } template::value>> bool operator>(const C& lhs, const C& rhs) { return lhs.ice_tuple() > rhs.ice_tuple(); } template::value>> bool operator>=(const C& lhs, const C& rhs) { return lhs.ice_tuple() >= rhs.ice_tuple(); } template::value>> bool operator==(const C& lhs, const C& rhs) { return lhs.ice_tuple() == rhs.ice_tuple(); } template::value>> bool operator!=(const C& lhs, const C& rhs) { return lhs.ice_tuple() != rhs.ice_tuple(); } #endif } #endif