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

Side by Side Diff: third_party/WebKit/Source/wtf/ListHashSet.h

Issue 1813693002: Fix ListHashSet::AddResult storing a Node* instead of a ValueType*. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 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
« no previous file with comments | « no previous file | third_party/WebKit/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 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 typedef ListHashSetIterator<ListHashSet> iterator; 80 typedef ListHashSetIterator<ListHashSet> iterator;
81 typedef ListHashSetConstIterator<ListHashSet> const_iterator; 81 typedef ListHashSetConstIterator<ListHashSet> const_iterator;
82 friend class ListHashSetIterator<ListHashSet>; 82 friend class ListHashSetIterator<ListHashSet>;
83 friend class ListHashSetConstIterator<ListHashSet>; 83 friend class ListHashSetConstIterator<ListHashSet>;
84 84
85 typedef ListHashSetReverseIterator<ListHashSet> reverse_iterator; 85 typedef ListHashSetReverseIterator<ListHashSet> reverse_iterator;
86 typedef ListHashSetConstReverseIterator<ListHashSet> const_reverse_iterator; 86 typedef ListHashSetConstReverseIterator<ListHashSet> const_reverse_iterator;
87 friend class ListHashSetReverseIterator<ListHashSet>; 87 friend class ListHashSetReverseIterator<ListHashSet>;
88 friend class ListHashSetConstReverseIterator<ListHashSet>; 88 friend class ListHashSetConstReverseIterator<ListHashSet>;
89 89
90 template <typename ValueType> struct HashTableAddResult final { 90 struct AddResult final {
91 STACK_ALLOCATED(); 91 STACK_ALLOCATED();
92 HashTableAddResult(Node* storedValue, bool isNewEntry) : storedValue(sto redValue), isNewEntry(isNewEntry) { } 92 friend class ListHashSet<ValueArg, inlineCapacity, HashArg, AllocatorArg >;
93 Node* storedValue; 93 AddResult(Node* node, bool isNewEntry)
94 : storedValue(&node->m_value)
95 , isNewEntry(isNewEntry)
96 , m_node(node) { }
97 ValueType* storedValue;
94 bool isNewEntry; 98 bool isNewEntry;
99 private:
100 Node* m_node;
95 }; 101 };
96 typedef HashTableAddResult<ValueType> AddResult;
97 102
98 ListHashSet(); 103 ListHashSet();
99 ListHashSet(const ListHashSet&); 104 ListHashSet(const ListHashSet&);
100 ListHashSet(ListHashSet&&); 105 ListHashSet(ListHashSet&&);
101 ListHashSet& operator=(const ListHashSet&); 106 ListHashSet& operator=(const ListHashSet&);
102 ListHashSet& operator=(ListHashSet&&); 107 ListHashSet& operator=(ListHashSet&&);
103 void finalize(); 108 void finalize();
104 109
105 void swap(ListHashSet&); 110 void swap(ListHashSet&);
106 111
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after
834 // actually changes when it does allocations. 839 // actually changes when it does allocations.
835 auto result = m_impl.template add<BaseTranslator>(value, *this->allocator()) ; 840 auto result = m_impl.template add<BaseTranslator>(value, *this->allocator()) ;
836 if (result.isNewEntry) 841 if (result.isNewEntry)
837 appendNode(*result.storedValue); 842 appendNode(*result.storedValue);
838 return AddResult(*result.storedValue, result.isNewEntry); 843 return AddResult(*result.storedValue, result.isNewEntry);
839 } 844 }
840 845
841 template <typename T, size_t inlineCapacity, typename U, typename V> 846 template <typename T, size_t inlineCapacity, typename U, typename V>
842 typename ListHashSet<T, inlineCapacity, U, V>::iterator ListHashSet<T, inlineCap acity, U, V>::addReturnIterator(ValuePassInType value) 847 typename ListHashSet<T, inlineCapacity, U, V>::iterator ListHashSet<T, inlineCap acity, U, V>::addReturnIterator(ValuePassInType value)
843 { 848 {
844 return makeIterator(add(value).storedValue); 849 return makeIterator(add(value).m_node);
845 } 850 }
846 851
847 template <typename T, size_t inlineCapacity, typename U, typename V> 852 template <typename T, size_t inlineCapacity, typename U, typename V>
848 typename ListHashSet<T, inlineCapacity, U, V>::AddResult ListHashSet<T, inlineCa pacity, U, V>::appendOrMoveToLast(ValuePassInType value) 853 typename ListHashSet<T, inlineCapacity, U, V>::AddResult ListHashSet<T, inlineCa pacity, U, V>::appendOrMoveToLast(ValuePassInType value)
849 { 854 {
850 createAllocatorIfNeeded(); 855 createAllocatorIfNeeded();
851 auto result = m_impl.template add<BaseTranslator>(value, *this->allocator()) ; 856 auto result = m_impl.template add<BaseTranslator>(value, *this->allocator()) ;
852 Node* node = *result.storedValue; 857 Node* node = *result.storedValue;
853 if (!result.isNewEntry) 858 if (!result.isNewEntry)
854 unlink(node); 859 unlink(node);
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 struct NeedsTracing<ListHashSet<T, U, V>> { 1038 struct NeedsTracing<ListHashSet<T, U, V>> {
1034 static const bool value = false; 1039 static const bool value = false;
1035 }; 1040 };
1036 #endif 1041 #endif
1037 1042
1038 } // namespace WTF 1043 } // namespace WTF
1039 1044
1040 using WTF::ListHashSet; 1045 using WTF::ListHashSet;
1041 1046
1042 #endif // WTF_ListHashSet_h 1047 #endif // WTF_ListHashSet_h
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/wtf/ListHashSetTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698