Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Side by Side Diff: third_party/WebKit/Source/wtf/RefPtr.h

Issue 2125003002: Move CrossThreadCopier from platform/ to wtf/ Base URL: https://chromium.googlesource.com/chromium/src.git@TRV_RemoveTupleInBind
Patch Set: Rebase Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights reserved. 2 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2013 Apple Inc. All rights reserved.
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
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details. 12 * Library General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU Library General Public License 14 * You should have received a copy of the GNU Library General Public License
15 * along with this library; see the file COPYING.LIB. If not, write to 15 * along with this library; see the file COPYING.LIB. If not, write to
16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA. 17 * Boston, MA 02110-1301, USA.
18 * 18 *
19 */ 19 */
20 20
21 // RefPtr and PassRefPtr are documented at http://webkit.org/coding/RefPtr.html 21 // RefPtr and PassRefPtr are documented at http://webkit.org/coding/RefPtr.html
22 22
23 #ifndef WTF_RefPtr_h 23 #ifndef WTF_RefPtr_h
24 #define WTF_RefPtr_h 24 #define WTF_RefPtr_h
25 25
26 #include "wtf/Allocator.h" 26 #include "wtf/Allocator.h"
27 #include "wtf/CrossThreadCopier.h"
27 #include "wtf/HashTableDeletedValueType.h" 28 #include "wtf/HashTableDeletedValueType.h"
28 #include "wtf/PassRefPtr.h" 29 #include "wtf/PassRefPtr.h"
30 #include "wtf/ThreadSafeRefCounted.h"
31 #include "wtf/TypeTraits.h"
29 #include <algorithm> 32 #include <algorithm>
30 #include <utility> 33 #include <utility>
31 34
35 class SkRefCnt;
36
32 namespace WTF { 37 namespace WTF {
33 38
34 template <typename T> class PassRefPtr; 39 template <typename T> class PassRefPtr;
35 template <typename T> class RefPtrValuePeeker; 40 template <typename T> class RefPtrValuePeeker;
36 41
37 template <typename T> class RefPtr { 42 template <typename T> class RefPtr {
38 USING_FAST_MALLOC(RefPtr); 43 USING_FAST_MALLOC(RefPtr);
39 public: 44 public:
40 ALWAYS_INLINE RefPtr() : m_ptr(nullptr) {} 45 ALWAYS_INLINE RefPtr() : m_ptr(nullptr) {}
41 ALWAYS_INLINE RefPtr(std::nullptr_t) : m_ptr(nullptr) {} 46 ALWAYS_INLINE RefPtr(std::nullptr_t) : m_ptr(nullptr) {}
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 84
80 void swap(RefPtr&); 85 void swap(RefPtr&);
81 86
82 static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); } 87 static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); }
83 88
84 private: 89 private:
85 T* m_ptr; 90 T* m_ptr;
86 }; 91 };
87 92
88 template <typename T> 93 template <typename T>
94 struct CrossThreadCopier<RefPtr<T>> : public CrossThreadCopierPassThrough<RefPtr <T>> {
95 STATIC_ONLY(CrossThreadCopier);
96 static_assert(IsSubclassOfTemplate<T, ThreadSafeRefCounted>::value || std::i s_base_of<SkRefCnt, T>::value, "RefPtr<T> can be passed across threads only if T is ThreadSafeRefCounted or SkRefCnt.");
97 };
98
99 template <typename T>
89 template <typename U> inline RefPtr<T>::RefPtr(const PassRefPtr<U>& o, EnsurePtr ConvertibleArgDefn(U, T)) 100 template <typename U> inline RefPtr<T>::RefPtr(const PassRefPtr<U>& o, EnsurePtr ConvertibleArgDefn(U, T))
90 : m_ptr(o.leakRef()) 101 : m_ptr(o.leakRef())
91 { 102 {
92 } 103 }
93 104
94 template <typename T> inline void RefPtr<T>::clear() 105 template <typename T> inline void RefPtr<T>::clear()
95 { 106 {
96 T* ptr = m_ptr; 107 T* ptr = m_ptr;
97 m_ptr = nullptr; 108 m_ptr = nullptr;
98 derefIfNotNull(ptr); 109 derefIfNotNull(ptr);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 private: 199 private:
189 T* m_ptr; 200 T* m_ptr;
190 }; 201 };
191 202
192 } // namespace WTF 203 } // namespace WTF
193 204
194 using WTF::RefPtr; 205 using WTF::RefPtr;
195 using WTF::static_pointer_cast; 206 using WTF::static_pointer_cast;
196 207
197 #endif // WTF_RefPtr_h 208 #endif // WTF_RefPtr_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698