Changeset 190572 in webkit


Ignore:
Timestamp:
Oct 5, 2015 1:31:41 PM (9 years ago)
Author:
mmaxfield@apple.com
Message:

Allow WKRetainPtrs to be used as keys in hashing data structures
https://bugs.webkit.org/show_bug.cgi?id=149762

Reviewed by Anders Carlsson.

Source/WebKit2:

Use RefPtr as a model.

  • UIProcess/API/cpp/WKRetainPtr.h:

(WebKit::WKRetainPtr::WKRetainPtr):
(WebKit::WKRetainPtr::isHashTableDeletedValue):
(WebKit::WKRetainPtr::hashTableDeletedValue):
(WTF::HashTraits<WKRetainPtr<P>>::emptyValue):
(WTF::HashTraits<WKRetainPtr<P>>::peek):

Tools:

  • TestWebKitAPI/PlatformGTK.cmake:
  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WebKit2/WKRetainPtr.cpp: Added.

(TestWebKitAPI::TEST):

Location:
trunk
Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r190568 r190572  
     12015-10-05  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Allow WKRetainPtrs to be used as keys in hashing data structures
     4        https://bugs.webkit.org/show_bug.cgi?id=149762
     5
     6        Reviewed by Anders Carlsson.
     7
     8        Use RefPtr as a model.
     9
     10        * UIProcess/API/cpp/WKRetainPtr.h:
     11        (WebKit::WKRetainPtr::WKRetainPtr):
     12        (WebKit::WKRetainPtr::isHashTableDeletedValue):
     13        (WebKit::WKRetainPtr::hashTableDeletedValue):
     14        (WTF::HashTraits<WKRetainPtr<P>>::emptyValue):
     15        (WTF::HashTraits<WKRetainPtr<P>>::peek):
     16
    1172015-10-05  Enrica Casucci  <enrica@apple.com>
    218
  • trunk/Source/WebKit2/UIProcess/API/cpp/WKRetainPtr.h

    r168541 r190572  
    2929#include <WebKit/WKType.h>
    3030#include <algorithm>
     31#include <wtf/HashFunctions.h>
     32#include <wtf/HashTraits.h>
     33#include <wtf/RefPtr.h>
    3134
    3235namespace WebKit {
     
    8487            WKRelease(ptr);
    8588    }
     89
     90    // Hash table deleted values, which are only constructed and never copied or destroyed.
     91    WKRetainPtr(WTF::HashTableDeletedValueType)
     92        : m_ptr(hashTableDeletedValue())
     93    {
     94    }
     95
     96    bool isHashTableDeletedValue() const { return m_ptr == hashTableDeletedValue(); }
     97    constexpr static T hashTableDeletedValue() { return reinterpret_cast<T>(-1); }
    8698
    8799    PtrType get() const { return m_ptr; }
     
    251263using WebKit::adoptWK;
    252264
     265namespace WTF {
     266
     267template <typename T> struct IsSmartPtr<WKRetainPtr<T>> {
     268    static const bool value = true;
     269};
     270
     271template<typename P> struct DefaultHash<WKRetainPtr<P>> {
     272    typedef PtrHash<WKRetainPtr<P>> Hash;
     273};
     274
     275template<typename P> struct HashTraits<WKRetainPtr<P>> : SimpleClassHashTraits<WKRetainPtr<P>> {
     276    static P emptyValue() { return nullptr; }
     277
     278    typedef P PeekType;
     279    static PeekType peek(const WKRetainPtr<P>& value) { return value.get(); }
     280    static PeekType peek(P value) { return value; }
     281};
     282
     283} // namespace WTF
     284
    253285#endif // WKRetainPtr_h
  • trunk/Tools/ChangeLog

    r190565 r190572  
     12015-10-05  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Allow WKRetainPtrs to be used as keys in hashing data structures
     4        https://bugs.webkit.org/show_bug.cgi?id=149762
     5
     6        Reviewed by Anders Carlsson.
     7
     8        * TestWebKitAPI/PlatformGTK.cmake:
     9        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     10        * TestWebKitAPI/Tests/WebKit2/WKRetainPtr.cpp: Added.
     11        (TestWebKitAPI::TEST):
     12
    1132015-10-05  Simon Fraser  <simon.fraser@apple.com>
    214
  • trunk/Tools/TestWebKitAPI/PlatformGTK.cmake

    r188239 r190572  
    111111    ${TESTWEBKITAPI_DIR}/Tests/WebKit2/WKPageGetScaleFactorNotZero.cpp
    112112    ${TESTWEBKITAPI_DIR}/Tests/WebKit2/WKPreferences.cpp
     113    ${TESTWEBKITAPI_DIR}/Tests/WebKit2/WKRetainPtr.cpp
    113114    ${TESTWEBKITAPI_DIR}/Tests/WebKit2/WKString.cpp
    114115    ${TESTWEBKITAPI_DIR}/Tests/WebKit2/WKStringJSString.cpp
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r189997 r190572  
    2323                1AEDE22613E5E7E700E62FE8 /* InjectedBundleControllerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1AEDE22413E5E7A000E62FE8 /* InjectedBundleControllerMac.mm */; };
    2424                1CB9BC381A67482300FE5678 /* WeakPtr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CB9BC371A67482300FE5678 /* WeakPtr.cpp */; };
     25                1CF0D3791BBF2F3D00B4EF54 /* WKRetainPtr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1CF0D3781BBF2F3D00B4EF54 /* WKRetainPtr.cpp */; };
    2526                260BA5791B1D2E7B004FA07C /* DFACombiner.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 260BA5781B1D2E7B004FA07C /* DFACombiner.cpp */; };
    2627                26DF5A6315A2A27E003689C2 /* CancelLoadFromResourceLoadDelegate.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 26DF5A6115A2A22B003689C2 /* CancelLoadFromResourceLoadDelegate.html */; };
     
    471472                1AFDE6541953B2C000C48FFA /* Optional.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Optional.cpp; sourceTree = "<group>"; };
    472473                1CB9BC371A67482300FE5678 /* WeakPtr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WeakPtr.cpp; sourceTree = "<group>"; };
     474                1CF0D3781BBF2F3D00B4EF54 /* WKRetainPtr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKRetainPtr.cpp; sourceTree = "<group>"; };
    473475                260BA5781B1D2E7B004FA07C /* DFACombiner.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DFACombiner.cpp; sourceTree = "<group>"; };
    474476                260BA57A1B1D2EE2004FA07C /* DFAHelpers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DFAHelpers.h; sourceTree = "<group>"; };
     
    11421144                                BC90995D12567BC100083756 /* WKString.cpp */,
    11431145                                BC9099931256ACF100083756 /* WKStringJSString.cpp */,
     1146                                1CF0D3781BBF2F3D00B4EF54 /* WKRetainPtr.cpp */,
    11441147                        );
    11451148                        path = WebKit2;
     
    17461749                                7A5623111AD5AF3E0096B920 /* MenuTypesForMouseEvents.cpp in Sources */,
    17471750                                51CB4AD81B3A079C00C1B1C6 /* ModalAlertsSPI.cpp in Sources */,
     1751                                1CF0D3791BBF2F3D00B4EF54 /* WKRetainPtr.cpp in Sources */,
    17481752                                26F6E1F01ADC749B00DE696B /* DFAMinimizer.cpp in Sources */,
    17491753                                260BA5791B1D2E7B004FA07C /* DFACombiner.cpp in Sources */,
Note: See TracChangeset for help on using the changeset viewer.