Title: [142924] trunk/Source/WTF
- Revision
- 142924
- Author
- [email protected]
- Date
- 2013-02-14 14:50:37 -0800 (Thu, 14 Feb 2013)
Log Message
No easy way to use a RetainPtr as a key in a HashMap using object (rather than pointer) equality
https://bugs.webkit.org/show_bug.cgi?id=109864
Reviewed by Sam Weinig and Benjamin Poulain.
Added RetainPtrObjectHashTraits and RetainPtrObjectHash, which use CFEqual
and CFHash.
* wtf/RetainPtr.h:
(RetainPtrObjectHashTraits):
(WTF::RetainPtrObjectHashTraits::emptyValue):
(WTF::RetainPtrObjectHashTraits::constructDeletedValue):
(WTF::RetainPtrObjectHashTraits::isDeletedValue):
(WTF):
(WTF::RetainPtrObjectHash::hash):
(WTF::RetainPtrObjectHash::equal):
(RetainPtrObjectHash):
Modified Paths
Diff
Modified: trunk/Source/WTF/ChangeLog (142923 => 142924)
--- trunk/Source/WTF/ChangeLog 2013-02-14 22:46:57 UTC (rev 142923)
+++ trunk/Source/WTF/ChangeLog 2013-02-14 22:50:37 UTC (rev 142924)
@@ -1,3 +1,23 @@
+2013-02-14 Dan Bernstein <[email protected]>
+
+ No easy way to use a RetainPtr as a key in a HashMap using object (rather than pointer) equality
+ https://bugs.webkit.org/show_bug.cgi?id=109864
+
+ Reviewed by Sam Weinig and Benjamin Poulain.
+
+ Added RetainPtrObjectHashTraits and RetainPtrObjectHash, which use CFEqual
+ and CFHash.
+
+ * wtf/RetainPtr.h:
+ (RetainPtrObjectHashTraits):
+ (WTF::RetainPtrObjectHashTraits::emptyValue):
+ (WTF::RetainPtrObjectHashTraits::constructDeletedValue):
+ (WTF::RetainPtrObjectHashTraits::isDeletedValue):
+ (WTF):
+ (WTF::RetainPtrObjectHash::hash):
+ (WTF::RetainPtrObjectHash::equal):
+ (RetainPtrObjectHash):
+
2013-02-14 Tony Chang <[email protected]>
Unreviewed, set svn:eol-style native for .sln, .vcproj, and .vsprops files.
Modified: trunk/Source/WTF/wtf/RetainPtr.h (142923 => 142924)
--- trunk/Source/WTF/wtf/RetainPtr.h 2013-02-14 22:46:57 UTC (rev 142923)
+++ trunk/Source/WTF/wtf/RetainPtr.h 2013-02-14 22:50:37 UTC (rev 142924)
@@ -297,6 +297,32 @@
template<typename P> struct DefaultHash<RetainPtr<P> > { typedef PtrHash<RetainPtr<P> > Hash; };
+ template <typename P>
+ struct RetainPtrObjectHashTraits : GenericHashTraits<RetainPtr<P> > {
+ static const bool emptyValueIsZero = true;
+ static const RetainPtr<P>& emptyValue()
+ {
+ static RetainPtr<P>& null = *(new RetainPtr<P>);
+ return null;
+ }
+ static const bool needsDestruction = true;
+ static void constructDeletedValue(RetainPtr<P>& slot) { new (&slot) RetainPtr<P>(HashTableDeletedValue); }
+ static bool isDeletedValue(const RetainPtr<P>& value) { return value.isHashTableDeletedValue(); }
+ };
+
+ template <typename P>
+ struct RetainPtrObjectHash {
+ static unsigned hash(const RetainPtr<P>& o)
+ {
+ ASSERT_WITH_MESSAGE(o.get(), "attempt to use null RetainPtr in HashTable");
+ return CFHash(o.get());
+ }
+ static bool equal(const RetainPtr<P>& a, const RetainPtr<P>& b)
+ {
+ return CFEqual(a.get(), b.get());
+ }
+ static const bool safeToCompareToEmptyOrDeleted = false;
+ };
} // namespace WTF
using WTF::AdoptCF;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes