Changeset 203325 in webkit
- Timestamp:
- Jul 16, 2016, 9:33:11 AM (9 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r203322 r203325 1 2016-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 1 20 2016-07-15 Chris Dumez <cdumez@apple.com> 2 21 -
trunk/Source/WTF/wtf/ListHashSet.h
r203306 r203325 20 20 */ 21 21 22 #ifndef WTF_ListHashSet_h 23 #define WTF_ListHashSet_h 22 #pragma once 24 23 25 24 #include <wtf/HashSet.h> … … 70 69 typedef HashTableAddResult<iterator> AddResult; 71 70 72 ListHashSet() ;71 ListHashSet() = default; 73 72 ListHashSet(const ListHashSet&); 73 ListHashSet(ListHashSet&&); 74 74 ListHashSet& operator=(const ListHashSet&); 75 ListHashSet& operator=(ListHashSet&&); 75 76 ~ListHashSet(); 76 77 … … 150 151 151 152 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 }; 154 155 }; 155 156 … … 160 161 ListHashSetNode(T&& value) 161 162 : m_value(std::forward<T>(value)) 162 , m_prev(0)163 , m_next(0)164 163 { 165 164 } 166 165 167 166 ValueArg m_value; 168 ListHashSetNode* m_prev ;169 ListHashSetNode* m_next ;167 ListHashSetNode* m_prev { nullptr }; 168 ListHashSetNode* m_next { nullptr }; 170 169 }; 171 170 … … 261 260 const_iterator& operator++() 262 261 { 263 ASSERT(m_position != 0);262 ASSERT(m_position); 264 263 m_position = m_position->m_next; 265 264 return *this; … … 308 307 309 308 template<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>317 309 inline ListHashSet<T, U>::ListHashSet(const ListHashSet& other) 318 : m_head(0)319 , m_tail(0)320 310 { 321 311 for (auto it = other.begin(), end = other.end(); it != end; ++it) … … 328 318 ListHashSet tmp(other); 329 319 swap(tmp); 320 return *this; 321 } 322 323 template<typename T, typename U> 324 inline 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 331 template<typename T, typename U> 332 inline 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); 330 337 return *this; 331 338 } … … 603 610 deleteAllNodes(); 604 611 m_impl.clear(); 605 m_head = 0;606 m_tail = 0;612 m_head = nullptr; 613 m_tail = nullptr; 607 614 } 608 615 … … 638 645 { 639 646 node->m_prev = m_tail; 640 node->m_next = 0;647 node->m_next = nullptr; 641 648 642 649 if (m_tail) { … … 654 661 void ListHashSet<T, U>::prependNode(Node* node) 655 662 { 656 node->m_prev = 0;663 node->m_prev = nullptr; 657 664 node->m_next = m_head; 658 665 … … 687 694 return; 688 695 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) 690 697 delete node; 691 698 } … … 706 713 707 714 using WTF::ListHashSet; 708 709 #endif /* WTF_ListHashSet_h */ -
trunk/Tools/ChangeLog
r203318 r203325 1 2016-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 1 13 2016-07-15 Benjamin Poulain <bpoulain@apple.com> 2 14 -
trunk/Tools/TestWebKitAPI/Tests/WTF/ListHashSet.cpp
r181348 r203325 267 267 } 268 268 269 TEST(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 309 TEST(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 269 351 } // namespace TestWebKitAPI
Note:
See TracChangeset
for help on using the changeset viewer.