| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reser
ved. | 2 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reser
ved. |
| 3 * | 3 * |
| 4 * This library is free software; you can redistribute it and/or | 4 * This library is free software; you can redistribute it and/or |
| 5 * modify it under the terms of the GNU Library General Public | 5 * modify it under the terms of the GNU Library General Public |
| 6 * License as published by the Free Software Foundation; either | 6 * License as published by the Free Software Foundation; either |
| 7 * version 2 of the License, or (at your option) any later version. | 7 * version 2 of the License, or (at your option) any later version. |
| 8 * | 8 * |
| 9 * This library is distributed in the hope that it will be useful, | 9 * This library is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 // See comments in PassRefPtr.h for an explanation of why this takes a c
onst reference. | 43 // See comments in PassRefPtr.h for an explanation of why this takes a c
onst reference. |
| 44 template<typename U> RefPtr(const PassRefPtr<U>&); | 44 template<typename U> RefPtr(const PassRefPtr<U>&); |
| 45 | 45 |
| 46 // Hash table deleted values, which are only constructed and never copie
d or destroyed. | 46 // Hash table deleted values, which are only constructed and never copie
d or destroyed. |
| 47 RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { } | 47 RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { } |
| 48 bool isHashTableDeletedValue() const { return m_ptr == hashTableDeletedV
alue(); } | 48 bool isHashTableDeletedValue() const { return m_ptr == hashTableDeletedV
alue(); } |
| 49 | 49 |
| 50 ALWAYS_INLINE ~RefPtr() { derefIfNotNull(m_ptr); } | 50 ALWAYS_INLINE ~RefPtr() { derefIfNotNull(m_ptr); } |
| 51 | 51 |
| 52 T* get() const { return m_ptr; } | 52 T* get() const { return m_ptr; } |
| 53 | 53 |
| 54 void clear(); | 54 void clear(); |
| 55 PassRefPtr<T> release() { PassRefPtr<T> tmp = adoptRef(m_ptr); m_ptr = 0
; return tmp; } | 55 PassRefPtr<T> release() { PassRefPtr<T> tmp = adoptRef(m_ptr); m_ptr = 0
; return tmp; } |
| 56 | 56 |
| 57 T& operator*() const { return *m_ptr; } | 57 T& operator*() const { return *m_ptr; } |
| 58 ALWAYS_INLINE T* operator->() const { return m_ptr; } | 58 ALWAYS_INLINE T* operator->() const { return m_ptr; } |
| 59 | 59 |
| 60 bool operator!() const { return !m_ptr; } | 60 bool operator!() const { return !m_ptr; } |
| 61 | 61 |
| 62 // This conversion operator allows implicit conversion to bool but not t
o other integer types. | 62 // This conversion operator allows implicit conversion to bool but not t
o other integer types. |
| 63 typedef T* (RefPtr::*UnspecifiedBoolType); | 63 typedef T* (RefPtr::*UnspecifiedBoolType); |
| 64 operator UnspecifiedBoolType() const { return m_ptr ? &RefPtr::m_ptr : 0
; } | 64 operator UnspecifiedBoolType() const { return m_ptr ? &RefPtr::m_ptr : 0
; } |
| 65 | 65 |
| 66 RefPtr& operator=(const RefPtr&); | 66 RefPtr& operator=(const RefPtr&); |
| 67 RefPtr& operator=(T*); | 67 RefPtr& operator=(T*); |
| 68 RefPtr& operator=(const PassRefPtr<T>&); | 68 RefPtr& operator=(const PassRefPtr<T>&); |
| 69 #if !COMPILER_SUPPORTS(CXX_NULLPTR) | 69 #if !COMPILER_SUPPORTS(CXX_NULLPTR) |
| 70 RefPtr& operator=(std::nullptr_t) { clear(); return *this; } | 70 RefPtr& operator=(std::nullptr_t) { clear(); return *this; } |
| 71 #endif | 71 #endif |
| 72 template<typename U> RefPtr& operator=(const RefPtr<U>&); | 72 template<typename U> RefPtr& operator=(const RefPtr<U>&); |
| 73 template<typename U> RefPtr& operator=(const PassRefPtr<U>&); | 73 template<typename U> RefPtr& operator=(const PassRefPtr<U>&); |
| 74 | 74 |
| 75 void swap(RefPtr&); | 75 void swap(RefPtr&); |
| 76 | 76 |
| 77 static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); } | 77 static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); } |
| 78 | 78 |
| 79 private: | 79 private: |
| 80 T* m_ptr; | 80 T* m_ptr; |
| 81 }; | 81 }; |
| 82 | 82 |
| 83 template<typename T> template<typename U> inline RefPtr<T>::RefPtr(const Pas
sRefPtr<U>& o) | 83 template<typename T> template<typename U> inline RefPtr<T>::RefPtr(const Pas
sRefPtr<U>& o) |
| 84 : m_ptr(o.leakRef()) | 84 : m_ptr(o.leakRef()) |
| 85 { | 85 { |
| 86 } | 86 } |
| 87 | 87 |
| 88 template<typename T> inline void RefPtr<T>::clear() | 88 template<typename T> inline void RefPtr<T>::clear() |
| 89 { | 89 { |
| 90 T* ptr = m_ptr; | 90 T* ptr = m_ptr; |
| 91 m_ptr = 0; | 91 m_ptr = 0; |
| 92 derefIfNotNull(ptr); | 92 derefIfNotNull(ptr); |
| 93 } | 93 } |
| 94 | 94 |
| 95 template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(const RefPtr<T>&
o) | 95 template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(const RefPtr<T>&
o) |
| 96 { | 96 { |
| 97 T* optr = o.get(); | 97 T* optr = o.get(); |
| 98 refIfNotNull(optr); | 98 refIfNotNull(optr); |
| 99 T* ptr = m_ptr; | 99 T* ptr = m_ptr; |
| 100 m_ptr = optr; | 100 m_ptr = optr; |
| 101 derefIfNotNull(ptr); | 101 derefIfNotNull(ptr); |
| 102 return *this; | 102 return *this; |
| 103 } | 103 } |
| 104 | 104 |
| 105 template<typename T> template<typename U> inline RefPtr<T>& RefPtr<T>::opera
tor=(const RefPtr<U>& o) | 105 template<typename T> template<typename U> inline RefPtr<T>& RefPtr<T>::opera
tor=(const RefPtr<U>& o) |
| 106 { | 106 { |
| 107 T* optr = o.get(); | 107 T* optr = o.get(); |
| 108 refIfNotNull(optr); | 108 refIfNotNull(optr); |
| 109 T* ptr = m_ptr; | 109 T* ptr = m_ptr; |
| 110 m_ptr = optr; | 110 m_ptr = optr; |
| 111 derefIfNotNull(ptr); | 111 derefIfNotNull(ptr); |
| 112 return *this; | 112 return *this; |
| 113 } | 113 } |
| 114 | 114 |
| 115 template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(T* optr) | 115 template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(T* optr) |
| 116 { | 116 { |
| 117 refIfNotNull(optr); | 117 refIfNotNull(optr); |
| 118 T* ptr = m_ptr; | 118 T* ptr = m_ptr; |
| 119 m_ptr = optr; | 119 m_ptr = optr; |
| 120 derefIfNotNull(ptr); | 120 derefIfNotNull(ptr); |
| 121 return *this; | 121 return *this; |
| 122 } | 122 } |
| 123 | 123 |
| 124 template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(const PassRefPtr
<T>& o) | 124 template<typename T> inline RefPtr<T>& RefPtr<T>::operator=(const PassRefPtr
<T>& o) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 141 { | 141 { |
| 142 std::swap(m_ptr, o.m_ptr); | 142 std::swap(m_ptr, o.m_ptr); |
| 143 } | 143 } |
| 144 | 144 |
| 145 template<class T> inline void swap(RefPtr<T>& a, RefPtr<T>& b) | 145 template<class T> inline void swap(RefPtr<T>& a, RefPtr<T>& b) |
| 146 { | 146 { |
| 147 a.swap(b); | 147 a.swap(b); |
| 148 } | 148 } |
| 149 | 149 |
| 150 template<typename T, typename U> inline bool operator==(const RefPtr<T>& a,
const RefPtr<U>& b) | 150 template<typename T, typename U> inline bool operator==(const RefPtr<T>& a,
const RefPtr<U>& b) |
| 151 { | 151 { |
| 152 return a.get() == b.get(); | 152 return a.get() == b.get(); |
| 153 } | 153 } |
| 154 | 154 |
| 155 template<typename T, typename U> inline bool operator==(const RefPtr<T>& a,
U* b) | 155 template<typename T, typename U> inline bool operator==(const RefPtr<T>& a,
U* b) |
| 156 { | 156 { |
| 157 return a.get() == b; | 157 return a.get() == b; |
| 158 } | 158 } |
| 159 | 159 |
| 160 template<typename T, typename U> inline bool operator==(T* a, const RefPtr<U
>& b) | 160 template<typename T, typename U> inline bool operator==(T* a, const RefPtr<U
>& b) |
| 161 { | 161 { |
| 162 return a == b.get(); | 162 return a == b.get(); |
| 163 } | 163 } |
| 164 | 164 |
| 165 template<typename T, typename U> inline bool operator!=(const RefPtr<T>& a,
const RefPtr<U>& b) | 165 template<typename T, typename U> inline bool operator!=(const RefPtr<T>& a,
const RefPtr<U>& b) |
| 166 { | 166 { |
| 167 return a.get() != b.get(); | 167 return a.get() != b.get(); |
| 168 } | 168 } |
| 169 | 169 |
| 170 template<typename T, typename U> inline bool operator!=(const RefPtr<T>& a,
U* b) | 170 template<typename T, typename U> inline bool operator!=(const RefPtr<T>& a,
U* b) |
| 171 { | 171 { |
| 172 return a.get() != b; | 172 return a.get() != b; |
| 173 } | 173 } |
| 174 | 174 |
| 175 template<typename T, typename U> inline bool operator!=(T* a, const RefPtr<U
>& b) | 175 template<typename T, typename U> inline bool operator!=(T* a, const RefPtr<U
>& b) |
| 176 { | 176 { |
| 177 return a != b.get(); | 177 return a != b.get(); |
| 178 } | 178 } |
| 179 | 179 |
| 180 template<typename T, typename U> inline RefPtr<T> static_pointer_cast(const
RefPtr<U>& p) | 180 template<typename T, typename U> inline RefPtr<T> static_pointer_cast(const
RefPtr<U>& p) |
| 181 { | 181 { |
| 182 return RefPtr<T>(static_cast<T*>(p.get())); | 182 return RefPtr<T>(static_cast<T*>(p.get())); |
| 183 } | 183 } |
| 184 | 184 |
| 185 template<typename T, typename U> inline RefPtr<T> const_pointer_cast(const R
efPtr<U>& p) | 185 template<typename T, typename U> inline RefPtr<T> const_pointer_cast(const R
efPtr<U>& p) |
| 186 { | 186 { |
| 187 return RefPtr<T>(const_cast<T*>(p.get())); | 187 return RefPtr<T>(const_cast<T*>(p.get())); |
| 188 } | 188 } |
| 189 | 189 |
| 190 template<typename T> inline T* getPtr(const RefPtr<T>& p) | 190 template<typename T> inline T* getPtr(const RefPtr<T>& p) |
| 191 { | 191 { |
| 192 return p.get(); | 192 return p.get(); |
| 193 } | 193 } |
| 194 | 194 |
| 195 } // namespace WTF | 195 } // namespace WTF |
| 196 | 196 |
| 197 using WTF::RefPtr; | 197 using WTF::RefPtr; |
| 198 using WTF::static_pointer_cast; | 198 using WTF::static_pointer_cast; |
| 199 using WTF::const_pointer_cast; | 199 using WTF::const_pointer_cast; |
| 200 | 200 |
| 201 #endif // WTF_RefPtr_h | 201 #endif // WTF_RefPtr_h |
| OLD | NEW |