⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 155380 in webkit


Ignore:
Timestamp:
Sep 9, 2013, 2:04:24 PM (13 years ago)
Author:
andersca@apple.com
Message:

Stop using WTF type traits in WebCore
https://bugs.webkit.org/show_bug.cgi?id=121042

Reviewed by Andreas Kling.

Replace uses of WTF type traits in CrossThreadCopier with a simpler solution
that uses std::is_convertible_to and some helpers.

  • dom/CrossThreadTask.h:
  • platform/CrossThreadCopier.h:
  • platform/MainThreadTask.h:
Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r155378 r155380  
     12013-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
    1152013-09-06  Ryosuke Niwa  <rniwa@webkit.org>
    216
  • trunk/Source/WebCore/dom/CrossThreadTask.h

    r95901 r155380  
    3737#include <wtf/PassOwnPtr.h>
    3838#include <wtf/PassRefPtr.h>
    39 #include <wtf/TypeTraits.h>
    4039
    4140namespace WebCore {
  • trunk/Source/WebCore/platform/CrossThreadCopier.h

    r107357 r155380  
    3838#include <wtf/RefPtr.h>
    3939#include <wtf/Threading.h>
    40 #include <wtf/TypeTraits.h>
    4140
    4241namespace WebCore {
     
    5150    struct CrossThreadResourceRequestData;
    5251    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    };
    5377
    5478    template<typename T> struct CrossThreadCopierPassThrough {
     
    79103    // Custom copy methods.
    80104    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!");
    90107
    91108        typedef PassRefPtr<RefCountedType> Type;
     
    129146    };
    130147
    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> {
    136150    };
    137151
  • trunk/Source/WebCore/platform/MainThreadTask.h

    r144770 r155380  
    3838#include <wtf/PassOwnPtr.h>
    3939#include <wtf/PassRefPtr.h>
    40 #include <wtf/TypeTraits.h>
    4140
    4241namespace WebCore {
Note: See TracChangeset for help on using the changeset viewer.