Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(467)

Side by Side Diff: Source/wtf/LinkedHashSet.h

Issue 474943002: Fix for LinkedHashSet::swap. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: templated test Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | Source/wtf/ListHashSetTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All rights reserv ed. 2 * Copyright (C) 2005, 2006, 2007, 2008, 2011, 2012 Apple Inc. All rights reserv ed.
3 * Copyright (C) 2011, Benjamin Poulain <ikipou@gmail.com> 3 * Copyright (C) 2011, Benjamin Poulain <ikipou@gmail.com>
4 * 4 *
5 * This library is free software; you can redistribute it and/or 5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Library General Public 6 * modify it under the terms of the GNU Library General Public
7 * License as published by the Free Software Foundation; either 7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version. 8 * version 2 of the License, or (at your option) any later version.
9 * 9 *
10 * This library is distributed in the hope that it will be useful, 10 * This library is distributed in the hope that it will be useful,
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 { 492 {
493 LinkedHashSet tmp(other); 493 LinkedHashSet tmp(other);
494 swap(tmp); 494 swap(tmp);
495 return *this; 495 return *this;
496 } 496 }
497 497
498 template<typename T, typename U, typename V, typename W> 498 template<typename T, typename U, typename V, typename W>
499 inline void LinkedHashSet<T, U, V, W>::swap(LinkedHashSet& other) 499 inline void LinkedHashSet<T, U, V, W>::swap(LinkedHashSet& other)
500 { 500 {
501 m_impl.swap(other.m_impl); 501 m_impl.swap(other.m_impl);
502 swap(m_anchor, other.m_anchor); 502 swapAnchor(m_anchor, other.m_anchor);
503 } 503 }
504 504
505 template<typename T, typename U, typename V, typename Allocator> 505 template<typename T, typename U, typename V, typename Allocator>
506 inline LinkedHashSet<T, U, V, Allocator>::~LinkedHashSet() 506 inline LinkedHashSet<T, U, V, Allocator>::~LinkedHashSet()
507 { 507 {
508 // The destructor of m_anchor will implicitly be called here, which will 508 // The destructor of m_anchor will implicitly be called here, which will
509 // unlink the anchor from the collection. 509 // unlink the anchor from the collection.
510 } 510 }
511 511
512 template<typename T, typename U, typename V, typename W> 512 template<typename T, typename U, typename V, typename W>
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 return; 660 return;
661 m_impl.remove(it.node()); 661 m_impl.remove(it.node());
662 } 662 }
663 663
664 template<typename T, typename U, typename V, typename W> 664 template<typename T, typename U, typename V, typename W>
665 inline void LinkedHashSet<T, U, V, W>::remove(ValuePeekInType value) 665 inline void LinkedHashSet<T, U, V, W>::remove(ValuePeekInType value)
666 { 666 {
667 remove(find(value)); 667 remove(find(value));
668 } 668 }
669 669
670 inline void swapAnchor(LinkedHashSetNodeBase& a, LinkedHashSetNodeBase& b)
671 {
672 ASSERT(a.m_prev && a.m_next && b.m_prev && b.m_next);
673 swap(a.m_prev, b.m_prev);
674 swap(a.m_next, b.m_next);
675 if (b.m_next == &a) {
676 ASSERT(b.m_prev == &a);
677 b.m_next = &b;
678 b.m_prev = &b;
679 } else {
680 b.m_next->m_prev = &b;
681 b.m_prev->m_next = &b;
682 }
683 if (a.m_next == &b) {
684 ASSERT(a.m_prev == &b);
685 a.m_next = &a;
686 a.m_prev = &a;
687 } else {
688 a.m_next->m_prev = &a;
689 a.m_prev->m_next = &a;
690 }
691 }
692
670 inline void swap(LinkedHashSetNodeBase& a, LinkedHashSetNodeBase& b) 693 inline void swap(LinkedHashSetNodeBase& a, LinkedHashSetNodeBase& b)
671 { 694 {
695 ASSERT(a.m_next != &a && b.m_next != &b);
672 swap(a.m_prev, b.m_prev); 696 swap(a.m_prev, b.m_prev);
673 swap(a.m_next, b.m_next); 697 swap(a.m_next, b.m_next);
674 if (b.m_next) { 698 if (b.m_next) {
675 b.m_next->m_prev = &b; 699 b.m_next->m_prev = &b;
676 b.m_prev->m_next = &b; 700 b.m_prev->m_next = &b;
677 } 701 }
678 if (a.m_next) { 702 if (a.m_next) {
679 a.m_next->m_prev = &a; 703 a.m_next->m_prev = &a;
680 a.m_prev->m_next = &a; 704 a.m_prev->m_next = &a;
681 } 705 }
(...skipping 25 matching lines...) Expand all
707 struct NeedsTracing<LinkedHashSet<T, U, V> > { 731 struct NeedsTracing<LinkedHashSet<T, U, V> > {
708 static const bool value = false; 732 static const bool value = false;
709 }; 733 };
710 #endif 734 #endif
711 735
712 } 736 }
713 737
714 using WTF::LinkedHashSet; 738 using WTF::LinkedHashSet;
715 739
716 #endif /* WTF_LinkedHashSet_h */ 740 #endif /* WTF_LinkedHashSet_h */
OLDNEW
« no previous file with comments | « no previous file | Source/wtf/ListHashSetTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698