Diff
Modified: trunk/Source/WTF/ChangeLog (202135 => 202136)
--- trunk/Source/WTF/ChangeLog 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Source/WTF/ChangeLog 2016-06-16 20:39:45 UTC (rev 202136)
@@ -1,3 +1,19 @@
+2016-06-16 Chris Dumez <[email protected]>
+
+ Unreviewed, rolling out r202002 and r202111.
+
+ Ryosuke says this was a JSBench regression on iOS
+
+ Reverted changesets:
+
+ "Make HashMap and HashSet work with Refs"
+ https://bugs.webkit.org/show_bug.cgi?id=158638
+ http://trac.webkit.org/changeset/202002
+
+ "Improve HashMap and HashSet support for Ref"
+ https://bugs.webkit.org/show_bug.cgi?id=158789
+ http://trac.webkit.org/changeset/202111
+
2016-06-15 Chris Dumez <[email protected]>
[Cocoa] Clean up / optimize ResourceResponse::platformLazyInit(InitLevel)
Modified: trunk/Source/WTF/wtf/GetPtr.h (202135 => 202136)
--- trunk/Source/WTF/wtf/GetPtr.h 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Source/WTF/wtf/GetPtr.h 2016-06-16 20:39:45 UTC (rev 202136)
@@ -25,9 +25,6 @@
namespace WTF {
-enum HashTableDeletedValueType { HashTableDeletedValue };
-enum HashTableEmptyValueType { HashTableEmptyValue };
-
template <typename T> inline T* getPtr(T* p) { return p; }
template <typename T> struct IsSmartPtr {
Modified: trunk/Source/WTF/wtf/HashFunctions.h (202135 => 202136)
--- trunk/Source/WTF/wtf/HashFunctions.h 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Source/WTF/wtf/HashFunctions.h 2016-06-16 20:39:45 UTC (rev 202136)
@@ -149,10 +149,6 @@
template<typename T> struct PtrHash : PtrHashBase<T, IsSmartPtr<T>::value> {
};
- template<typename P> struct PtrHash<Ref<P>> : PtrHashBase<Ref<P>, IsSmartPtr<Ref<P>>::value> {
- static const bool safeToCompareToEmptyOrDeleted = false;
- };
-
// default hash function for each type
template<typename T> struct DefaultHash;
@@ -198,8 +194,6 @@
template<typename P> struct DefaultHash<P*> { typedef PtrHash<P*> Hash; };
template<typename P> struct DefaultHash<RefPtr<P>> { typedef PtrHash<RefPtr<P>> Hash; };
- template<typename P> struct DefaultHash<Ref<P>> { typedef PtrHash<Ref<P>> Hash; };
-
template<typename P, typename Deleter> struct DefaultHash<std::unique_ptr<P, Deleter>> { typedef PtrHash<std::unique_ptr<P, Deleter>> Hash; };
// make IntPairHash the default hash function for pairs of (at most) 32-bit integers.
Modified: trunk/Source/WTF/wtf/HashMap.h (202135 => 202136)
--- trunk/Source/WTF/wtf/HashMap.h 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Source/WTF/wtf/HashMap.h 2016-06-16 20:39:45 UTC (rev 202136)
@@ -54,7 +54,6 @@
private:
typedef typename MappedTraits::PeekType MappedPeekType;
- typedef typename MappedTraits::TakeType MappedTakeType;
typedef HashArg HashFunctions;
@@ -131,7 +130,7 @@
void removeIf(const Functor& functor);
void clear();
- MappedTakeType take(const KeyType&); // efficient combination of get with remove
+ MappedType take(const KeyType&); // efficient combination of get with remove
// An alternate version of find() that finds the object by hashing and comparing
// with some other type, to avoid the cost of type conversion. HashTranslator
@@ -157,7 +156,7 @@
template<typename K = KeyType> typename std::enable_if<IsSmartPtr<K>::value, MappedPeekType>::type inlineGet(typename GetPtrHelper<K>::PtrType) const;
template<typename K = KeyType> typename std::enable_if<IsSmartPtr<K>::value, MappedPeekType>::type get(typename GetPtrHelper<K>::PtrType) const;
template<typename K = KeyType> typename std::enable_if<IsSmartPtr<K>::value, bool>::type remove(typename GetPtrHelper<K>::PtrType);
- template<typename K = KeyType> typename std::enable_if<IsSmartPtr<K>::value, MappedTakeType>::type take(typename GetPtrHelper<K>::PtrType);
+ template<typename K = KeyType> typename std::enable_if<IsSmartPtr<K>::value, MappedType>::type take(typename GetPtrHelper<K>::PtrType);
void checkConsistency() const;
@@ -182,8 +181,8 @@
template<typename T, typename U> static bool equal(const T& a, const U& b) { return HashFunctions::equal(a, b); }
template<typename T, typename U, typename V> static void translate(T& location, U&& key, V&& mapped)
{
- ValueTraits::KeyTraits::assignToEmpty(location.key, std::forward<U>(key));
- ValueTraits::ValueTraits::assignToEmpty(location.value, std::forward<V>(mapped));
+ location.key = std::forward<U>(key);
+ location.value = std::forward<V>(mapped);
}
};
@@ -193,8 +192,8 @@
template<typename T, typename U> static bool equal(const T& a, const U& b) { return HashFunctions::equal(a, b); }
template<typename T, typename U, typename Functor> static void translate(T& location, U&& key, const Functor& functor)
{
- ValueTraits::KeyTraits::assignToEmpty(location.key, std::forward<U>(key));
- ValueTraits::ValueTraits::assignToEmpty(location.value, functor());
+ location.key = std::forward<U>(key);
+ location.value = functor();
}
};
@@ -435,12 +434,12 @@
}
template<typename T, typename U, typename V, typename W, typename MappedTraits>
-auto HashMap<T, U, V, W, MappedTraits>::take(const KeyType& key) -> MappedTakeType
+auto HashMap<T, U, V, W, MappedTraits>::take(const KeyType& key) -> MappedType
{
iterator it = find(key);
if (it == end())
- return MappedTraits::take(MappedTraits::emptyValue());
- auto value = MappedTraits::take(WTFMove(it->value));
+ return MappedTraits::emptyValue();
+ MappedType value = WTFMove(it->value);
remove(it);
return value;
}
@@ -492,12 +491,12 @@
template<typename T, typename U, typename V, typename W, typename X>
template<typename K>
-inline auto HashMap<T, U, V, W, X>::take(typename GetPtrHelper<K>::PtrType key) -> typename std::enable_if<IsSmartPtr<K>::value, MappedTakeType>::type
+inline auto HashMap<T, U, V, W, X>::take(typename GetPtrHelper<K>::PtrType key) -> typename std::enable_if<IsSmartPtr<K>::value, MappedType>::type
{
iterator it = find(key);
if (it == end())
- return MappedTraits::take(MappedTraits::emptyValue());
- auto value = MappedTraits::take(WTFMove(it->value));
+ return MappedTraits::emptyValue();
+ MappedType value = WTFMove(it->value);
remove(it);
return value;
}
Modified: trunk/Source/WTF/wtf/HashSet.h (202135 => 202136)
--- trunk/Source/WTF/wtf/HashSet.h 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Source/WTF/wtf/HashSet.h 2016-06-16 20:39:45 UTC (rev 202136)
@@ -38,7 +38,6 @@
private:
typedef HashArg HashFunctions;
typedef TraitsArg ValueTraits;
- typedef typename ValueTraits::TakeType TakeType;
public:
typedef typename ValueTraits::TraitType ValueType;
@@ -106,15 +105,15 @@
void removeIf(const Functor&);
void clear();
- TakeType take(const ValueType&);
- TakeType take(iterator);
- TakeType takeAny();
+ ValueType take(const ValueType&);
+ ValueType take(iterator);
+ ValueType takeAny();
// Overloads for smart pointer values that take the raw pointer type as the parameter.
template<typename V = ValueType> typename std::enable_if<IsSmartPtr<V>::value, iterator>::type find(typename GetPtrHelper<V>::PtrType) const;
template<typename V = ValueType> typename std::enable_if<IsSmartPtr<V>::value, bool>::type contains(typename GetPtrHelper<V>::PtrType) const;
template<typename V = ValueType> typename std::enable_if<IsSmartPtr<V>::value, bool>::type remove(typename GetPtrHelper<V>::PtrType);
- template<typename V = ValueType> typename std::enable_if<IsSmartPtr<V>::value, TakeType>::type take(typename GetPtrHelper<V>::PtrType);
+ template<typename V = ValueType> typename std::enable_if<IsSmartPtr<V>::value, ValueType>::type take(typename GetPtrHelper<V>::PtrType);
static bool isValidValue(const ValueType&);
@@ -129,14 +128,11 @@
template<typename T> static const T& extract(const T& t) { return t; }
};
- template<typename ValueTraits, typename HashFunctions>
+ template<typename HashFunctions>
struct HashSetTranslator {
template<typename T> static unsigned hash(const T& key) { return HashFunctions::hash(key); }
template<typename T, typename U> static bool equal(const T& a, const U& b) { return HashFunctions::equal(a, b); }
- template<typename T, typename U, typename V> static void translate(T& location, U&&, V&& value)
- {
- ValueTraits::assignToEmpty(location, std::forward<V>(value));
- }
+ template<typename T, typename U, typename V> static void translate(T& location, U&&, V&& value) { location = std::forward<V>(value); }
};
template<typename Translator>
@@ -270,24 +266,24 @@
}
template<typename T, typename U, typename V>
- inline auto HashSet<T, U, V>::take(iterator it) -> TakeType
+ inline auto HashSet<T, U, V>::take(iterator it) -> ValueType
{
if (it == end())
- return ValueTraits::take(ValueTraits::emptyValue());
+ return ValueTraits::emptyValue();
- auto result = ValueTraits::take(WTFMove(const_cast<ValueType&>(*it)));
+ ValueType result = WTFMove(const_cast<ValueType&>(*it));
remove(it);
return result;
}
template<typename T, typename U, typename V>
- inline auto HashSet<T, U, V>::take(const ValueType& value) -> TakeType
+ inline auto HashSet<T, U, V>::take(const ValueType& value) -> ValueType
{
return take(find(value));
}
template<typename T, typename U, typename V>
- inline auto HashSet<T, U, V>::takeAny() -> TakeType
+ inline auto HashSet<T, U, V>::takeAny() -> ValueType
{
return take(begin());
}
@@ -296,14 +292,14 @@
template<typename V>
inline auto HashSet<Value, HashFunctions, Traits>::find(typename GetPtrHelper<V>::PtrType value) const -> typename std::enable_if<IsSmartPtr<V>::value, iterator>::type
{
- return m_impl.template find<HashSetTranslator<Traits, HashFunctions>>(value);
+ return m_impl.template find<HashSetTranslator<HashFunctions>>(value);
}
template<typename Value, typename HashFunctions, typename Traits>
template<typename V>
inline auto HashSet<Value, HashFunctions, Traits>::contains(typename GetPtrHelper<V>::PtrType value) const -> typename std::enable_if<IsSmartPtr<V>::value, bool>::type
{
- return m_impl.template contains<HashSetTranslator<Traits, HashFunctions>>(value);
+ return m_impl.template contains<HashSetTranslator<HashFunctions>>(value);
}
template<typename Value, typename HashFunctions, typename Traits>
@@ -315,7 +311,7 @@
template<typename Value, typename HashFunctions, typename Traits>
template<typename V>
- inline auto HashSet<Value, HashFunctions, Traits>::take(typename GetPtrHelper<V>::PtrType value) -> typename std::enable_if<IsSmartPtr<V>::value, TakeType>::type
+ inline auto HashSet<Value, HashFunctions, Traits>::take(typename GetPtrHelper<V>::PtrType value) -> typename std::enable_if<IsSmartPtr<V>::value, ValueType>::type
{
return take(find(value));
}
Modified: trunk/Source/WTF/wtf/HashTable.h (202135 => 202136)
--- trunk/Source/WTF/wtf/HashTable.h 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Source/WTF/wtf/HashTable.h 2016-06-16 20:39:45 UTC (rev 202136)
@@ -279,14 +279,11 @@
const_iterator m_iterator;
};
- template<typename ValueTraits, typename HashFunctions> class IdentityHashTranslator {
+ template<typename HashFunctions> class IdentityHashTranslator {
public:
template<typename T> static unsigned hash(const T& key) { return HashFunctions::hash(key); }
template<typename T, typename U> static bool equal(const T& a, const U& b) { return HashFunctions::equal(a, b); }
- template<typename T, typename U, typename V> static void translate(T& location, const U&, V&& value)
- {
- ValueTraits::assignToEmpty(location, std::forward<V>(value));
- }
+ template<typename T, typename U, typename V> static void translate(T& location, const U&, V&& value) { location = std::forward<V>(value); }
};
template<typename IteratorType> struct HashTableAddResult {
@@ -306,7 +303,7 @@
typedef Traits ValueTraits;
typedef Key KeyType;
typedef Value ValueType;
- typedef IdentityHashTranslator<ValueTraits, HashFunctions> IdentityTranslatorType;
+ typedef IdentityHashTranslator<HashFunctions> IdentityTranslatorType;
typedef HashTableAddResult<iterator> AddResult;
#if DUMP_HASHTABLE_STATS_PER_TABLE
Modified: trunk/Source/WTF/wtf/HashTraits.h (202135 => 202136)
--- trunk/Source/WTF/wtf/HashTraits.h 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Source/WTF/wtf/HashTraits.h 2016-06-16 20:39:45 UTC (rev 202136)
@@ -21,11 +21,10 @@
#ifndef WTF_HashTraits_h
#define WTF_HashTraits_h
-#include <limits>
-#include <utility>
#include <wtf/HashFunctions.h>
-#include <wtf/Optional.h>
#include <wtf/StdLibExtras.h>
+#include <utility>
+#include <limits>
namespace WTF {
@@ -62,18 +61,9 @@
static T emptyValue() { return T(); }
- template<typename U, typename V>
- static void assignToEmpty(U& emptyValue, V&& value)
- {
- emptyValue = std::forward<V>(value);
- }
-
// Type for return value of functions that do not transfer ownership, such as get.
typedef T PeekType;
template<typename U> static U&& peek(U&& value) { return std::forward<U>(value); }
-
- typedef T TakeType;
- template<typename U> static TakeType take(U&& value) { return std::forward<U>(value); }
};
template<typename T> struct HashTraits : GenericHashTraits<T> { };
@@ -175,23 +165,6 @@
}
};
-template<typename P> struct HashTraits<Ref<P>> : SimpleClassHashTraits<Ref<P>> {
- static const bool emptyValueIsZero = true;
- static Ref<P> emptyValue() { return HashTableEmptyValue; }
-
- static const bool hasIsEmptyValueFunction = true;
- static bool isEmptyValue(const Ref<P>& value) { return value.isHashTableEmptyValue(); }
-
- static void assignToEmpty(Ref<P>& emptyValue, Ref<P>&& newValue) { ASSERT(isEmptyValue(emptyValue)); emptyValue.assignToHashTableEmptyValue(WTFMove(newValue)); }
-
- typedef P* PeekType;
- static PeekType peek(const Ref<P>& value) { return const_cast<PeekType>(value.ptrAllowingHashTableEmptyValue()); }
- static PeekType peek(P* value) { return value; }
-
- typedef Optional<Ref<P>> TakeType;
- static TakeType take(Ref<P>&& value) { return isEmptyValue(value) ? Nullopt : Optional<Ref<P>>(WTFMove(value)); }
-};
-
template<> struct HashTraits<String> : SimpleClassHashTraits<String> {
static const bool hasIsEmptyValueFunction = true;
static bool isEmptyValue(const String&);
Modified: trunk/Source/WTF/wtf/Ref.h (202135 => 202136)
--- trunk/Source/WTF/wtf/Ref.h 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Source/WTF/wtf/Ref.h 2016-06-16 20:39:45 UTC (rev 202136)
@@ -114,25 +114,6 @@
return *this;
}
- // Hash table deleted/empty values, which are only constructed and never copied or destroyed.
- Ref(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { }
- bool isHashTableDeletedValue() const { return m_ptr == hashTableDeletedValue(); }
- static T* hashTableDeletedValue() { return reinterpret_cast<T*>(-1); }
-
- Ref(HashTableEmptyValueType) : m_ptr(hashTableEmptyValue()) { }
- bool isHashTableEmptyValue() const { return m_ptr == hashTableEmptyValue(); }
- static T* hashTableEmptyValue() { return nullptr; }
-
- const T* ptrAllowingHashTableEmptyValue() const { ASSERT(m_ptr || isHashTableEmptyValue()); return m_ptr; }
- T* ptrAllowingHashTableEmptyValue() { ASSERT(m_ptr || isHashTableEmptyValue()); return m_ptr; }
-
- void assignToHashTableEmptyValue(Ref&& reference)
- {
- ASSERT(m_ptr == hashTableEmptyValue());
- m_ptr = &reference.leakRef();
- ASSERT(m_ptr);
- }
-
const T* operator->() const { ASSERT(m_ptr); return m_ptr; }
T* operator->() { ASSERT(m_ptr); return m_ptr; }
@@ -205,16 +186,12 @@
static T* getPtr(const Ref<T>& p) { return const_cast<T*>(p.ptr()); }
};
-template <typename T>
-struct IsSmartPtr<Ref<T>> {
- static const bool value = true;
-};
-
template<typename T>
inline Ref<T> adoptRef(T& reference)
{
adopted(&reference);
return Ref<T>(reference, Ref<T>::Adopt);
+
}
template<typename ExpectedType, typename ArgType> inline bool is(Ref<ArgType>& source)
Modified: trunk/Source/WTF/wtf/RefPtr.h (202135 => 202136)
--- trunk/Source/WTF/wtf/RefPtr.h 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Source/WTF/wtf/RefPtr.h 2016-06-16 20:39:45 UTC (rev 202136)
@@ -34,6 +34,8 @@
template<typename T> class RefPtr;
template<typename T> RefPtr<T> adoptRef(T*);
+enum HashTableDeletedValueType { HashTableDeletedValue };
+
template<typename T> class RefPtr {
WTF_MAKE_FAST_ALLOCATED;
public:
Modified: trunk/Tools/ChangeLog (202135 => 202136)
--- trunk/Tools/ChangeLog 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Tools/ChangeLog 2016-06-16 20:39:45 UTC (rev 202136)
@@ -1,3 +1,19 @@
+2016-06-16 Chris Dumez <[email protected]>
+
+ Unreviewed, rolling out r202002 and r202111.
+
+ Ryosuke says this was a JSBench regression on iOS
+
+ Reverted changesets:
+
+ "Make HashMap and HashSet work with Refs"
+ https://bugs.webkit.org/show_bug.cgi?id=158638
+ http://trac.webkit.org/changeset/202002
+
+ "Improve HashMap and HashSet support for Ref"
+ https://bugs.webkit.org/show_bug.cgi?id=158789
+ http://trac.webkit.org/changeset/202111
+
2016-06-15 Simon Fraser <[email protected]>
[iOS WK2] On iPad, indirect focussing of a text field doesn't always scroll to the correct location
Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/HashMap.cpp (202135 => 202136)
--- trunk/Tools/TestWebKitAPI/Tests/WTF/HashMap.cpp 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/HashMap.cpp 2016-06-16 20:39:45 UTC (rev 202136)
@@ -701,196 +701,4 @@
EXPECT_EQ(observer->count, 0u);
}
-TEST(WTF_HashMap, Ref_Key)
-{
- {
- HashMap<Ref<RefLogger>, int> map;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- map.add(WTFMove(ref), 1);
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashMap<Ref<RefLogger>, int> map;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- map.set(WTFMove(ref), 1);
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashMap<Ref<RefLogger>, int> map;
-
- RefLogger a("a");
- Ref<RefLogger> refA(a);
- map.add(WTFMove(refA), 1);
-
- Ref<RefLogger> refA2(a);
- map.set(WTFMove(refA2), 1);
- }
-
- ASSERT_STREQ("ref(a) ref(a) deref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashMap<Ref<RefLogger>, int> map;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- map.ensure(WTFMove(ref), []() {
- return 1;
- });
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashMap<Ref<RefLogger>, int> map;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- map.add(WTFMove(ref), 1);
-
- auto it = map.find(&a);
- ASSERT_TRUE(it != map.end());
-
- ASSERT_EQ(it->key.ptr(), &a);
- ASSERT_EQ(it->value, 1);
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashMap<Ref<RefLogger>, int> map;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- map.add(WTFMove(ref), 1);
-
- map.remove(&a);
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashMap<Ref<RefLogger>, int> map;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- map.add(WTFMove(ref), 1);
-
- int i = map.take(&a);
- ASSERT_EQ(i, 1);
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-}
-
-TEST(WTF_HashMap, Ref_Value)
-{
- {
- HashMap<int, Ref<RefLogger>> map;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- map.add(1, WTFMove(ref));
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashMap<int, Ref<RefLogger>> map;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- map.set(1, WTFMove(ref));
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashMap<int, Ref<RefLogger>> map;
-
- RefLogger a("a");
- Ref<RefLogger> refA(a);
- map.add(1, WTFMove(refA));
-
- RefLogger b("b");
- Ref<RefLogger> refB(b);
- map.set(1, WTFMove(refB));
- }
-
- ASSERT_STREQ("ref(a) ref(b) deref(a) deref(b) ", takeLogStr().c_str());
-
- {
- HashMap<int, Ref<RefLogger>> map;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- map.add(1, WTFMove(ref));
-
- auto aGet = map.get(1);
- ASSERT_EQ(aGet, &a);
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashMap<int, Ref<RefLogger>> map;
-
- auto emptyGet = map.get(1);
- ASSERT_TRUE(emptyGet == nullptr);
- }
-
- {
- HashMap<int, Ref<RefLogger>> map;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- map.add(1, WTFMove(ref));
-
- auto aOut = map.take(1);
- ASSERT_TRUE(static_cast<bool>(aOut));
- ASSERT_EQ(&a, aOut.value().ptr());
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashMap<int, Ref<RefLogger>> map;
-
- auto emptyTake = map.take(1);
- ASSERT_FALSE(static_cast<bool>(emptyTake));
- }
-
- {
- HashMap<int, Ref<RefLogger>> map;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- map.add(1, WTFMove(ref));
- map.remove(1);
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashMap<int, Ref<RefLogger>> map;
-
- RefLogger a("a");
- map.ensure(1, [&]() {
- Ref<RefLogger> ref(a);
- return ref;
- });
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-}
-
-
-
} // namespace TestWebKitAPI
Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp (202135 => 202136)
--- trunk/Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp 2016-06-16 20:39:44 UTC (rev 202135)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/HashSet.cpp 2016-06-16 20:39:45 UTC (rev 202136)
@@ -27,7 +27,6 @@
#include "Counters.h"
#include "MoveOnly.h"
-#include "RefLogger.h"
#include <wtf/HashSet.h>
#include <wtf/RefPtr.h>
@@ -349,84 +348,5 @@
EXPECT_TRUE(observedBucket == observerAddress || observedBucket == reinterpret_cast<const DestructorObserver*>(-1));
}
-TEST(WTF_HashSet, Ref)
-{
- {
- HashSet<Ref<RefLogger>> set;
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- set.add(WTFMove(ref));
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashSet<Ref<RefLogger>> set;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- set.add(ref.copyRef());
- }
-
- ASSERT_STREQ("ref(a) ref(a) deref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashSet<Ref<RefLogger>> set;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- set.add(WTFMove(ref));
- set.remove(&a);
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashSet<Ref<RefLogger>> set;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- set.add(WTFMove(ref));
-
- auto aOut = set.take(&a);
- ASSERT_TRUE(static_cast<bool>(aOut));
- ASSERT_EQ(&a, aOut.value().ptr());
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashSet<Ref<RefLogger>> set;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- set.add(WTFMove(ref));
-
- auto aOut = set.takeAny();
- ASSERT_TRUE(static_cast<bool>(aOut));
- ASSERT_EQ(&a, aOut.value().ptr());
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-
- {
- HashSet<Ref<RefLogger>> set;
- auto emptyTake = set.takeAny();
- ASSERT_FALSE(static_cast<bool>(emptyTake));
- }
-
- {
- HashSet<Ref<RefLogger>> set;
-
- RefLogger a("a");
- Ref<RefLogger> ref(a);
- set.add(WTFMove(ref));
-
- ASSERT_TRUE(set.contains(&a));
- }
-
- ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
-}
-
} // namespace TestWebKitAPI