| OLD | NEW | 
|---|
| 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 64 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 75         typedef ValueArg ValueType; | 75         typedef ValueArg ValueType; | 
| 76 | 76 | 
| 77         typedef ListHashSetIterator<ValueType, inlineCapacity, HashArg> iterator
     ; | 77         typedef ListHashSetIterator<ValueType, inlineCapacity, HashArg> iterator
     ; | 
| 78         typedef ListHashSetConstIterator<ValueType, inlineCapacity, HashArg> con
     st_iterator; | 78         typedef ListHashSetConstIterator<ValueType, inlineCapacity, HashArg> con
     st_iterator; | 
| 79         friend class ListHashSetConstIterator<ValueType, inlineCapacity, HashArg
     >; | 79         friend class ListHashSetConstIterator<ValueType, inlineCapacity, HashArg
     >; | 
| 80 | 80 | 
| 81         typedef ListHashSetReverseIterator<ValueType, inlineCapacity, HashArg> r
     everse_iterator; | 81         typedef ListHashSetReverseIterator<ValueType, inlineCapacity, HashArg> r
     everse_iterator; | 
| 82         typedef ListHashSetConstReverseIterator<ValueType, inlineCapacity, HashA
     rg> const_reverse_iterator; | 82         typedef ListHashSetConstReverseIterator<ValueType, inlineCapacity, HashA
     rg> const_reverse_iterator; | 
| 83         friend class ListHashSetConstReverseIterator<ValueType, inlineCapacity, 
     HashArg>; | 83         friend class ListHashSetConstReverseIterator<ValueType, inlineCapacity, 
     HashArg>; | 
| 84 | 84 | 
| 85         typedef HashTableAddResult<iterator> AddResult; | 85         template<typename ValueType> struct HashTableAddResult { | 
|  | 86         HashTableAddResult(Node* storedValue, bool isNewEntry) : storedValue(sto
     redValue), isNewEntry(isNewEntry) { } | 
|  | 87             Node* storedValue; | 
|  | 88             bool isNewEntry; | 
|  | 89         }; | 
|  | 90         typedef HashTableAddResult<ValueType> AddResult; | 
| 86 | 91 | 
| 87         ListHashSet(); | 92         ListHashSet(); | 
| 88         ListHashSet(const ListHashSet&); | 93         ListHashSet(const ListHashSet&); | 
| 89         ListHashSet& operator=(const ListHashSet&); | 94         ListHashSet& operator=(const ListHashSet&); | 
| 90         ~ListHashSet(); | 95         ~ListHashSet(); | 
| 91 | 96 | 
| 92         void swap(ListHashSet&); | 97         void swap(ListHashSet&); | 
| 93 | 98 | 
| 94         unsigned size() const; | 99         unsigned size() const; | 
| 95         unsigned capacity() const; | 100         unsigned capacity() const; | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 119         const_iterator find(const ValueType&) const; | 124         const_iterator find(const ValueType&) const; | 
| 120         bool contains(const ValueType&) const; | 125         bool contains(const ValueType&) const; | 
| 121 | 126 | 
| 122         // An alternate version of find() that finds the object by hashing and c
     omparing | 127         // An alternate version of find() that finds the object by hashing and c
     omparing | 
| 123         // with some other type, to avoid the cost of type conversion. | 128         // with some other type, to avoid the cost of type conversion. | 
| 124         // The HashTranslator interface is defined in HashSet. | 129         // The HashTranslator interface is defined in HashSet. | 
| 125         template<typename HashTranslator, typename T> iterator find(const T&); | 130         template<typename HashTranslator, typename T> iterator find(const T&); | 
| 126         template<typename HashTranslator, typename T> const_iterator find(const 
     T&) const; | 131         template<typename HashTranslator, typename T> const_iterator find(const 
     T&) const; | 
| 127         template<typename HashTranslator, typename T> bool contains(const T&) co
     nst; | 132         template<typename HashTranslator, typename T> bool contains(const T&) co
     nst; | 
| 128 | 133 | 
| 129         // The return value of add is a pair of an iterator to the new value's l
     ocation, | 134         // The return value of add is a pair of a pointer to the stored value, | 
| 130         // and a bool that is true if an new entry was added. | 135         // and a bool that is true if an new entry was added. | 
| 131         AddResult add(const ValueType&); | 136         AddResult add(const ValueType&); | 
| 132 | 137 | 
|  | 138         // Same as add() except that the return value is an | 
|  | 139         // iterator. Useful in cases where it's needed to have the | 
|  | 140         // same return value as find() and where it's not possible to | 
|  | 141         // use a pointer to the storedValue. | 
|  | 142         iterator addReturnIterator(const ValueType&); | 
|  | 143 | 
| 133         // Add the value to the end of the collection. If the value was already 
     in | 144         // Add the value to the end of the collection. If the value was already 
     in | 
