Changeset 155380 in webkit
- Timestamp:
- Sep 9, 2013, 2:04:24 PM (13 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
dom/CrossThreadTask.h (modified) (1 diff)
-
platform/CrossThreadCopier.h (modified) (4 diffs)
-
platform/MainThreadTask.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r155378 r155380 1 2013-09-09 Anders Carlsson <andersca@apple.com> 2 3 Stop using WTF type traits in WebCore 4 https://bugs.webkit.org/show_bug.cgi?id=121042 5 6 Reviewed by Andreas Kling. 7 8 Replace uses of WTF type traits in CrossThreadCopier with a simpler solution 9 that uses std::is_convertible_to and some helpers. 10 11 * dom/CrossThreadTask.h: 12 * platform/CrossThreadCopier.h: 13 * platform/MainThreadTask.h: 14 1 15 2013-09-06 Ryosuke Niwa <rniwa@webkit.org> 2 16 -
trunk/Source/WebCore/dom/CrossThreadTask.h
r95901 r155380 37 37 #include <wtf/PassOwnPtr.h> 38 38 #include <wtf/PassRefPtr.h> 39 #include <wtf/TypeTraits.h>40 39 41 40 namespace WebCore { -
trunk/Source/WebCore/platform/CrossThreadCopier.h
r107357 r155380 38 38 #include <wtf/RefPtr.h> 39 39 #include <wtf/Threading.h> 40 #include <wtf/TypeTraits.h>41 40 42 41 namespace WebCore { … … 51 50 struct CrossThreadResourceRequestData; 52 51 struct ThreadableLoaderOptions; 52 53 struct CrossThreadCopierBaseHelper { 54 template<typename T> struct RemovePointer { 55 typedef T Type; 56 }; 57 template<typename T> struct RemovePointer<T*> { 58 typedef T Type; 59 }; 60 61 template<typename T> struct RemovePointer<RefPtr<T>> { 62 typedef T Type; 63 }; 64 65 template<typename T> struct RemovePointer<PassRefPtr<T>> { 66 typedef T Type; 67 }; 68 69 template<typename T> struct IsConvertibleToInteger { 70 static const bool value = std::is_integral<T>::value || std::is_convertible<T, long double>::value; 71 }; 72 73 template<typename T> struct IsThreadSafeRefCountedPointer { 74 static const bool value = std::is_convertible<typename RemovePointer<T>::Type*, ThreadSafeRefCounted<typename RemovePointer<T>::Type>*>::value; 75 }; 76 }; 53 77 54 78 template<typename T> struct CrossThreadCopierPassThrough { … … 79 103 // Custom copy methods. 80 104 template<typename T> struct CrossThreadCopierBase<false, true, T> { 81 typedef typename WTF::RemoveTemplate<T, RefPtr>::Type TypeWithoutRefPtr; 82 typedef typename WTF::RemoveTemplate<TypeWithoutRefPtr, PassRefPtr>::Type TypeWithoutPassRefPtr; 83 typedef typename WTF::RemovePointer<TypeWithoutPassRefPtr>::Type RefCountedType; 84 85 // Verify that only one of the above did a change. 86 COMPILE_ASSERT((WTF::IsSameType<RefPtr<RefCountedType>, T>::value 87 || WTF::IsSameType<PassRefPtr<RefCountedType>, T>::value 88 || WTF::IsSameType<RefCountedType*, T>::value), 89 OnlyAllowOneTypeModification); 105 typedef typename CrossThreadCopierBaseHelper::RemovePointer<T>::Type RefCountedType; 106 static_assert(std::is_convertible<RefCountedType*, ThreadSafeRefCounted<RefCountedType>*>::value, "T is not convertible to ThreadSafeRefCounted!"); 90 107 91 108 typedef PassRefPtr<RefCountedType> Type; … … 129 146 }; 130 147 131 template<typename T> struct CrossThreadCopier : public CrossThreadCopierBase<WTF::IsConvertibleToInteger<T>::value, 132 WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, RefPtr>::Type, ThreadSafeRefCounted>::value 133 || WTF::IsSubclassOfTemplate<typename WTF::RemovePointer<T>::Type, ThreadSafeRefCounted>::value 134 || WTF::IsSubclassOfTemplate<typename WTF::RemoveTemplate<T, PassRefPtr>::Type, ThreadSafeRefCounted>::value, 135 T> { 148 template<typename T> 149 struct CrossThreadCopier : public CrossThreadCopierBase<CrossThreadCopierBaseHelper::IsConvertibleToInteger<T>::value, CrossThreadCopierBaseHelper::IsThreadSafeRefCountedPointer<T>::value, T> { 136 150 }; 137 151 -
trunk/Source/WebCore/platform/MainThreadTask.h
r144770 r155380 38 38 #include <wtf/PassOwnPtr.h> 39 39 #include <wtf/PassRefPtr.h> 40 #include <wtf/TypeTraits.h>41 40 42 41 namespace WebCore {
Note:
See TracChangeset
for help on using the changeset viewer.