79 const wxString& aLibName,
80 const std::function<
void(
const std::vector<LIB_TREE_ITEM*>& )>& aCallback )
84 std::vector<LIB_TREE_ITEM*> libList;
85 const auto& fullList =
GetList();
88 std::unique_ptr<FOOTPRINT_INFO> dummyPtr( &
dummy );
90 auto libBounds = std::equal_range( fullList.begin(), fullList.end(), dummyPtr,
91 [](
const std::unique_ptr<FOOTPRINT_INFO>& a,
const std::unique_ptr<FOOTPRINT_INFO>& b )
96 return StrNumCmp( a->GetLibNickname(), b->GetLibNickname(), false ) < 0;
101 for(
auto i = libBounds.first; i != libBounds.second; ++i )
104 libList.push_back( i->get() );
107 aCallback( libList );
216 size_t num_elements =
m_queue.size();
217 std::vector<std::future<size_t>> returns( num_elements );
220 [
this, &queue_parsed ]() ->
size_t
231 std::vector<wxString> fpnames;
236 fpnames =
m_adapter->GetFootprintNames( nickname );
239 for( wxString fpname : fpnames )
245 queue_parsed.
move_push( std::unique_ptr<FOOTPRINT_INFO>( fpinfo ) );
258 for(
size_t ii = 0; ii < num_elements; ++ii )
259 returns[ii] =
tp.submit_task( fp_thread );
261 for(
const std::future<size_t>& ret : returns )
263 std::future_status status = ret.wait_for( std::chrono::milliseconds( 250 ) );
265 while( status != std::future_status::ready )
270 status = ret.wait_for( std::chrono::milliseconds( 250 ) );
274 std::unique_ptr<FOOTPRINT_INFO> fpi;
276 while( queue_parsed.
pop( fpi ) )
277 m_list.push_back( std::move( fpi ) );
280 []( std::unique_ptr<FOOTPRINT_INFO>
const& lhs,
281 std::unique_ptr<FOOTPRINT_INFO>
const& rhs ) ->
bool