Changeset 221977 in webkit
- Timestamp:
- Sep 13, 2017 10:50:48 AM (7 years ago)
- Location:
- trunk
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r221959 r221977 1 2017-09-13 Youenn Fablet <youenn@apple.com> 2 3 Add a lambda-based map for Vectors 4 https://bugs.webkit.org/show_bug.cgi?id=176487 5 6 Reviewed by Darin Adler. 7 8 This helper routine allows refactoring the reserveInitialCapacity/uncheckedAppend pattern, the mapper between source and destination item being a lambda. 9 10 * wtf/Vector.h: 11 (WTF::Mapper::transform): 12 (WTF::Mapper::map): 13 (WTF::map): 14 1 15 2017-09-12 Yusuke Suzuki <utatane.tea@gmail.com> 2 16 -
trunk/Source/WTF/wtf/Vector.h
r221422 r221977 1561 1561 } 1562 1562 1563 template<typename Transformer, typename SourceType> struct Mapper { 1564 using RealSourceType = typename std::remove_reference<SourceType>::type; 1565 using SourceItemType = typename RealSourceType::ValueType; 1566 using DestinationItemType = typename std::result_of<Transformer(SourceItemType&&)>::type; 1567 1568 static Vector<DestinationItemType> map(const RealSourceType& source, const Transformer& transformer) 1569 { 1570 Vector<DestinationItemType> result; 1571 result.reserveInitialCapacity(source.size()); 1572 for (auto& item : source) 1573 result.uncheckedAppend(transformer(item)); 1574 return result; 1575 } 1576 1577 static Vector<DestinationItemType> map(RealSourceType&& source, const Transformer& transformer) 1578 { 1579 Vector<DestinationItemType> result; 1580 result.reserveInitialCapacity(source.size()); 1581 for (auto& item : source) 1582 result.uncheckedAppend(transformer(std::forward<SourceItemType>(item))); 1583 return result; 1584 } 1585 }; 1586 1587 template<typename Transformer, typename VectorType> 1588 Vector<typename Mapper<Transformer, VectorType>::DestinationItemType> map(VectorType&& source, const Transformer& transformer) 1589 { 1590 return Mapper<Transformer, VectorType>::map(std::forward<VectorType>(source), transformer); 1591 } 1592 1563 1593 } // namespace WTF 1564 1594 -
trunk/Source/WebKit/ChangeLog
r221976 r221977 1 2017-09-13 Youenn Fablet <youenn@apple.com> 2 3 Add a lambda-based map for Vectors 4 https://bugs.webkit.org/show_bug.cgi?id=176487 5 6 Reviewed by Darin Adler. 7 8 * NetworkProcess/cache/CacheStorageEngineCaches.cpp: 9 (WebKit::CacheStorage::Caches::readCachesFromDisk): 10 1 11 2017-09-13 John Wilander <wilander@apple.com> 2 12 -
trunk/Source/WebKit/NetworkProcess/cache/CacheStorageEngineCaches.cpp
r221710 r221977 241 241 return; 242 242 } 243 Vector<Cache> caches; 244 caches.reserveInitialCapacity(result.value().size()); 245 for (auto& name : result.value()) 246 caches.uncheckedAppend(Cache { *this, m_engine->nextCacheIdentifier(), Cache::State::Uninitialized, WTFMove(name) }); 247 248 callback(WTFMove(caches)); 243 callback(WTF::map(WTFMove(result.value()), [this] (String&& name) { 244 return Cache { *this, m_engine->nextCacheIdentifier(), Cache::State::Uninitialized, WTFMove(name) }; 245 })); 249 246 }); 250 247 } -
trunk/Tools/ChangeLog
r221976 r221977 1 2017-09-13 Youenn Fablet <youenn@apple.com> 2 3 Add a lambda-based map for Vectors 4 https://bugs.webkit.org/show_bug.cgi?id=176487 5 6 Reviewed by Darin Adler. 7 8 * TestWebKitAPI/Tests/WTF/Vector.cpp: 9 (TestWebKitAPI::TEST): 10 1 11 2017-09-13 John Wilander <wilander@apple.com> 2 12 -
trunk/Tools/TestWebKitAPI/Tests/WTF/Vector.cpp
r215943 r221977 652 652 } 653 653 654 TEST(WTF_Vector, MapLambda) 655 { 656 Vector<int> vector { 2, 3, 4}; 657 658 int counter = 0; 659 auto mapped = WTF::map(vector, [&] (int item) { 660 counter += 2; 661 return counter <= item; 662 }); 663 664 EXPECT_EQ(3U, mapped.size()); 665 EXPECT_TRUE(mapped[0]); 666 EXPECT_FALSE(mapped[1]); 667 EXPECT_FALSE(mapped[2]); 668 } 669 670 TEST(WTF_Vector, MapLambdaMove) 671 { 672 Vector<MoveOnly> vector; 673 674 vector.reserveInitialCapacity(3); 675 for (unsigned i = 0; i < 3; ++i) 676 vector.uncheckedAppend(MoveOnly { i }); 677 678 679 unsigned counter = 0; 680 auto mapped = WTF::map(WTFMove(vector), [&] (MoveOnly&& item) { 681 item = item.value() + ++counter; 682 return WTFMove(item); 683 }); 684 685 EXPECT_EQ(3U, mapped.size()); 686 EXPECT_EQ(1U, mapped[0].value()); 687 EXPECT_EQ(3U, mapped[1].value()); 688 EXPECT_EQ(5U, mapped[2].value()); 689 } 690 654 691 } // namespace TestWebKitAPI
Note: See TracChangeset
for help on using the changeset viewer.