85 const wxString& aLibName,
86 const std::function<
void(
const std::vector<LIB_TREE_ITEM*>& )>& aCallback )
90 std::vector<LIB_TREE_ITEM*> libList;
91 const auto& fullList =
GetList();
94 std::unique_ptr<FOOTPRINT_INFO> dummyPtr( &
dummy );
96 auto libBounds = std::equal_range( fullList.begin(), fullList.end(), dummyPtr,
97 [](
const std::unique_ptr<FOOTPRINT_INFO>& a,
const std::unique_ptr<FOOTPRINT_INFO>& b )
102 return StrNumCmp( a->GetLibNickname(), b->GetLibNickname(), false ) < 0;
107 for(
auto i = libBounds.first; i != libBounds.second; ++i )
110 libList.push_back( i->get() );
113 aCallback( libList );
222 size_t num_elements =
m_queue.size();
223 std::vector<std::future<size_t>> returns( num_elements );
226 [
this, &queue_parsed ]() ->
size_t
237 std::vector<wxString> fpnames;
242 fpnames =
m_adapter->GetFootprintNames( nickname );
245 for( wxString fpname : fpnames )
251 queue_parsed.
move_push( std::unique_ptr<FOOTPRINT_INFO>( fpinfo ) );
264 for(
size_t ii = 0; ii < num_elements; ++ii )
265 returns[ii] =
tp.submit_task( fp_thread );
267 for(
const std::future<size_t>& ret : returns )
269 std::future_status status = ret.wait_for( std::chrono::milliseconds( 250 ) );
271 while( status != std::future_status::ready )
276 status = ret.wait_for( std::chrono::milliseconds( 250 ) );
280 std::unique_ptr<FOOTPRINT_INFO> fpi;
282 while( queue_parsed.
pop( fpi ) )
283 m_list.push_back( std::move( fpi ) );
286 []( std::unique_ptr<FOOTPRINT_INFO>
const& lhs,
287 std::unique_ptr<FOOTPRINT_INFO>
const& rhs ) ->
bool