summaryrefslogtreecommitdiff
path: root/cpp/include/IceUtil/Handle.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/include/IceUtil/Handle.h')
-rw-r--r--cpp/include/IceUtil/Handle.h84
1 files changed, 36 insertions, 48 deletions
diff --git a/cpp/include/IceUtil/Handle.h b/cpp/include/IceUtil/Handle.h
index 2254eb7430a..aa0c5156256 100644
--- a/cpp/include/IceUtil/Handle.h
+++ b/cpp/include/IceUtil/Handle.h
@@ -56,6 +56,42 @@ public:
T* _ptr;
};
+template<typename T, typename U>
+inline bool operator==(const HandleBase<T>& a, const HandleBase<U>& b)
+{
+ T* ap = a.get();
+ U* bp = b.get();
+ if (ap && bp)
+ {
+ return *ap == *bp;
+ }
+ else
+ {
+ return !ap && !bp;
+ }
+}
+
+template<typename T, typename U>
+inline bool operator!=(const HandleBase<T>& a, const HandleBase<U>& b)
+{
+ return !operator==(a, b);
+}
+
+template<typename T, typename U>
+inline bool operator<(const HandleBase<T>& a, const HandleBase<U>& b)
+{
+ T* ap = a.get();
+ U* bp = b.get();
+ if (ap && bp)
+ {
+ return *ap < *bp;
+ }
+ else
+ {
+ return !ap && bp;
+ }
+}
+
template<typename T>
class Handle : public HandleBase<T>
{
@@ -181,54 +217,6 @@ public:
}
};
-template<typename T, typename U>
-inline bool operator==(const Handle<T>& a, const Handle<U>& b)
-{
- T* ap = a.get();
- U* bp = b.get();
- if (ap == bp)
- {
- return true;
- }
- else if (!ap)
- {
- assert(bp);
- return false;
- }
- else
- {
- return *ap == *bp;
- }
-}
-
-template<typename T, typename U>
-inline bool operator!=(const Handle<T>& a, const Handle<U>& b)
-{
- return !operator==(a, b);
-}
-
-template<typename T, typename U>
-inline bool operator<(const Handle<T>& a, const Handle<U>& b)
-{
- T* ap = a.get();
- U* bp = b.get();
- if (!ap || !bp)
- {
- if (!ap && bp)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- else
- {
- return *a.get() < *b.get();
- }
-}
-
}
#endif