// ********************************************************************** // // 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 #include namespace Ice { template inline bool targetEqualTo(const T& lhs, const U& rhs) { if(lhs && rhs) { return *lhs == *rhs; } else { return !lhs && !rhs; } } template inline bool targetLess(const T& lhs, const U& rhs) { if(lhs && rhs) { return *lhs < *rhs; } else { return !lhs && rhs; } } template inline bool targetGreater(const T& lhs, const U& rhs) { return targetLess(rhs, lhs); } template inline bool targetLessEqual(const T& lhs, const U& rhs) { return !targetGreater(lhs, rhs); } template inline bool targetGreaterEqual(const T& lhs, const U& rhs) { return !targetLess(lhs, rhs); } template inline bool targetNotEqualTo(const T& lhs, const U& rhs) { return !targetEqualTo(lhs, rhs); } #ifdef ICE_CPP11_MAPPING template class Compare> struct TargetCompare { bool operator()(const T& lhs, const T& rhs) const { if(lhs && rhs) { return Compare()(*lhs, *rhs); } else { return Compare()(static_cast(lhs), static_cast(rhs)); } } }; // // Relational operators for generated structs and classes // 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