82 const wxString& aLibName,
83 const std::function<
void(
const std::vector<LIB_TREE_ITEM*>& )>& aCallback )
87 std::vector<LIB_TREE_ITEM*> libList;
88 const auto& fullList =
GetList();
91 std::unique_ptr<FOOTPRINT_INFO> dummyPtr( &
dummy );
93 auto libBounds = std::equal_range( fullList.begin(), fullList.end(), dummyPtr,
94 [](
const std::unique_ptr<FOOTPRINT_INFO>& a,
const std::unique_ptr<FOOTPRINT_INFO>& b )
99 return StrNumCmp( a->GetLibNickname(), b->GetLibNickname(), false ) < 0;
104 for(
auto i = libBounds.first; i != libBounds.second; ++i )
107 libList.push_back( i->get() );
110 aCallback( libList );
219 size_t num_elements =
m_queue.size();
220 std::vector<std::future<size_t>> returns( num_elements );
223 [
this, &queue_parsed ]() ->
size_t
234 std::vector<wxString> fpnames;
239 fpnames =
m_adapter->GetFootprintNames( nickname );
242 for( wxString fpname : fpnames )
248 queue_parsed.
move_push( std::unique_ptr<FOOTPRINT_INFO>( fpinfo ) );
261 for(
size_t ii = 0; ii < num_elements; ++ii )
262 returns[ii] =
tp.submit_task( fp_thread );
264 for(
const std::future<size_t>& ret : returns )
266 std::future_status status = ret.wait_for( std::chrono::milliseconds( 250 ) );
268 while( status != std::future_status::ready )
273 status = ret.wait_for( std::chrono::milliseconds( 250 ) );
277 std::unique_ptr<FOOTPRINT_INFO> fpi;
279 while( queue_parsed.
pop( fpi ) )
280 m_list.push_back( std::move( fpi ) );
283 []( std::unique_ptr<FOOTPRINT_INFO>
const& lhs,
284 std::unique_ptr<FOOTPRINT_INFO>
const& rhs ) ->
bool