Changeset 203325 in webkit


Ignore:
Timestamp:
Jul 16, 2016, 9:33:11 AM (9 years ago)
Author:
Chris Dumez
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):

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r203322 r203325  
     12016-07-16  Chris Dumez  <cdumez@apple.com>
     2
     3        Add move constructor / assignment operator to ListHashSet
     4        https://bugs.webkit.org/show_bug.cgi?id=159837
     5
     6        Reviewed by Darin Adler.
     7
     8        Add move constructor / assignment operator to ListHashSet.
     9
     10        * wtf/ListHashSet.h:
     11        (WTF::ListHashSetConstIterator::operator++):
     12        (WTF::U>::ListHashSet):
     13        (WTF::=):
     14        (WTF::U>::clear):
     15        (WTF::U>::appendNode):
     16        (WTF::U>::prependNode):
     17        (WTF::U>::deleteAllNodes):
     18        (WTF::ListHashSetNode::ListHashSetNode): Deleted.
     19
    1202016-07-15  Chris Dumez  <cdumez@apple.com>
    221
  • trunk/Source/WTF/wtf/ListHashSet.h

    r203306 r203325  
    2020 */
    2121
    22 #ifndef WTF_ListHashSet_h
    23 #define WTF_ListHashSet_h
     22#pragma once
    2423
    2524#include <wtf/HashSet.h>
     
    7069    typedef HashTableAddResult<iterator> AddResult;
    7170
    72     ListHashSet();
     71    ListHashSet() = default;
    7372    ListHashSet(const ListHashSet&);
     73    ListHashSet(ListHashSet&&);
    7474    ListHashSet& operator=(const ListHashSet&);
     75    ListHashSet& operator=(ListHashSet&&);
    7576    ~ListHashSet();
    7677
     
    150151
    151152    HashTable<Node*, Node*, IdentityExtractor, NodeHash, NodeTraits, NodeTraits> m_impl;
    152     Node* m_head;
    153     Node* m_tail;
     153    Node* m_head { nullptr };
     154    Node* m_tail { nullptr };
    154155};
    155156
     
    160161    ListHashSetNode(T&& value)
    161162        : m_value(std::forward<T>(value))
    162         , m_prev(0)
    163         , m_next(0)
    164163    {
    165164    }
    166165
    167166    ValueArg m_value;
    168     ListHashSetNode* m_prev;
    169     ListHashSetNode* m_next;
     167    ListHashSetNode* m_prev { nullptr };
     168    ListHashSetNode* m_next { nullptr };
    170169};
    171170
     
    261260    const_iterator& operator++()
    262261    {
    263         ASSERT(m_position != 0);
     262        ASSERT(m_position);
    264263        m_position = m_position->m_next;
    265264        return *this;
     
    308307
    309308template<typename T, typename U>
    310 inline ListHashSet<T, U>::ListHashSet()
    311     : m_head(0)
    312     , m_tail(0)
    313 {
    314 }
    315 
    316 template<typename T, typename U>
    317309inline ListHashSet<T, U>::ListHashSet(const ListHashSet& other)
    318     : m_head(0)
    319     , m_tail(0)
    320310{
    321311    for (auto it = other.begin(), end = other.end(); it != end; ++it)
     
    328318    ListHashSet tmp(other);
    329319    swap(tmp);
     320    return *this;
     321}
     322
     323template<typename T, typename U>
     324inline ListHashSet<T, U>::ListHashSet(ListHashSet&& other)
     325    : m_impl(WTFMove(other.m_impl))
     326    , m_head(std::exchange(other.m_head, nullptr))
     327    , m_tail(std::exchange(other.m_tail, nullptr))
     328{
     329}
     330
     331template<typename T, typename U>
     332inline ListHashSet<T, U>& ListHashSet<T, U>::operator=(ListHashSet&& other)
     333{
     334    m_impl = WTFMove(other.m_impl);
     335    m_head = std::exchange(other.m_head, nullptr);
     336    m_tail = std::exchange(other.m_tail, nullptr);
    330337    return *this;
    331338}
     
    603610    deleteAllNodes();
    604611    m_impl.clear();
    605     m_head = 0;
    606     m_tail = 0;
     612    m_head = nullptr;
     613    m_tail = nullptr;
    607614}
    608615
     
    638645{
    639646    node->m_prev = m_tail;
    640     node->m_next = 0;
     647    node->m_next = nullptr;
    641648
    642649    if (m_tail) {
     
    654661void ListHashSet<T, U>::prependNode(Node* node)
    655662{
    656     node->m_prev = 0;
     663    node->m_prev = nullptr;
    657664    node->m_next = m_head;
    658665
     
    687694        return;
    688695
    689     for (Node* node = m_head, *next = m_head->m_next; node; node = next, next = node ? node->m_next : 0)
     696    for (Node* node = m_head, *next = m_head->m_next; node; node = next, next = node ? node->m_next : nullptr)
    690697        delete node;
    691698}
     
    706713
    707714using WTF::ListHashSet;
    708 
    709 #endif /* WTF_ListHashSet_h */
  • trunk/Tools/ChangeLog

    r203318 r203325  
     12016-07-16  Chris Dumez  <cdumez@apple.com>
     2
     3        Add move constructor / assignment operator to ListHashSet
     4        https://bugs.webkit.org/show_bug.cgi?id=159837
     5
     6        Reviewed by Darin Adler.
     7
     8        Add API tests.
     9
     10        * TestWebKitAPI/Tests/WTF/ListHashSet.cpp:
     11        (TestWebKitAPI::TEST):
     12
    1132016-07-15  Benjamin Poulain  <bpoulain@apple.com>
    214
  • trunk/Tools/TestWebKitAPI/Tests/WTF/ListHashSet.cpp

    r181348 r203325  
    267267}
    268268
     269TEST(WTF_ListHashSet, MoveConstructor)
     270{
     271    ListHashSet<int> list;
     272    list.add(1);
     273    list.add(2);
     274    list.add(3);
     275
     276    ASSERT_EQ(3U, list.size());
     277    auto iterator = list.begin();
     278    ASSERT_EQ(1, *iterator);
     279    ++iterator;
     280    ASSERT_EQ(2, *iterator);
     281    ++iterator;
     282    ASSERT_EQ(3, *iterator);
     283    ++iterator;
     284
     285    ListHashSet<int> list2(WTFMove(list));
     286    ASSERT_EQ(3U, list2.size());
     287    auto iterator2 = list2.begin();
     288    ASSERT_EQ(1, *iterator2);
     289    ++iterator2;
     290    ASSERT_EQ(2, *iterator2);
     291    ++iterator2;
     292    ASSERT_EQ(3, *iterator2);
     293    ++iterator2;
     294
     295    ASSERT_EQ(0U, list.size());
     296    ASSERT_TRUE(list.begin() == list.end());
     297    list.add(4);
     298    list.add(5);
     299    list.add(6);
     300    iterator = list.begin();
     301    ASSERT_EQ(4, *iterator);
     302    ++iterator;
     303    ASSERT_EQ(5, *iterator);
     304    ++iterator;
     305    ASSERT_EQ(6, *iterator);
     306    ++iterator;
     307}
     308
     309TEST(WTF_ListHashSet, MoveAssignment)
     310{
     311    ListHashSet<int> list;
     312    list.add(1);
     313    list.add(2);
     314    list.add(3);
     315
     316    ASSERT_EQ(3U, list.size());
     317    auto iterator = list.begin();
     318    ASSERT_EQ(1, *iterator);
     319    ++iterator;
     320    ASSERT_EQ(2, *iterator);
     321    ++iterator;
     322    ASSERT_EQ(3, *iterator);
     323    ++iterator;
     324
     325    ListHashSet<int> list2;
     326    list2.add(10);
     327    list2 = (WTFMove(list));
     328    ASSERT_EQ(3U, list2.size());
     329    auto iterator2 = list2.begin();
     330    ASSERT_EQ(1, *iterator2);
     331    ++iterator2;
     332    ASSERT_EQ(2, *iterator2);
     333    ++iterator2;
     334    ASSERT_EQ(3, *iterator2);
     335    ++iterator2;
     336
     337    ASSERT_EQ(0U, list.size());
     338    ASSERT_TRUE(list.begin() == list.end());
     339    list.add(4);
     340    list.add(5);
     341    list.add(6);
     342    iterator = list.begin();
     343    ASSERT_EQ(4, *iterator);
     344    ++iterator;
     345    ASSERT_EQ(5, *iterator);
     346    ++iterator;
     347    ASSERT_EQ(6, *iterator);
     348    ++iterator;
     349}
     350
    269351} // namespace TestWebKitAPI
Note: See TracChangeset for help on using the changeset viewer.