Changeset 159992 in webkit
- Timestamp:
- Dec 2, 2013 9:53:32 PM (10 years ago)
- Location:
- trunk/Source/WebKit2
- Files:
-
- 6 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit2/ChangeLog
r159991 r159992 1 2013-12-02 Martin Hock <mhock@apple.com> 2 3 Add ability to iterate over API::Array 4 https://bugs.webkit.org/show_bug.cgi?id=124533 5 6 Reviewed by Sam Weinig. 7 8 * GNUmakefile.list.am: 9 * Shared/APIArray.h: 10 * Shared/FilterIterator.h: 11 * Shared/IteratorPair.h: 12 * WebKit2.xcodeproj/project.pbxproj: 13 * WebProcess/InjectedBundle/InjectedBundle.cpp: 14 (WebKit::toStringVector): 15 * WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp: 16 (WebKit::InjectedBundlePageEditorClient::getPasteboardDataForRange): 17 1 18 2013-12-02 Dan Bernstein <mitz@apple.com> 2 19 -
trunk/Source/WebKit2/GNUmakefile.list.am
r159647 r159992 423 423 Source/WebKit2/Shared/EditorState.cpp \ 424 424 Source/WebKit2/Shared/EditorState.h \ 425 Source/WebKit2/Shared/FilterIterator.h \ 425 426 Source/WebKit2/Shared/FontSmoothingLevel.h \ 426 427 Source/WebKit2/Shared/ProcessExecutablePath.h \ … … 439 440 Source/WebKit2/Shared/ImmutableDictionary.cpp \ 440 441 Source/WebKit2/Shared/ImmutableDictionary.h \ 442 Source/WebKit2/Shared/IteratorPair.h \ 441 443 Source/WebKit2/Shared/LayerTreeContext.h \ 442 444 Source/WebKit2/Shared/MutableDictionary.cpp \ -
trunk/Source/WebKit2/Shared/APIArray.h
r159236 r159992 1 1 /* 2 * Copyright (C) 2010 Apple Inc. All rights reserved.2 * Copyright (C) 2010, 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 28 28 29 29 #include "APIObject.h" 30 #include "FilterIterator.h" 31 #include "IteratorPair.h" 30 32 #include <wtf/Forward.h> 31 33 #include <wtf/PassRefPtr.h> … … 35 37 36 38 class Array FINAL : public TypedObject<Object::Type::Array> { 39 private: 40 template<typename T> 41 static inline const T* getObject(const RefPtr<Object>& object) { return static_cast<const T*>(object.get()); } 42 43 template<typename T> 44 static inline bool isType(const RefPtr<Object>& object) { return object->type() == T::APIType; } 45 37 46 public: 38 47 static PassRefPtr<Array> create(); … … 46 55 T* at(size_t i) const 47 56 { 48 if ( m_elements[i]->type() != T::APIType)57 if (!isType<T>(m_elements[i])) 49 58 return nullptr; 50 59 … … 58 67 Vector<RefPtr<Object>>& elements() { return m_elements; } 59 68 69 template<typename T> 70 IteratorPair<FilterIterator<decltype(&isType<T>), decltype(&getObject<T>), Vector<RefPtr<Object>>::const_iterator>> elementsOfType() 71 { 72 return IteratorPair<FilterIterator<decltype(&isType<T>), decltype(&getObject<T>), Vector<RefPtr<Object>>::const_iterator>>(FilterIterator<decltype(&isType<T>), decltype(&getObject<T>), Vector<RefPtr<Object>>::const_iterator>(isType<T>, getObject<T>, m_elements.begin(), m_elements.end()), FilterIterator<decltype(&isType<T>), decltype(&getObject<T>), Vector<RefPtr<Object>>::const_iterator>(isType<T>, getObject<T>, m_elements.end(), m_elements.end())); 73 } 74 60 75 private: 61 76 explicit Array(Vector<RefPtr<Object>> elements); -
trunk/Source/WebKit2/Shared/FilterIterator.h
r159991 r159992 1 1 /* 2 * Copyright (C) 201 0Apple Inc. All rights reserved.2 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 #ifndef APIArray_h27 #define APIArray_h26 #ifndef FilterIterator_h 27 #define FilterIterator_h 28 28 29 29 #include "APIObject.h" … … 34 34 namespace API { 35 35 36 class Array FINAL : public TypedObject<Object::Type::Array> { 36 template<typename Predicate, typename Cast, typename Iterator> 37 class FilterIterator { 37 38 public: 38 static PassRefPtr<Array> create(); 39 static PassRefPtr<Array> create(Vector<RefPtr<Object>> elements); 40 41 static PassRefPtr<Array> createStringArray(const Vector<String>&); 42 43 virtual ~Array(); 44 45 template<typename T> 46 T* at(size_t i) const 39 FilterIterator(Predicate pred, Cast cast, Iterator begin, Iterator end) 40 : m_pred(std::move(pred)) 41 , m_cast(std::move(cast)) 42 , m_iter(std::move(begin)) 43 , m_end(std::move(end)) 47 44 { 48 if (m_elements[i]->type() != T::APIType) 49 return nullptr; 50 51 return static_cast<T*>(m_elements[i].get()); 45 while (m_iter != m_end && !m_pred(*m_iter)) 46 ++m_iter; 52 47 } 53 48 54 Object* at(size_t i) const { return m_elements[i].get(); } 55 size_t size() const { return m_elements.size(); } 49 FilterIterator& operator++() 50 { 51 while (m_iter != m_end) { 52 ++m_iter; 53 if (m_iter == m_end || m_pred(*m_iter)) 54 break; 55 } 56 return *this; 57 } 56 58 57 const Vector<RefPtr<Object>>& elements() const { return m_elements; } 58 Vector<RefPtr<Object>>& elements() { return m_elements; } 59 const decltype(std::declval<Cast>()(*std::declval<Iterator>())) operator*() const 60 { 61 ASSERT(m_iter != m_end); 62 ASSERT(m_pred(*m_iter)); 63 return m_cast(*m_iter); 64 } 65 66 inline bool operator==(FilterIterator& other) const { return m_iter == other.m_iter; } 67 inline bool operator!=(FilterIterator& other) const { return m_iter != other.m_iter; } 59 68 60 69 private: 61 explicit Array(Vector<RefPtr<Object>> elements); 62 63 Vector<RefPtr<Object>> m_elements; 70 const Predicate m_pred; 71 const Cast m_cast; 72 Iterator m_iter; 73 Iterator m_end; 64 74 }; 65 75 66 76 } // namespace API 67 77 68 #endif // APIArray_h78 #endif // FilterIterator_h -
trunk/Source/WebKit2/Shared/IteratorPair.h
r159991 r159992 1 1 /* 2 * Copyright (C) 201 0Apple Inc. All rights reserved.2 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 3 * 4 4 * Redistribution and use in source and binary forms, with or without … … 24 24 */ 25 25 26 #ifndef APIArray_h 27 #define APIArray_h 28 29 #include "APIObject.h" 30 #include <wtf/Forward.h> 31 #include <wtf/PassRefPtr.h> 32 #include <wtf/Vector.h> 33 34 namespace API { 35 36 class Array FINAL : public TypedObject<Object::Type::Array> { 26 template<typename Iterator> class IteratorPair { 37 27 public: 38 static PassRefPtr<Array> create(); 39 static PassRefPtr<Array> create(Vector<RefPtr<Object>> elements); 40 41 static PassRefPtr<Array> createStringArray(const Vector<String>&); 42 43 virtual ~Array(); 44 45 template<typename T> 46 T* at(size_t i) const 28 IteratorPair(Iterator begin, Iterator end) 29 : m_begin(std::move(begin)) 30 , m_end(std::move(end)) 47 31 { 48 if (m_elements[i]->type() != T::APIType)49 return nullptr;50 51 return static_cast<T*>(m_elements[i].get());52 32 } 53 33 54 Object* at(size_t i) const { return m_elements[i].get(); } 55 size_t size() const { return m_elements.size(); } 56 57 const Vector<RefPtr<Object>>& elements() const { return m_elements; } 58 Vector<RefPtr<Object>>& elements() { return m_elements; } 34 Iterator begin() { return m_begin; } 35 Iterator end() { return m_end; } 59 36 60 37 private: 61 explicit Array(Vector<RefPtr<Object>> elements); 62 63 Vector<RefPtr<Object>> m_elements; 38 Iterator m_begin, m_end; 64 39 }; 65 66 } // namespace API67 68 #endif // APIArray_h -
trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj
r159991 r159992 685 685 728E86F11795188C0087879E /* WebColorPickerMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 728E86EF1795188C0087879E /* WebColorPickerMac.h */; }; 686 686 728E86F21795188C0087879E /* WebColorPickerMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 728E86F01795188C0087879E /* WebColorPickerMac.mm */; }; 687 752A8077183D6DA7003D659E /* FilterIterator.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 752A8076183D6DA7003D659E /* FilterIterator.h */; }; 687 688 755422BB18062B9C0046F6A8 /* WKOriginDataManager.cpp in Copy Files */ = {isa = PBXBuildFile; fileRef = 755422B918062B9C0046F6A8 /* WKOriginDataManager.cpp */; }; 688 689 755422BC18062B9C0046F6A8 /* WKOriginDataManager.h in Copy Files */ = {isa = PBXBuildFile; fileRef = 755422BA18062B9C0046F6A8 /* WKOriginDataManager.h */; }; … … 692 693 755422CB180650020046F6A8 /* WebOriginDataManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 755422C618064FFC0046F6A8 /* WebOriginDataManager.cpp */; }; 693 694 755422CC180773CE0046F6A8 /* WebOriginDataManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 755422C718064FFC0046F6A8 /* WebOriginDataManager.h */; }; 695 757AF978184D131400E6316E /* IteratorPair.h in Headers */ = {isa = PBXBuildFile; fileRef = 757AF976184D130500E6316E /* IteratorPair.h */; }; 694 696 759CCD581808F1640078E8A8 /* WebOriginDataManagerProxyChangeClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 759CCD541808F1600078E8A8 /* WebOriginDataManagerProxyChangeClient.cpp */; }; 695 697 759CCD591808F1690078E8A8 /* WebOriginDataManagerProxyChangeClient.h in Headers */ = {isa = PBXBuildFile; fileRef = 759CCD551808F1600078E8A8 /* WebOriginDataManagerProxyChangeClient.h */; }; … … 1468 1470 755422C318062BE40046F6A8 /* WebOriginDataManagerProxy.messages.in in Copy Files */, 1469 1471 1A50DB66110A3D57000D3FE5 /* WebProcess.app in Copy Files */, 1472 752A8077183D6DA7003D659E /* FilterIterator.h in Copy Files */, 1470 1473 755422BB18062B9C0046F6A8 /* WKOriginDataManager.cpp in Copy Files */, 1471 1474 ); … … 2253 2256 728E86EF1795188C0087879E /* WebColorPickerMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebColorPickerMac.h; sourceTree = "<group>"; }; 2254 2257 728E86F01795188C0087879E /* WebColorPickerMac.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WebColorPickerMac.mm; sourceTree = "<group>"; }; 2258 752A8076183D6DA7003D659E /* FilterIterator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FilterIterator.h; sourceTree = "<group>"; }; 2255 2259 755422B918062B9C0046F6A8 /* WKOriginDataManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKOriginDataManager.cpp; sourceTree = "<group>"; }; 2256 2260 755422BA18062B9C0046F6A8 /* WKOriginDataManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKOriginDataManager.h; sourceTree = "<group>"; }; … … 2261 2265 755422C718064FFC0046F6A8 /* WebOriginDataManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = WebOriginDataManager.h; path = OriginData/WebOriginDataManager.h; sourceTree = "<group>"; }; 2262 2266 755422C818064FFC0046F6A8 /* WebOriginDataManager.messages.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = WebOriginDataManager.messages.in; path = OriginData/WebOriginDataManager.messages.in; sourceTree = "<group>"; }; 2267 757AF976184D130500E6316E /* IteratorPair.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IteratorPair.h; sourceTree = "<group>"; }; 2263 2268 759CCD541808F1600078E8A8 /* WebOriginDataManagerProxyChangeClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebOriginDataManagerProxyChangeClient.cpp; sourceTree = "<group>"; }; 2264 2269 759CCD551808F1600078E8A8 /* WebOriginDataManagerProxyChangeClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebOriginDataManagerProxyChangeClient.h; sourceTree = "<group>"; }; … … 3426 3431 8CFECE931490F140002AAA32 /* EditorState.cpp */, 3427 3432 1AA41AB412C02EC4002BE67B /* EditorState.h */, 3433 752A8076183D6DA7003D659E /* FilterIterator.h */, 3428 3434 BCE81D8A1319F7EF00241910 /* FontInfo.cpp */, 3429 3435 BCE81D8B1319F7EF00241910 /* FontInfo.h */, … … 3433 3439 BCBCB0CC1215E33A00DE59CA /* ImmutableDictionary.cpp */, 3434 3440 BCBCB0CA1215E32100DE59CA /* ImmutableDictionary.h */, 3441 757AF976184D130500E6316E /* IteratorPair.h */, 3435 3442 1A92DC1012F8BA460017AF65 /* LayerTreeContext.h */, 3436 3443 BCB0AEE8122F53E300B1341E /* MutableDictionary.cpp */, … … 5797 5804 E179088F169BAA6A006904C7 /* SecItemShim.h in Headers */, 5798 5805 511F8A7B138B460900A95F44 /* SecItemShimLibrary.h in Headers */, 5806 757AF978184D131400E6316E /* IteratorPair.h in Headers */, 5799 5807 E1790891169BAA82006904C7 /* SecItemShimMessages.h in Headers */, 5800 5808 E18E690C169B563F009B6670 /* SecItemShimProxy.h in Headers */, -
trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundle.cpp
r159988 r159992 486 486 487 487 patternsVector.reserveInitialCapacity(size); 488 for (size_t i = 0; i < size; ++i) { 489 WebString* entry = patterns->at<WebString>(i); 490 if (entry) 491 patternsVector.uncheckedAppend(entry->string()); 492 } 488 for (const auto& entry : patterns->elementsOfType<WebString>()) 489 patternsVector.uncheckedAppend(entry->string()); 493 490 return patternsVector; 494 491 } -
trunk/Source/WebKit2/WebProcess/InjectedBundle/InjectedBundlePageEditorClient.cpp
r159988 r159992 155 155 ASSERT(typesArray->size() == dataArray->size()); 156 156 157 size_t size = typesArray->size(); 158 for (size_t i = 0; i < size; ++i) { 159 WebString* type = typesArray->at<WebString>(i); 160 if (type) 161 pasteboardTypes.append(type->string()); 162 } 157 for (const auto& type : typesArray->elementsOfType<WebString>()) 158 pasteboardTypes.append(type->string()); 163 159 164 size = dataArray->size(); 165 for (size_t i = 0; i < size; ++i) { 166 WebData* item = dataArray->at<WebData>(i); 167 if (item) { 168 RefPtr<SharedBuffer> buffer = SharedBuffer::create(item->bytes(), item->size()); 169 pasteboardData.append(buffer); 170 } 160 for (const auto& item : dataArray->elementsOfType<WebData>()) { 161 RefPtr<SharedBuffer> buffer = SharedBuffer::create(item->bytes(), item->size()); 162 pasteboardData.append(buffer); 171 163 } 172 164 }
Note: See TracChangeset
for help on using the changeset viewer.