summaryrefslogtreecommitdiff
path: root/cpp/include/Ice/Comparable.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/include/Ice/Comparable.h')
-rw-r--r--cpp/include/Ice/Comparable.h57
1 files changed, 42 insertions, 15 deletions
diff --git a/cpp/include/Ice/Comparable.h b/cpp/include/Ice/Comparable.h
index 8f7a7eb7787..aa630de3581 100644
--- a/cpp/include/Ice/Comparable.h
+++ b/cpp/include/Ice/Comparable.h
@@ -10,11 +10,13 @@
#ifndef ICE_COMPARABLE_H
#define ICE_COMPARABLE_H
+#include <functional>
+
namespace Ice
{
template<typename T, typename U>
-inline bool targetEquals(const T& lhs, const U& rhs)
+inline bool targetEqualTo(const T& lhs, const U& rhs)
{
if(lhs && rhs)
{
@@ -26,16 +28,6 @@ inline bool targetEquals(const T& lhs, const U& rhs)
}
}
-template<typename T>
-struct TargetEquals
-{
- bool operator()(const T& lhs, const T& rhs) const
- {
- return targetEquals(lhs, rhs);
- }
-};
-
-
template<typename T, typename U>
inline bool targetLess(const T& lhs, const U& rhs)
{
@@ -49,16 +41,51 @@ inline bool targetLess(const T& lhs, const U& rhs)
}
}
-template<typename T>
-struct TargetLess
+template<typename T, typename U>
+inline bool targetGreater(const T& lhs, const U& rhs)
+{
+ return targetLess(rhs, lhs);
+}
+
+template<typename T, typename U>
+inline bool targetLessEqual(const T& lhs, const U& rhs)
+{
+ return !targetGreater(lhs, rhs);
+}
+
+template<typename T, typename U>
+inline bool targetGreaterEqual(const T& lhs, const U& rhs)
+{
+ return !targetLess(lhs, rhs);
+}
+
+template<typename T, typename U>
+inline bool targetNotEqualTo(const T& lhs, const U& rhs)
+{
+ return !targetEqualTo(lhs, rhs);
+}
+
+#ifdef ICE_CPP11_MAPPING
+
+template<typename T, template<typename> class Compare>
+struct TargetCompare
{
bool operator()(const T& lhs, const T& rhs) const
{
- return targetLess(lhs, rhs);
+ if(lhs && rhs)
+ {
+ return Compare<typename T::element_type>()(*lhs, *rhs);
+ }
+ else
+ {
+ return Compare<bool>()(static_cast<const bool>(lhs), static_cast<const bool>(rhs));
+ }
}
};
-#ifdef ICE_CPP11_MAPPING
+//
+// Relational operators for generated structs and classes
+//
template<class C, typename = std::enable_if<std::is_member_function_pointer<decltype(&C::ice_tuple)>::value>>
bool operator<(const C& lhs, const C& rhs)