KiCad PCB EDA Suite
pns_link_holder.h
Go to the documentation of this file.
1 /*
2  * KiRouter - a push-and-(sometimes-)shove PCB router
3  *
4  * Copyright (C) 2019 CERN
5  * Copyright (C) 2021 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * Author: Seth Hillbrand <hillbrand@ucdavis.edu>
8  * Author: Tomasz Wlostowski <tomasz.wlostowski@cern.h>
9  *
10  * This program is free software: you can redistribute it and/or modify it
11  * under the terms of the GNU General Public License as published by the
12  * Free Software Foundation, either version 3 of the License, or (at your
13  * option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful, but
16  * WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License along
21  * with this program. If not, see <http://www.gnu.org/licenses/>.
22  */
23 
24 #ifndef PCBNEW_ROUTER_PNS_LINK_HOLDER_H_
25 #define PCBNEW_ROUTER_PNS_LINK_HOLDER_H_
26 
27 #include <core/kicad_algo.h>
28 #include "pns_item.h"
29 #include "pns_linked_item.h"
30 
31 namespace PNS
32 {
33 class LINK_HOLDER : public ITEM
34 {
35 public:
36  typedef std::vector<LINKED_ITEM*> LINKS;
37 
38  LINK_HOLDER( PnsKind aKind ) : ITEM( aKind )
39  {}
40 
42  void Link( LINKED_ITEM* aLink )
43  {
44  m_links.push_back( aLink );
45  }
46 
49  LINKS& Links() { return m_links; }
50  const LINKS& Links() const { return m_links; }
51 
52  bool IsLinked() const
53  {
54  return m_links.size() != 0;
55  }
56 
58  bool ContainsLink( const LINKED_ITEM* aItem ) const
59  {
60  return alg::contains( m_links, aItem );
61  }
62 
63  LINKED_ITEM* GetLink( int aIndex ) const
64  {
65  return m_links[aIndex];
66  }
67 
69  virtual void ClearLinks()
70  {
71  m_links.clear();
72  }
73 
75  int LinkCount() const
76  {
77  return m_links.size();
78  }
79 
80  void ShowLinks() const
81  {
82 #if 0
83  if( !IsLinked() )
84  {
85  wxLogTrace( "PNS", "item %p: no links", this );
86  return;
87  }
88 
89  wxLogTrace( "PNS", "item %p: %d links", this, (int) m_links.size() );
90 
91  for( int i = 0; i < (int) m_links.size(); i++ )
92  wxLogTrace( "PNS", "item %d: %p\n", i, m_links[i] );
93 #endif
94  }
95 
96 protected:
98  void copyLinks( const LINK_HOLDER* aParent )
99  {
100  m_links = aParent->m_links;
101  }
102 
106 };
107 
108 } // namespace PNS
109 #endif /* PCBNEW_ROUTER_PNS_LINK_HOLDER_H_ */
Base class for PNS router board items.
Definition: pns_item.h:55
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
Definition: kicad_algo.h:99
Push and Shove diff pair dimensions (gap) settings dialog.