| 134         // the list, it is moved to the end. | 145         // the list, it is moved to the end. | 
| 135         AddResult appendOrMoveToLast(const ValueType&); | 146         AddResult appendOrMoveToLast(const ValueType&); | 
| 136 | 147 | 
| 137         // Add the value to the beginning of the collection. If the value was al
     ready in | 148         // Add the value to the beginning of the collection. If the value was al
     ready in | 
| 138         // the list, it is moved to the beginning. | 149         // the list, it is moved to the beginning. | 
| 139         AddResult prependOrMoveToFirst(const ValueType&); | 150         AddResult prependOrMoveToFirst(const ValueType&); | 
| 140 | 151 | 
| 141         AddResult insertBefore(const ValueType& beforeValue, const ValueType& ne
     wValue); | 152         AddResult insertBefore(const ValueType& beforeValue, const ValueType& ne
     wValue); | 
| 142         AddResult insertBefore(iterator, const ValueType&); | 153         AddResult insertBefore(iterator, const ValueType&); | 
| (...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 728     { | 739     { | 
| 729         return m_impl.template contains<BaseTranslator>(value); | 740         return m_impl.template contains<BaseTranslator>(value); | 
| 730     } | 741     } | 
| 731 | 742 | 
| 732     template<typename T, size_t inlineCapacity, typename U> | 743     template<typename T, size_t inlineCapacity, typename U> | 
| 733     typename ListHashSet<T, inlineCapacity, U>::AddResult ListHashSet<T, inlineC
     apacity, U>::add(const ValueType &value) | 744     typename ListHashSet<T, inlineCapacity, U>::AddResult ListHashSet<T, inlineC
     apacity, U>::add(const ValueType &value) | 
| 734     { | 745     { | 
| 735         createAllocatorIfNeeded(); | 746         createAllocatorIfNeeded(); | 
| 736         typename ImplType::AddResult result = m_impl.template add<BaseTranslator
     >(value, m_allocator.get()); | 747         typename ImplType::AddResult result = m_impl.template add<BaseTranslator
     >(value, m_allocator.get()); | 
| 737         if (result.isNewEntry) | 748         if (result.isNewEntry) | 
| 738             appendNode(*result.iterator); | 749             appendNode(*result.storedValue); | 
| 739         return AddResult(makeIterator(*result.iterator), result.isNewEntry); | 750         return AddResult(*result.storedValue, result.isNewEntry); | 
| 740     } | 751     } | 
| 741 | 752 | 
| 742     template<typename T, size_t inlineCapacity, typename U> | 753     template<typename T, size_t inlineCapacity, typename U> | 
|  | 754     typename ListHashSet<T, inlineCapacity, U>::iterator ListHashSet<T, inlineCa
     pacity, U>::addReturnIterator(const ValueType &value) | 
|  | 755     { | 
|  | 756         return makeIterator(add(value).storedValue); | 
|  | 757     } | 
|  | 758     template<typename T, size_t inlineCapacity, typename U> | 
| 743     typename ListHashSet<T, inlineCapacity, U>::AddResult ListHashSet<T, inlineC
     apacity, U>::appendOrMoveToLast(const ValueType &value) | 759     typename ListHashSet<T, inlineCapacity, U>::AddResult ListHashSet<T, inlineC
     apacity, U>::appendOrMoveToLast(const ValueType &value) | 
| 744     { | 760     { | 
| 745         createAllocatorIfNeeded(); | 761         createAllocatorIfNeeded(); | 
| 746         typename ImplType::AddResult result = m_impl.template add<BaseTranslator
     >(value, m_allocator.get()); | 762         typename ImplType::AddResult result = m_impl.template add<BaseTranslator
     >(value, m_allocator.get()); | 
| 747         Node* node = *result.iterator; | 763         Node* node = *result.storedValue; | 
| 748         if (!result.isNewEntry) | 764         if (!result.isNewEntry) | 
| 749             unlink(node); | 765             unlink(node); | 
| 750         appendNode(node); | 766         appendNode(node); | 
| 751         return AddResult(makeIterator(*result.iterator), result.isNewEntry); | 767         return AddResult(*result.storedValue, result.isNewEntry); | 
| 752     } | 768     } | 
| 753 | 769 | 
| 754     template<typename T, size_t inlineCapacity, typename U> | 770     template<typename T, size_t inlineCapacity, typename U> | 
| 755     typename ListHashSet<T, inlineCapacity, U>::AddResult ListHashSet<T, inlineC
     apacity, U>::prependOrMoveToFirst(const ValueType &value) | 771     typename ListHashSet<T, inlineCapacity, U>::AddResult ListHashSet<T, inlineC
     apacity, U>::prependOrMoveToFirst(const ValueType &value) | 
| 756     { | 772     { | 
| 757         createAllocatorIfNeeded(); | 773         createAllocatorIfNeeded(); | 
| 758         typename ImplType::AddResult result = m_impl.template add<BaseTranslator
     >(value, m_allocator.get()); | 774         typename ImplType::AddResult result = m_impl.template add<BaseTranslator
     >(value, m_allocator.get()); | 
| 759         Node* node = *result.iterator; | 775         Node* node = *result.storedValue; | 
| 760         if (!result.isNewEntry) | 776         if (!result.isNewEntry) | 
| 761             unlink(node); | 777             unlink(node); | 
| 762         prependNode(node); | 778         prependNode(node); | 
| 763         return AddResult(makeIterator(*result.iterator), result.isNewEntry); | 779         return AddResult(*result.storedValue, result.isNewEntry); | 
| 764     } | 780     } | 
| 765 | 781 | 
| 766     template<typename T, size_t inlineCapacity, typename U> | 782     template<typename T, size_t inlineCapacity, typename U> | 
| 767     typename ListHashSet<T, inlineCapacity, U>::AddResult ListHashSet<T, inlineC
     apacity, U>::insertBefore(iterator it, const ValueType& newValue) | 783     typename ListHashSet<T, inlineCapacity, U>::AddResult ListHashSet<T, inlineC
     apacity, U>::insertBefore(iterator it, const ValueType& newValue) | 
| 768     { | 784     { | 
| 769         createAllocatorIfNeeded(); | 785         createAllocatorIfNeeded(); | 
| 770         typename ImplType::AddResult result = m_impl.template add<BaseTranslator
     >(newValue, m_allocator.get()); | 786         typename ImplType::AddResult result = m_impl.template add<BaseTranslator
     >(newValue, m_allocator.get()); | 
| 771         if (result.isNewEntry) | 787         if (result.isNewEntry) | 
| 772             insertNodeBefore(it.node(), *result.iterator); | 788             insertNodeBefore(it.node(), *result.storedValue); | 
| 773         return AddResult(makeIterator(*result.iterator), result.isNewEntry); | 789         return AddResult(*result.storedValue, result.isNewEntry); | 
| 774     } | 790     } | 
| 775 | 791 | 
| 776     template<typename T, size_t inlineCapacity, typename U> | 792     template<typename T, size_t inlineCapacity, typename U> | 
| 777     typename ListHashSet<T, inlineCapacity, U>::AddResult ListHashSet<T, inlineC
     apacity, U>::insertBefore(const ValueType& beforeValue, const ValueType& newValu
     e) | 793     typename ListHashSet<T, inlineCapacity, U>::AddResult ListHashSet<T, inlineC
     apacity, U>::insertBefore(const ValueType& beforeValue, const ValueType& newValu
     e) | 
| 778     { | 794     { | 
| 779         createAllocatorIfNeeded(); | 795         createAllocatorIfNeeded(); | 
| 780         return insertBefore(find(beforeValue), newValue); | 796         return insertBefore(find(beforeValue), newValue); | 
| 781     } | 797     } | 
| 782 | 798 | 
| 783     template<typename T, size_t inlineCapacity, typename U> | 799     template<typename T, size_t inlineCapacity, typename U> | 
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 931     inline void deleteAllValues(const ListHashSet<T, inlineCapacity, U>& collect
     ion) | 947     inline void deleteAllValues(const ListHashSet<T, inlineCapacity, U>& collect
     ion) | 
| 932     { | 948     { | 
| 933         deleteAllValues<true, typename ListHashSet<T, inlineCapacity, U>::ValueT
     ype>(collection.m_impl); | 949         deleteAllValues<true, typename ListHashSet<T, inlineCapacity, U>::ValueT
     ype>(collection.m_impl); | 
| 934     } | 950     } | 
| 935 | 951 | 
| 936 } // namespace WTF | 952 } // namespace WTF | 
| 937 | 953 | 
| 938 using WTF::ListHashSet; | 954 using WTF::ListHashSet; | 
| 939 | 955 | 
| 940 #endif /* WTF_ListHashSet_h */ | 956 #endif /* WTF_ListHashSet_h */ | 
| OLD | NEW | 
|---|