KiCad PCB EDA Suite
footprint_info_impl.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 1992-2018 KiCad Developers, see AUTHORS.txt for contributors.
5  *
6  * This program is free software: you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by the
8  * Free Software Foundation, either version 3 of the License, or (at your
9  * option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License along
17  * with this program. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef FOOTPRINT_INFO_IMPL_H
21 #define FOOTPRINT_INFO_IMPL_H
22 
23 #include <atomic>
24 #include <functional>
25 #include <memory>
26 #include <thread>
27 #include <vector>
28 
29 #include <footprint_info.h>
30 #include <sync_queue.h>
32 
33 class LOCALE_IO;
34 
36 {
37 public:
39  FOOTPRINT_LIST* aOwner, const wxString& aNickname, const wxString& aFootprintName )
40  {
41  m_owner = aOwner;
42  m_loaded = false;
43  m_nickname = aNickname;
44  m_fpname = aFootprintName;
45  m_num = 0;
46  m_pad_count = 0;
48 #if !USE_FPI_LAZY
49  load();
50 #endif
51  }
52 
53 protected:
54  virtual void load() override;
55 };
56 
57 
59 {
61  std::vector<std::thread> m_threads;
64  std::atomic_size_t m_count_finished;
67  std::atomic_bool m_cancelled;
68 
74  bool CatchErrors( const std::function<void()>& aFunc );
75 
76 protected:
77  virtual void StartWorkers( FP_LIB_TABLE* aTable, wxString const* aNickname,
78  FOOTPRINT_ASYNC_LOADER* aLoader, unsigned aNThreads ) override;
79  virtual bool JoinWorkers() override;
80  virtual size_t CountFinished() override;
81 
86  void loader_job();
87 
88 public:
90  virtual ~FOOTPRINT_LIST_IMPL();
91 
92  virtual bool ReadFootprintFiles( FP_LIB_TABLE* aTable, const wxString* aNickname = nullptr,
93  WX_PROGRESS_REPORTER* aProgressReporter = nullptr ) override;
94 };
95 
96 #endif // FOOTPRINT_INFO_IMPL_H
FOOTPRINT_INFO_IMPL(FOOTPRINT_LIST *aOwner, const wxString &aNickname, const wxString &aFootprintName)
SYNC_QUEUE< wxString > m_queue_out
Class LOCALE_IO is a class that can be instantiated within a scope in which you are expecting excepti...
Definition: common.h:166
long long m_libraries_last_mod_checksum
std::atomic_bool m_cancelled
This class can be used to populate a FOOTPRINT_LIST asynchronously.
int m_unique_pad_count
Number of unique pads.
std::vector< std::thread > m_threads
int m_num
Order number in the display list.
FOOTPRINT_LIST * m_owner
provides access to FP_LIB_TABLE
SYNC_QUEUE< wxString > m_queue_in
wxString m_fpname
Module name.
WX_PROGRESS_REPORTER * m_progress_reporter
std::atomic_size_t m_count_finished
FOOTPRINT_ASYNC_LOADER * m_loader
int m_pad_count
Number of pads.
Holds a list of FOOTPRINT_INFO objects, along with a list of IO_ERRORs or PARSE_ERRORs that were thro...
wxString m_nickname
library as known in FP_LIB_TABLE
virtual void load() override
lazily load stuff not filled in by constructor. This may throw IO_ERRORS.