Title: [203325] trunk
Revision
203325
Author
[email protected]
Date
2016-07-16 09:33:11 -0700 (Sat, 16 Jul 2016)

Log Message

Add move constructor / assignment operator to ListHashSet
https://bugs.webkit.org/show_bug.cgi?id=159837

Reviewed by Darin Adler.

Source/WTF:

Add move constructor / assignment operator to ListHashSet.

* wtf/ListHashSet.h:
(WTF::ListHashSetConstIterator::operator++):
(WTF::U>::ListHashSet):
(WTF::=):
(WTF::U>::clear):
(WTF::U>::appendNode):
(WTF::U>::prependNode):
(WTF::U>::deleteAllNodes):
(WTF::ListHashSetNode::ListHashSetNode): Deleted.

Tools:

Add API tests.

* TestWebKitAPI/Tests/WTF/ListHashSet.cpp:
(TestWebKitAPI::TEST):

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (203324 => 203325)


--- trunk/Source/WTF/ChangeLog	2016-07-16 15:21:55 UTC (rev 203324)
+++ trunk/Source/WTF/ChangeLog	2016-07-16 16:33:11 UTC (rev 203325)
@@ -1,3 +1,22 @@
+2016-07-16  Chris Dumez  <[email protected]>
+
+        Add move constructor / assignment operator to ListHashSet
+        https://bugs.webkit.org/show_bug.cgi?id=159837
+
+        Reviewed by Darin Adler.
+
+        Add move constructor / assignment operator to ListHashSet.
+
+        * wtf/ListHashSet.h:
+        (WTF::ListHashSetConstIterator::operator++):
+        (WTF::U>::ListHashSet):
+        (WTF::=):
+        (WTF::U>::clear):
+        (WTF::U>::appendNode):
+        (WTF::U>::prependNode):
+        (WTF::U>::deleteAllNodes):
+        (WTF::ListHashSetNode::ListHashSetNode): Deleted.
+
 2016-07-15  Chris Dumez  <[email protected]>
 
         Use emptyString() / nullAtom when possible

Modified: trunk/Source/WTF/wtf/ListHashSet.h (203324 => 203325)


--- trunk/Source/WTF/wtf/ListHashSet.h	2016-07-16 15:21:55 UTC (rev 203324)
+++ trunk/Source/WTF/wtf/ListHashSet.h	2016-07-16 16:33:11 UTC (rev 203325)
@@ -19,8 +19,7 @@
  *
  */
 
-#ifndef WTF_ListHashSet_h
-#define WTF_ListHashSet_h
+#pragma once
 
 #include <wtf/HashSet.h>
 
@@ -69,9 +68,11 @@
 
     typedef HashTableAddResult<iterator> AddResult;
 
-    ListHashSet();
+    ListHashSet() = default;
     ListHashSet(const ListHashSet&);
+    ListHashSet(ListHashSet&&);
     ListHashSet& operator=(const ListHashSet&);
+    ListHashSet& operator=(ListHashSet&&);
     ~ListHashSet();
 
     void swap(ListHashSet&);
@@ -149,8 +150,8 @@
     const_iterator makeConstIterator(Node*) const;
 
     HashTable<Node*, Node*, IdentityExtractor, NodeHash, NodeTraits, NodeTraits> m_impl;
-    Node* m_head;
-    Node* m_tail;
+    Node* m_head { nullptr };
+    Node* m_tail { nullptr };
 };
 
 template<typename ValueArg> struct ListHashSetNode {
@@ -159,14 +160,12 @@
     template<typename T>
     ListHashSetNode(T&& value)
         : m_value(std::forward<T>(value))
-        , m_prev(0)
-        , m_next(0)
     {
     }
 
     ValueArg m_value;
-    ListHashSetNode* m_prev;
-    ListHashSetNode* m_next;
+    ListHashSetNode* m_prev { nullptr };
+    ListHashSetNode* m_next { nullptr };
 };
 
 template<typename HashArg> struct ListHashSetNodeHashFunctions {
@@ -260,7 +259,7 @@
 
     const_iterator& operator++()
     {
-        ASSERT(m_position != 0);
+        ASSERT(m_position);
         m_position = m_position->m_next;
         return *this;
     }
@@ -307,16 +306,7 @@
 };
 
 template<typename T, typename U>
-inline ListHashSet<T, U>::ListHashSet()
-    : m_head(0)
-    , m_tail(0)
-{
-}
-
-template<typename T, typename U>
 inline ListHashSet<T, U>::ListHashSet(const ListHashSet& other)
-    : m_head(0)
-    , m_tail(0)
 {
     for (auto it = other.begin(), end = other.end(); it != end; ++it)
         add(*it);
@@ -331,6 +321,23 @@
 }
 
 template<typename T, typename U>
