diff options
Diffstat (limited to 'cpp/include/IceUtil/Handle.h')
-rw-r--r-- | cpp/include/IceUtil/Handle.h | 84 |
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 |