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>
31 
32 class LOCALE_IO;
33 
35 {
36 public:
37  FOOTPRINT_INFO_IMPL( FOOTPRINT_LIST* aOwner, const wxString& aNickname,
38  const wxString& aFootprintName )
39  {
40  m_owner = aOwner;
41  m_loaded = false;
42  m_nickname = aNickname;
43  m_fpname = aFootprintName;
44  m_num = 0;
45  m_pad_count = 0;
47 #if !USE_FPI_LAZY
48  load();
49 #endif
50  }
51 
52 protected:
53  virtual void load() override;
54 };
55 
56 
58 {
60  const wxString* m_library;
61  std::vector<std::thread> m_threads;
64  std::atomic_size_t m_count_finished;
65  long long m_list_timestamp;
67  std::atomic_bool m_cancelled;
68  std::mutex m_join;
69 
75  bool CatchErrors( const std::function<void()>& aFunc );
76 
77 protected:
78  void StartWorkers( FP_LIB_TABLE* aTable, wxString const* aNickname,
79  FOOTPRINT_ASYNC_LOADER* aLoader, unsigned aNThreads ) override;
80  bool JoinWorkers() override;
81 
82  void StopWorkers() override;
83 
88  void loader_job();
89 
90 public:
92  virtual ~FOOTPRINT_LIST_IMPL();
93 
94  bool ReadFootprintFiles( FP_LIB_TABLE* aTable, const wxString* aNickname = nullptr,
95  PROGRESS_REPORTER* aProgressReporter = nullptr ) override;
96 };
97 
98 extern FOOTPRINT_LIST_IMPL GFootprintList; // KIFACE scope.
99 
100 
101 #endif // FOOTPRINT_INFO_IMPL_H
FOOTPRINT_INFO_IMPL(FOOTPRINT_LIST *aOwner, const wxString &aNickname, const wxString &aFootprintName)
SYNC_QUEUE< wxString > m_queue_out
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown...
Definition: common.h:167
A progress reporter for use in multi-threaded environments.
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
FOOTPRINT_LIST_IMPL GFootprintList
The global footprint info table.
Definition: pcbnew.cpp:316
PROGRESS_REPORTER * m_progress_reporter
wxString m_fpname
Module name.
std::atomic_size_t m_count_finished
FOOTPRINT_ASYNC_LOADER * m_loader
const wxString * m_library
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.