+inline ListHashSet<T, U>::ListHashSet(ListHashSet&& other)
+    : m_impl(WTFMove(other.m_impl))
+    , m_head(std::exchange(other.m_head, nullptr))
+    , m_tail(std::exchange(other.m_tail, nullptr))
+{
+}
+
+template<typename T, typename U>
+inline ListHashSet<T, U>& ListHashSet<T, U>::operator=(ListHashSet&& other)
+{
+    m_impl = WTFMove(other.m_impl);
+    m_head = std::exchange(other.m_head, nullptr);
+    m_tail = std::exchange(other.m_tail, nullptr);
+    return *this;
+}
+
+template<typename T, typename U>
 inline void ListHashSet<T, U>::swap(ListHashSet& other)
 {
     m_impl.swap(other.m_impl);
@@ -602,8 +609,8 @@
 {
     deleteAllNodes();
     m_impl.clear(); 
-    m_head = 0;
-    m_tail = 0;
+    m_head = nullptr;
+    m_tail = nullptr;
 }
 
 template<typename T, typename U>
@@ -637,7 +644,7 @@
 void ListHashSet<T, U>::appendNode(Node* node)
 {
     node->m_prev = m_tail;
-    node->m_next = 0;
+    node->m_next = nullptr;
 
     if (m_tail) {
         ASSERT(m_head);
@@ -653,7 +660,7 @@
 template<typename T, typename U>
 void ListHashSet<T, U>::prependNode(Node* node)
 {
-    node->m_prev = 0;
+    node->m_prev = nullptr;
     node->m_next = m_head;
 
     if (m_head)
@@ -686,7 +693,7 @@
     if (!m_head)
         return;
 
-    for (Node* node = m_head, *next = m_head->m_next; node; node = next, next = node ? node->m_next : 0)
+    for (Node* node = m_head, *next = m_head->m_next; node; node = next, next = node ? node->m_next : nullptr)
         delete node;
 }
 
@@ -705,5 +712,3 @@
 } // namespace WTF
 
 using WTF::ListHashSet;
-
-#endif /* WTF_ListHashSet_h */

Modified: trunk/Tools/ChangeLog (203324 => 203325)


--- trunk/Tools/ChangeLog	2016-07-16 15:21:55 UTC (rev 203324)
+++ trunk/Tools/ChangeLog	2016-07-16 16:33:11 UTC (rev 203325)
@@ -1,3 +1,15 @@
+2016-07-16  Chris Dumez  <[email protected]>
+
+        Add move constructor / assignment operator to ListHashSet
+        https://bugs.webkit.org/show_bug.cgi?id=159837
+
+        Reviewed by Darin Adler.
+
+        Add API tests.
+
+        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:
+        (TestWebKitAPI::TEST):
+
 2016-07-15  Benjamin Poulain  <[email protected]>
 
         [JSC] Change some parameters based on a random search

Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/ListHashSet.cpp (203324 => 203325)


--- trunk/Tools/TestWebKitAPI/Tests/WTF/ListHashSet.cpp	2016-07-16 15:21:55 UTC (rev 203324)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/ListHashSet.cpp	2016-07-16 16:33:11 UTC (rev 203325)
@@ -266,4 +266,86 @@
     ASSERT_TRUE(list.isEmpty());
 }
 
+TEST(WTF_ListHashSet, MoveConstructor)
+{
+    ListHashSet<int> list;
+    list.add(1);
+    list.add(2);
+    list.add(3);
+
+    ASSERT_EQ(3U, list.size());
+    auto iterator = list.begin();
+    ASSERT_EQ(1, *iterator);
+    ++iterator;
+    ASSERT_EQ(2, *iterator);
+    ++iterator;
+    ASSERT_EQ(3, *iterator);
+    ++iterator;
+
+    ListHashSet<int> list2(WTFMove(list));
+    ASSERT_EQ(3U, list2.size());
+    auto iterator2 = list2.begin();
+    ASSERT_EQ(1, *iterator2);
+    ++iterator2;
+    ASSERT_EQ(2, *iterator2);
+    ++iterator2;
+    ASSERT_EQ(3, *iterator2);
+    ++iterator2;
+
+    ASSERT_EQ(0U, list.size());
+    ASSERT_TRUE(list.begin() == list.end());
+    list.add(4);
+    list.add(5);
+    list.add(6);
+    iterator = list.begin();
+    ASSERT_EQ(4, *iterator);
+    ++iterator;
+    ASSERT_EQ(5, *iterator);
+    ++iterator;
+    ASSERT_EQ(6, *iterator);
+    ++iterator;
+}
+
+TEST(WTF_ListHashSet, MoveAssignment)
+{
+    ListHashSet<int> list;
+    list.add(1);
+    list.add(2);
+    list.add(3);
+
+    ASSERT_EQ(3U, list.size());
+    auto iterator = list.begin();
+    ASSERT_EQ(1, *iterator);
+    ++iterator;
+    ASSERT_EQ(2, *iterator);
+    ++iterator;
+    ASSERT_EQ(3, *iterator);
+    ++iterator;
+
+    ListHashSet<int> list2;
+    list2.add(10);
+    list2 = (WTFMove(list));
+    ASSERT_EQ(3U, list2.size());
+    auto iterator2 = list2.begin();
+    ASSERT_EQ(1, *iterator2);
+    ++iterator2;
+    ASSERT_EQ(2, *iterator2);
+    ++iterator2;
+    ASSERT_EQ(3, *iterator2);
+    ++iterator2;
+
+    ASSERT_EQ(0U, list.size());
+    ASSERT_TRUE(list.begin() == list.end());
+    list.add(4);
+    list.add(5);
+    list.add(6);
+    iterator = list.begin();
+    ASSERT_EQ(4, *iterator);
+    ++iterator;
+    ASSERT_EQ(5, *iterator);
+    ++iterator;
+    ASSERT_EQ(6, *iterator);
+    ++iterator;
+}
+
 } // namespace TestWebKitAPI
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to