69 std::vector<std::future<size_t>> returns;
75 using IndexedPriority = std::pair<size_t, int>;
76 std::vector<IndexedPriority> indexedKeys( aItems.size() );
77 for(
size_t i = 0; i < aItems.size(); ++i )
83 std::sort( indexedKeys.begin(), indexedKeys.end(),
84 [](
const IndexedPriority& a,
const IndexedPriority& b )
86 return a.second > b.second;
90 const size_t numItems = aItems.size();
91 for(
size_t priorityRank = 0; priorityRank < numItems; ++priorityRank )
93 const size_t itemIndex = indexedKeys[priorityRank].first;
94 ItemT& item = aItems[itemIndex];
97 const size_t priority = ( ( numItems - priorityRank - 1 ) *
m_highestPriority ) / numItems;
99 returns.emplace_back(
tp.submit_task(
113 m_abort.store( true );
120 size_t totalProcessed = 0;
123 std::exception_ptr firstException;
125 for( std::future<size_t>& ret : returns )
129 while( status != std::future_status::ready )
139 totalProcessed += ret.get();
143 if( !firstException )
144 firstException = std::current_exception();
151 std::rethrow_exception( firstException );
153 return totalProcessed;