diff options
author | Marc Laukien <marc@zeroc.com> | 2001-09-17 22:04:17 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2001-09-17 22:04:17 +0000 |
commit | 60f51d6688e98ed87d24e6e9d1f179ca5db8f07a (patch) | |
tree | 7c99579afb6e99ea7a76cc5e564db694bdc6d8aa /cpp/include/IceUtil/Handle.h | |
parent | fixes (diff) | |
download | ice-60f51d6688e98ed87d24e6e9d1f179ca5db8f07a.tar.bz2 ice-60f51d6688e98ed87d24e6e9d1f179ca5db8f07a.tar.xz ice-60f51d6688e98ed87d24e6e9d1f179ca5db8f07a.zip |
tons of fixes
Diffstat (limited to 'cpp/include/IceUtil/Handle.h')
-rw-r--r-- | cpp/include/IceUtil/Handle.h | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/cpp/include/IceUtil/Handle.h b/cpp/include/IceUtil/Handle.h index 5def4862568..732fbe03606 100644 --- a/cpp/include/IceUtil/Handle.h +++ b/cpp/include/IceUtil/Handle.h @@ -22,13 +22,30 @@ namespace IceUtil { template<typename T> -class Handle +class HandleBase +{ +public: + + typedef T element_type; + + T* get() const { return _ptr; } + T* operator->() const { return _ptr; } + operator bool() const { return _ptr ? true : false; } + + void swap(HandleBase& other) { std::swap(_ptr, other._ptr); } + + T* _ptr; +}; + +template<typename T> +class Handle : public HandleBase<T> { public: - Handle(T* p = 0) : - _ptr(p) + Handle(T* p = 0) { + _ptr = p; + if (_ptr) { _ptr->__incRef(); @@ -36,9 +53,10 @@ public: } template<typename Y> - Handle(const Handle<Y>& r) : - _ptr(r._ptr) + Handle(const Handle<Y>& r) { + _ptr = r._ptr; + if (_ptr) { _ptr->__incRef(); @@ -47,12 +65,13 @@ public: #ifdef WIN32 // COMPILERBUG: Is VC++ or GNU C++ right here??? template<> - Handle(const Handle<T>& r) : + Handle(const Handle<T>& r) #else - Handle(const Handle& r) : + Handle(const Handle& r) #endif - _ptr(r._ptr) { + _ptr = r._ptr; + if (_ptr) { _ptr->__incRef(); @@ -131,7 +150,7 @@ public: } template<class Y> - static Handle dynamicCast(const Handle<Y>& r) + static Handle dynamicCast(const HandleBase<Y>& r) { return Handle(dynamic_cast<T*>(r._ptr)); } @@ -141,16 +160,6 @@ public: { return Handle(dynamic_cast<T*>(p)); } - - typedef T element_type; - - T* get() const { return _ptr; } - T* operator->() const { return _ptr; } - operator bool() const { return _ptr ? true : false; } - - void swap(Handle& other) { std::swap(_ptr, other._ptr); } - - T* _ptr; }; template<typename T, typename U> |