Changeset 161770 in webkit
- Timestamp:
- Jan 11, 2014 11:17:55 AM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 10 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r161713 r161770 1 2014-01-11 Sam Weinig <sam@webkit.org> 2 3 Clean up iterator filter / iterator range code 4 https://bugs.webkit.org/show_bug.cgi?id=126817 5 6 Reviewed by Anders Carlsson. 7 8 - Renames IteratorPair to IteratorRange. 9 - Splits FilterIterator into FilterIterator (which now only filters) and 10 TransformIterator (which does the transform part of the old FilterIterator). 11 Move both of these to IteratorAdaptors.h 12 13 * GNUmakefile.list.am: 14 * WTF.vcxproj/WTF.vcxproj: 15 * WTF.vcxproj/WTF.vcxproj.filters: 16 * WTF.xcodeproj/project.pbxproj: 17 * wtf/CMakeLists.txt: 18 * wtf/FilterIterator.h: Removed. 19 Add/remove files. 20 21 * wtf/HashMap.h: 22 (WTF::HashMap::keys): 23 (WTF::HashMap::values): 24 * wtf/RefPtrHashMap.h: 25 Update for rename to IteratorRange. Simplify by using makeIteratorRange(). 26 27 * wtf/IteratorAdaptors.h: Copied from wtf/FilterIterator.h. 28 (WTF::FilterIterator::FilterIterator): 29 (WTF::FilterIterator::operator*): 30 (WTF::makeFilterIterator): 31 (WTF::TransformIterator::TransformIterator): 32 (WTF::TransformIterator::operator++): 33 (WTF::TransformIterator::operator*): 34 (WTF::TransformIterator::operator==): 35 (WTF::TransformIterator::operator!=): 36 (WTF::makeTransformIterator): 37 Split up filtering and transforming. Add makeFilterIterator() and makeTransformIterator() 38 helpers. 39 40 * wtf/IteratorPair.h: Removed. 41 * wtf/IteratorRange.h: Copied from wtf/IteratorPair.h. 42 (WTF::IteratorRange::IteratorRange): 43 (WTF::makeIteratorRange): 44 Renamed to IteratorRange and adds makeIteratorRange() helper. 45 1 46 2014-01-10 David Kilzer <ddkilzer@apple.com> 2 47 -
trunk/Source/WTF/GNUmakefile.list.am
r161518 r161770 54 54 Source/WTF/wtf/FilePrintStream.cpp \ 55 55 Source/WTF/wtf/FilePrintStream.h \ 56 Source/WTF/wtf/FilterIterator.h \57 56 Source/WTF/wtf/FlipBytes.h \ 58 57 Source/WTF/wtf/Forward.h \ … … 74 73 Source/WTF/wtf/InlineASM.h \ 75 74 Source/WTF/wtf/Insertion.h \ 76 Source/WTF/wtf/IteratorPair.h \ 75 Source/WTF/wtf/IteratorAdaptors.h \ 76 Source/WTF/wtf/IteratorRange.h \ 77 77 Source/WTF/wtf/ListDump.h \ 78 78 Source/WTF/wtf/ListHashSet.h \ -
trunk/Source/WTF/WTF.vcxproj/WTF.vcxproj
r161518 r161770 198 198 <ClInclude Include="..\wtf\FeatureDefines.h" /> 199 199 <ClInclude Include="..\wtf\FilePrintStream.h" /> 200 <ClInclude Include="..\wtf\FilterIterator.h" />201 200 <ClInclude Include="..\wtf\FlipBytes.h" /> 202 201 <ClInclude Include="..\wtf\Forward.h" /> … … 218 217 <ClInclude Include="..\wtf\HashTraits.h" /> 219 218 <ClInclude Include="..\wtf\HexNumber.h" /> 220 <ClInclude Include="..\wtf\IteratorPair.h" /> 219 <ClInclude Include="..\wtf\IteratorAdaptors.h" /> 220 <ClInclude Include="..\wtf\IteratorRange.h" /> 221 221 <ClInclude Include="..\wtf\ListHashSet.h" /> 222 222 <ClInclude Include="..\wtf\Locker.h" /> -
trunk/Source/WTF/WTF.vcxproj/WTF.vcxproj.filters
r161518 r161770 436 436 <Filter>wtf</Filter> 437 437 </ClInclude> 438 <ClInclude Include="..\wtf\FilterIterator.h">439 <Filter>wtf</Filter>440 </ClInclude>441 438 <ClInclude Include="..\wtf\Forward.h"> 442 439 <Filter>wtf</Filter> … … 475 472 <Filter>wtf</Filter> 476 473 </ClInclude> 477 <ClInclude Include="..\wtf\IteratorPair.h"> 474 <ClInclude Include="..\wtf\IteratorAdaptors.h"> 475 <Filter>wtf</Filter> 476 </ClInclude> 477 <ClInclude Include="..\wtf\IteratorRange.h"> 478 478 <Filter>wtf</Filter> 479 479 </ClInclude> -
trunk/Source/WTF/WTF.xcodeproj/project.pbxproj
r161518 r161770 66 66 2CDED0F318115C85004DBA70 /* RunLoop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2CDED0F118115C85004DBA70 /* RunLoop.cpp */; }; 67 67 2CDED0F418115C85004DBA70 /* RunLoop.h in Headers */ = {isa = PBXBuildFile; fileRef = 2CDED0F218115C85004DBA70 /* RunLoop.h */; }; 68 7CDD7FF8186D291E007433CD /* FilterIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CDD7FF7186D291E007433CD /* FilterIterator.h */; };69 7CDD7FFA186D2A54007433CD /* Iterator Pair.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CDD7FF9186D2A54007433CD /* IteratorPair.h */; };68 7CDD7FF8186D291E007433CD /* IteratorAdaptors.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CDD7FF7186D291E007433CD /* IteratorAdaptors.h */; }; 69 7CDD7FFA186D2A54007433CD /* IteratorRange.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CDD7FF9186D2A54007433CD /* IteratorRange.h */; }; 70 70 7E29C33E15FFD79B00516D61 /* ObjcRuntimeExtras.h in Headers */ = {isa = PBXBuildFile; fileRef = 7E29C33D15FFD79B00516D61 /* ObjcRuntimeExtras.h */; }; 71 71 8134013815B092FD001FF0B8 /* Base64.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8134013615B092FD001FF0B8 /* Base64.cpp */; }; … … 340 340 5D247B7314689C4700E78B76 /* WTF.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = WTF.xcconfig; sourceTree = "<group>"; }; 341 341 6541CAF41630DB26006D0DEC /* CopyWTFHeaders.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = CopyWTFHeaders.xcconfig; sourceTree = "<group>"; }; 342 7CDD7FF7186D291E007433CD /* FilterIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FilterIterator.h; sourceTree = "<group>"; };343 7CDD7FF9186D2A54007433CD /* Iterator Pair.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IteratorPair.h; sourceTree = "<group>"; };342 7CDD7FF7186D291E007433CD /* IteratorAdaptors.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IteratorAdaptors.h; sourceTree = "<group>"; }; 343 7CDD7FF9186D2A54007433CD /* IteratorRange.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IteratorRange.h; sourceTree = "<group>"; }; 344 344 7E29C33D15FFD79B00516D61 /* ObjcRuntimeExtras.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ObjcRuntimeExtras.h; sourceTree = "<group>"; }; 345 345 8134013615B092FD001FF0B8 /* Base64.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Base64.cpp; sourceTree = "<group>"; }; … … 701 701 A8A472A2151A825A004123FF /* FastMalloc.h */, 702 702 B38FD7BC168953E80065C969 /* FeatureDefines.h */, 703 7CDD7FF7186D291E007433CD /* FilterIterator.h */,704 7CDD7FF9186D2A54007433CD /* IteratorPair.h */,705 703 0F9D335B165DBA73005AD387 /* FilePrintStream.cpp */, 706 704 0F9D335C165DBA73005AD387 /* FilePrintStream.h */, … … 724 722 A8A472BC151A825A004123FF /* InlineASM.h */, 725 723 A70DA0821799F04D00529A9B /* Insertion.h */, 724 7CDD7FF7186D291E007433CD /* IteratorAdaptors.h */, 725 7CDD7FF9186D2A54007433CD /* IteratorRange.h */, 726 726 A70DA0831799F04D00529A9B /* ListDump.h */, 727 727 A8A472C1151A825A004123FF /* ListHashSet.h */, … … 959 959 A8A47388151A825B004123FF /* Atomics.h in Headers */, 960 960 A8A47436151A825B004123FF /* AtomicString.h in Headers */, 961 7CDD7FF8186D291E007433CD /* FilterIterator.h in Headers */,961 7CDD7FF8186D291E007433CD /* IteratorAdaptors.h in Headers */, 962 962 A8A47437151A825B004123FF /* AtomicStringHash.h in Headers */, 963 963 A8A47438151A825B004123FF /* AtomicStringImpl.h in Headers */, … … 968 968 A8A473A9151A825B004123FF /* bignum-dtoa.h in Headers */, 969 969 A8A473AB151A825B004123FF /* bignum.h in Headers */, 970 7CDD7FFA186D2A54007433CD /* Iterator Pair.h in Headers */,970 7CDD7FFA186D2A54007433CD /* IteratorRange.h in Headers */, 971 971 A8A47452151A825B004123FF /* BinarySemaphore.h in Headers */, 972 972 A8A4738A151A825B004123FF /* Bitmap.h in Headers */, -
trunk/Source/WTF/wtf/CMakeLists.txt
r161518 r161770 29 29 FeatureDefines.h 30 30 FilePrintStream.h 31 FilterIterator.h32 31 FlipBytes.h 33 32 Forward.h … … 44 43 HashTraits.h 45 44 HexNumber.h 46 IteratorPair.h 45 IteratorAdaptors.h 46 IteratorRange.h 47 47 ListHashSet.h 48 48 Locker.h -
trunk/Source/WTF/wtf/HashMap.h
r161114 r161770 23 23 24 24 #include <wtf/HashTable.h> 25 #include <wtf/Iterator Pair.h>25 #include <wtf/IteratorRange.h> 26 26 27 27 namespace WTF { … … 93 93 const_iterator end() const; 94 94 95 Iterator Pair<typename iterator::Keys> keys() { return IteratorPair<typename iterator::Keys>(begin().keys(), end().keys()); }96 const Iterator Pair<typename const_iterator::Keys> keys() const { return IteratorPair<typename const_iterator::Keys>(begin().keys(), end().keys()); }97 98 Iterator Pair<typename iterator::Values> values() { return IteratorPair<typename iterator::Values>(begin().values(), end().values()); }99 const Iterator Pair<typename const_iterator::Values> values() const { return IteratorPair<typename const_iterator::Values>(begin().values(), end().values()); }95 IteratorRange<typename iterator::Keys> keys() { return makeIteratorRange(begin().keys(), end().keys()); } 96 const IteratorRange<typename const_iterator::Keys> keys() const { return makeIteratorRange(begin().keys(), end().keys()); } 97 98 IteratorRange<typename iterator::Values> values() { return makeIteratorRange(begin().values(), end().values()); } 99 const IteratorRange<typename const_iterator::Values> values() const { return makeIteratorRange(begin().values(), end().values()); } 100 100 101 101 iterator find(const KeyType&); -
trunk/Source/WTF/wtf/IteratorAdaptors.h
r161750 r161770 24 24 */ 25 25 26 #ifndef WTF_FilterIterator_h 27 #define WTF_FilterIterator_h 28 29 #include <wtf/Forward.h> 30 #include <wtf/PassRefPtr.h> 31 #include <wtf/Vector.h> 26 #ifndef WTF_IteratorAdaptors_h 27 #define WTF_IteratorAdaptors_h 32 28 33 29 namespace WTF { 34 30 35 template<typename Predicate, typename Cast, typenameIterator>31 template<typename Predicate, typename Iterator> 36 32 class FilterIterator { 37 33 public: 38 FilterIterator(Predicate pred, Cast cast,Iterator begin, Iterator end)34 FilterIterator(Predicate pred, Iterator begin, Iterator end) 39 35 : m_pred(std::move(pred)) 40 , m_cast(std::move(cast))41 36 , m_iter(std::move(begin)) 42 37 , m_end(std::move(end)) … … 56 51 } 57 52 58 const decltype( std::declval<Cast>()(*std::declval<Iterator>())) operator*() const53 const decltype(*std::declval<Iterator>()) operator*() const 59 54 { 60 55 ASSERT(m_iter != m_end); 61 56 ASSERT(m_pred(*m_iter)); 62 return m_cast(*m_iter);57 return *m_iter; 63 58 } 64 59 … … 68 63 private: 69 64 const Predicate m_pred; 70 const Cast m_cast;71 65 Iterator m_iter; 72 66 Iterator m_end; 73 67 }; 74 68 69 template<typename Predicate, typename Iterator> 70 inline FilterIterator<Predicate, Iterator> makeFilterIterator(Predicate&& pred, Iterator&& begin, Iterator&& end) 71 { 72 return FilterIterator<Predicate, Iterator>(std::forward<Predicate>(pred), std::forward<Iterator>(begin), std::forward<Iterator>(end)); 73 } 74 75 template<typename Transform, typename Iterator> 76 class TransformIterator { 77 public: 78 TransformIterator(const Transform& transform, const Iterator& iter) 79 : m_transform(std::move(transform)) 80 , m_iter(std::move(iter)) 81 { 82 } 83 84 TransformIterator& operator++() 85 { 86 ++m_iter; 87 return *this; 88 } 89 90 const decltype(std::declval<Transform>()(*std::declval<Iterator>())) operator*() const 91 { 92 return m_transform(*m_iter); 93 } 94 95 inline bool operator==(TransformIterator& other) const { return m_iter == other.m_iter; } 96 inline bool operator!=(TransformIterator& other) const { return m_iter != other.m_iter; } 97 98 private: 99 const Transform m_transform; 100 Iterator m_iter; 101 }; 102 103 template<typename Transform, typename Iterator> 104 inline TransformIterator<Transform, Iterator> makeTransformIterator(Transform&& transform, Iterator&& iter) 105 { 106 return TransformIterator<Transform, Iterator>(std::forward<Transform>(transform), std::forward<Iterator>(iter)); 107 } 108 75 109 } // namespace WTF 76 110 77 #endif // WTF_ FilterIterator_h111 #endif // WTF_IteratorAdaptors_h -
trunk/Source/WTF/wtf/IteratorRange.h
r161736 r161770 24 24 */ 25 25 26 #ifndef WTF_Iterator Pair_h27 #define WTF_Iterator Pair_h26 #ifndef WTF_IteratorRange_h 27 #define WTF_IteratorRange_h 28 28 29 29 namespace WTF { 30 30 31 31 template<typename Iterator> 32 class Iterator Pair{32 class IteratorRange { 33 33 public: 34 Iterator Pair(Iterator begin, Iterator end)34 IteratorRange(Iterator begin, Iterator end) 35 35 : m_begin(std::move(begin)) 36 36 , m_end(std::move(end)) … … 46 46 }; 47 47 48 template<typename Iterator> 49 IteratorRange<Iterator> makeIteratorRange(Iterator&& begin, Iterator&& end) 50 { 51 return IteratorRange<Iterator>(std::forward<Iterator>(begin), std::forward<Iterator>(end)); 52 } 53 48 54 } // namespace WTF 49 55 50 #endif // WTF_Iterator Pair56 #endif // WTF_IteratorRange_h -
trunk/Source/WTF/wtf/RefPtrHashMap.h
r161114 r161770 71 71 const_iterator end() const; 72 72 73 Iterator Pair<typename iterator::Keys> keys() { return IteratorPair<typename iterator::Keys>(begin().keys(), end().keys()); }74 const Iterator Pair<typename const_iterator::Keys> keys() const { return IteratorPair<typename const_iterator::Keys>(begin().keys(), end().keys()); }75 76 Iterator Pair<typename iterator::Values> values() { return IteratorPair<typename iterator::Values>(begin().values(), end().values()); }77 const Iterator Pair<typename const_iterator::Values> values() const { return IteratorPair<typename const_iterator::Values>(begin().values(), end().values()); }73 IteratorRange<typename iterator::Keys> keys() { return makeIteratorRange(begin().keys(), end().keys()); } 74 const IteratorRange<typename const_iterator::Keys> keys() const { return makeIteratorRange(begin().keys(), end().keys()); } 75 76 IteratorRange<typename iterator::Values> values() { return makeIteratorRange(begin().values(), end().values()); } 77 const IteratorRange<typename const_iterator::Values> values() const { return makeIteratorRange(begin().values(), end().values()); } 78 78 79 79 iterator find(const KeyType&); -
trunk/Source/WebKit2/ChangeLog
r161769 r161770 1 2014-01-11 Sam Weinig <sam@webkit.org> 2 3 Clean up iterator filter / iterator range code 4 https://bugs.webkit.org/show_bug.cgi?id=126817 5 6 Reviewed by Anders Carlsson. 7 8 * Shared/APIArray.h: 9 Update elementsOfType() to use combination of FilterIterator and TransformIterator 10 (now that FilterIterator no longer has a transform predicate) and make use of the 11 makeFoo() helpers. 12 1 13 2014-01-11 Anders Carlsson <andersca@apple.com> 2 14 -
trunk/Source/WebKit2/Shared/APIArray.h
r161114 r161770 28 28 29 29 #include "APIObject.h" 30 #include <wtf/FilterIterator.h>31 30 #include <wtf/Forward.h> 32 #include <wtf/IteratorPair.h> 31 #include <wtf/IteratorAdaptors.h> 32 #include <wtf/IteratorRange.h> 33 33 #include <wtf/PassRefPtr.h> 34 34 #include <wtf/Vector.h> … … 38 38 class Array FINAL : public ObjectImpl<Object::Type::Array> { 39 39 private: 40 template<typename T> 41 static inline const T* getObject(const RefPtr<Object>& object) { return static_cast<const T*>(object.get()); } 40 template <class T> 41 struct IsTypePredicate { 42 bool operator()(const RefPtr<Object>& object) const { return object->type() == T::APIType; } 43 }; 42 44 43 template<typename T> 44 static inline bool isType(const RefPtr<Object>& object) { return object->type() == T::APIType; } 45 template <class T> 46 struct GetObjectTransform { 47 const T* operator()(const RefPtr<Object>& object) const { return static_cast<const T*>(object.get()); } 48 }; 49 50 template <typename T> 51 using ElementsOfTypeRange = WTF::IteratorRange<WTF::TransformIterator<GetObjectTransform<T>, WTF::FilterIterator<IsTypePredicate<T>, Vector<RefPtr<Object>>::const_iterator>>>; 45 52 46 53 public: … … 54 61 T* at(size_t i) const 55 62 { 56 if ( !isType<T>(m_elements[i]))63 if (m_elements[i]->type() != T::APIType) 57 64 return nullptr; 58 65 … … 67 74 68 75 template<typename T> 69 WTF::IteratorPair<WTF::FilterIterator<decltype(&isType<T>), decltype(&getObject<T>), Vector<RefPtr<Object>>::const_iterator>> elementsOfType()76 ElementsOfTypeRange<T> elementsOfType() const 70 77 { 71 typedef WTF::FilterIterator<decltype(&isType<T>), decltype(&getObject<T>), Vector<RefPtr<Object>>::const_iterator> Iterator; 72 73 return WTF::IteratorPair<Iterator>( 74 Iterator(isType<T>, getObject<T>, m_elements.begin(), m_elements.end()), 75 Iterator(isType<T>, getObject<T>, m_elements.end(), m_elements.end()) 78 return WTF::makeIteratorRange( 79 WTF::makeTransformIterator(GetObjectTransform<T>(), WTF::makeFilterIterator(IsTypePredicate<T>(), m_elements.begin(), m_elements.end())), 80 WTF::makeTransformIterator(GetObjectTransform<T>(), WTF::makeFilterIterator(IsTypePredicate<T>(), m_elements.end(), m_elements.end())) 76 81 ); 77 82 }
Note: See TracChangeset
for help on using the changeset viewer.