KiCad PCB EDA Suite
CONNECTION_SUBGRAPH Class Reference

A subgraph is a set of items that are electrically connected on a single sheet. More...

#include <connection_graph.h>

Public Types

enum  PRIORITY {
  PRIORITY_NONE = 0, PRIORITY_PIN, PRIORITY_SHEET_PIN, PRIORITY_HIER_LABEL,
  PRIORITY_LOCAL_LABEL, PRIORITY_POWER_PIN, PRIORITY_GLOBAL
}
 

Public Member Functions

 CONNECTION_SUBGRAPH (SCH_EDIT_FRAME *aFrame)
 
bool ResolveDrivers (bool aCreateMarkers=false)
 Determines which potential driver should drive the subgraph. More...
 
wxString GetNetName () const
 Returns the fully-qualified net name for this subgraph (if one exists) More...
 
std::vector< SCH_ITEM * > GetBusLabels () const
 Returns all the bus labels attached to this subgraph (if any) More...
 
wxString GetNameForDriver (SCH_ITEM *aItem) const
 Returns the candidate net name for a driver. More...
 
void Absorb (CONNECTION_SUBGRAPH *aOther)
 Combines another subgraph on the same sheet into this one. More...
 
void AddItem (SCH_ITEM *aItem)
 Adds a new item to the subgraph. More...
 
void UpdateItemConnections ()
 Updates all items to match the driver connection. More...
 

Static Public Member Functions

static PRIORITY GetDriverPriority (SCH_ITEM *aDriver)
 Returns the priority (higher is more important) of a candidate driver. More...
 

Public Attributes

bool m_dirty
 
bool m_absorbed
 True if this subgraph has been absorbed into another. No pointers here are safe if so! More...
 
CONNECTION_SUBGRAPHm_absorbed_by
 If this subgraph is absorbed, points to the absorbing (and valid) subgraph. More...
 
long m_code
 
bool m_multiple_drivers
 True if this subgraph contains more than one driver that should be shorted together in the netlist. More...
 
bool m_strong_driver
 True if the driver is "strong": a label or power object. More...
 
bool m_local_driver
 True if the driver is a local (i.e. non-global) type. More...
 
SCH_ITEMm_no_connect
 No-connect item in graph, if any. More...
 
SCH_ITEMm_bus_entry
 Bus entry in graph, if any. More...
 
std::vector< SCH_ITEM * > m_items
 
std::vector< SCH_ITEM * > m_drivers
 
SCH_ITEMm_driver
 
SCH_SHEET_PATH m_sheet
 
SCH_EDIT_FRAMEm_frame
 
SCH_CONNECTIONm_driver_connection
 Cache for driver connection. More...
 
std::unordered_map< std::shared_ptr< SCH_CONNECTION >, std::unordered_set< CONNECTION_SUBGRAPH * > > m_bus_neighbors
 If a subgraph is a bus, this map contains links between the bus members and any local sheet neighbors with the same connection name. More...
 
std::unordered_map< std::shared_ptr< SCH_CONNECTION >, std::unordered_set< CONNECTION_SUBGRAPH * > > m_bus_parents
 If this is a net, this vector contains links to any same-sheet buses that contain it. More...
 
std::vector< SCH_SHEET_PIN * > m_hier_pins
 
std::vector< SCH_HIERLABEL * > m_hier_ports
 

Detailed Description

A subgraph is a set of items that are electrically connected on a single sheet.

For example, a label connected to a wire and so on. A net is composed of one or more subgraphs.

A set of items that appears to be physically connected may actually be more than one subgraph, because some items don't connect electrically.

For example, multiple bus wires can come together at a junction but have different labels on each branch. Each label+wire branch is its own subgraph.

Definition at line 58 of file connection_graph.h.

Member Enumeration Documentation

◆ PRIORITY

Constructor & Destructor Documentation

◆ CONNECTION_SUBGRAPH()

CONNECTION_SUBGRAPH::CONNECTION_SUBGRAPH ( SCH_EDIT_FRAME aFrame)
inlineexplicit

Definition at line 71 of file connection_graph.h.

71  :
72  m_dirty( false ), m_absorbed( false ), m_absorbed_by( nullptr ), m_code( -1 ),
73  m_multiple_drivers( false ), m_strong_driver( false ), m_local_driver( false ),
74  m_no_connect( nullptr ), m_bus_entry( nullptr ), m_driver( nullptr ), m_frame( aFrame ),
75  m_driver_connection( nullptr )
76  {}
SCH_CONNECTION * m_driver_connection
Cache for driver connection.
SCH_ITEM * m_bus_entry
Bus entry in graph, if any.
SCH_EDIT_FRAME * m_frame
bool m_absorbed
True if this subgraph has been absorbed into another. No pointers here are safe if so!
bool m_local_driver
True if the driver is a local (i.e. non-global) type.
bool m_multiple_drivers
True if this subgraph contains more than one driver that should be shorted together in the netlist.
bool m_strong_driver
True if the driver is "strong": a label or power object.
CONNECTION_SUBGRAPH * m_absorbed_by
If this subgraph is absorbed, points to the absorbing (and valid) subgraph.
SCH_ITEM * m_no_connect
No-connect item in graph, if any.

Member Function Documentation

◆ Absorb()

void CONNECTION_SUBGRAPH::Absorb ( CONNECTION_SUBGRAPH aOther)

Combines another subgraph on the same sheet into this one.

Definition at line 264 of file connection_graph.cpp.

265 {
266  wxASSERT( m_sheet == aOther->m_sheet );
267 
268  for( SCH_ITEM* item : aOther->m_items )
269  {
271  AddItem( item );
272  }
273 
274  m_bus_neighbors.insert( aOther->m_bus_neighbors.begin(), aOther->m_bus_neighbors.end() );
275  m_bus_parents.insert( aOther->m_bus_parents.begin(), aOther->m_bus_parents.end() );
276 
277  aOther->m_absorbed = true;
278  aOther->m_dirty = false;
279  aOther->m_driver = nullptr;
280  aOther->m_driver_connection = nullptr;
281  aOther->m_absorbed_by = this;
282 }
SCH_SHEET_PATH m_sheet
SCH_CONNECTION * m_driver_connection
Cache for driver connection.
std::unordered_map< std::shared_ptr< SCH_CONNECTION >, std::unordered_set< CONNECTION_SUBGRAPH * > > m_bus_neighbors
If a subgraph is a bus, this map contains links between the bus members and any local sheet neighbors...
bool m_absorbed
True if this subgraph has been absorbed into another. No pointers here are safe if so!
std::unordered_map< std::shared_ptr< SCH_CONNECTION >, std::unordered_set< CONNECTION_SUBGRAPH * > > m_bus_parents
If this is a net, this vector contains links to any same-sheet buses that contain it.
void SetSubgraphCode(int aCode)
std::vector< SCH_ITEM * > m_items
void AddItem(SCH_ITEM *aItem)
Adds a new item to the subgraph.
SCH_CONNECTION * Connection(const SCH_SHEET_PATH &aPath) const
Retrieves the connection associated with this object in the given sheet.
Definition: sch_item.cpp:128
CONNECTION_SUBGRAPH * m_absorbed_by
If this subgraph is absorbed, points to the absorbing (and valid) subgraph.
Class SCH_ITEM is a base class for any item which can be embedded within the SCHEMATIC container clas...
Definition: sch_item.h:114

References AddItem(), SCH_ITEM::Connection(), m_absorbed, m_absorbed_by, m_bus_neighbors, m_bus_parents, m_code, m_dirty, m_driver, m_driver_connection, m_items, m_sheet, and SCH_CONNECTION::SetSubgraphCode().

◆ AddItem()

void CONNECTION_SUBGRAPH::AddItem ( SCH_ITEM aItem)

Adds a new item to the subgraph.

Definition at line 285 of file connection_graph.cpp.

286 {
287  m_items.push_back( aItem );
288 
289  if( aItem->Connection( m_sheet )->IsDriver() )
290  m_drivers.push_back( aItem );
291 
292  if( aItem->Type() == SCH_SHEET_PIN_T )
293  m_hier_pins.push_back( static_cast<SCH_SHEET_PIN*>( aItem ) );
294  else if( aItem->Type() == SCH_HIER_LABEL_T )
295  m_hier_ports.push_back( static_cast<SCH_HIERLABEL*>( aItem ) );
296 }
SCH_SHEET_PATH m_sheet
std::vector< SCH_SHEET_PIN * > m_hier_pins
std::vector< SCH_ITEM * > m_items
std::vector< SCH_ITEM * > m_drivers
bool IsDriver() const
Checks if the SCH_ITEM this connection is attached to can drive connections Drivers can be labels,...
std::vector< SCH_HIERLABEL * > m_hier_ports
SCH_CONNECTION * Connection(const SCH_SHEET_PATH &aPath) const
Retrieves the connection associated with this object in the given sheet.
Definition: sch_item.cpp:128
KICAD_T Type() const
Function Type()
Definition: base_struct.h:210

References SCH_ITEM::Connection(), SCH_CONNECTION::IsDriver(), m_drivers, m_hier_pins, m_hier_ports, m_items, m_sheet, SCH_HIER_LABEL_T, SCH_SHEET_PIN_T, and EDA_ITEM::Type().

Referenced by Absorb(), and CONNECTION_GRAPH::buildConnectionGraph().

◆ GetBusLabels()

std::vector< SCH_ITEM * > CONNECTION_SUBGRAPH::GetBusLabels ( ) const

Returns all the bus labels attached to this subgraph (if any)

Definition at line 209 of file connection_graph.cpp.

210 {
211  std::vector<SCH_ITEM*> labels;
212 
213  for( auto item : m_drivers )
214  {
215  switch( item->Type() )
216  {
217  case SCH_LABEL_T:
218  case SCH_GLOBAL_LABEL_T:
219  {
220  auto label_conn = item->Connection( m_sheet );
221 
222  // Only consider bus vectors
223  if( label_conn->Type() == CONNECTION_BUS )
224  labels.push_back( item );
225  }
226  default: break;
227  }
228  }
229 
230  return labels;
231 }
SCH_SHEET_PATH m_sheet
std::vector< SCH_ITEM * > m_drivers
This item represents a bus vector.

References CONNECTION_BUS, m_drivers, m_sheet, SCH_GLOBAL_LABEL_T, and SCH_LABEL_T.

◆ GetDriverPriority()

CONNECTION_SUBGRAPH::PRIORITY CONNECTION_SUBGRAPH::GetDriverPriority ( SCH_ITEM aDriver)
static

Returns the priority (higher is more important) of a candidate driver.

0: Invalid driver 1: Component pin 2: Hierarchical sheet pin 3: Hierarchical label 4: Local label 5: Power pin 6: Global label

Parameters
aDriveris the item to inspect
Returns
a PRIORITY

Definition at line 326 of file connection_graph.cpp.

327 {
328  if( !aDriver )
329  return PRIORITY_NONE;
330 
331  switch( aDriver->Type() )
332  {
333  case SCH_SHEET_PIN_T: return PRIORITY_SHEET_PIN;
335  case SCH_LABEL_T: return PRIORITY_LOCAL_LABEL;
336  case SCH_GLOBAL_LABEL_T: return PRIORITY_GLOBAL;
337  case SCH_PIN_T:
338  {
339  auto sch_pin = static_cast<SCH_PIN*>( aDriver );
340 
341  if( sch_pin->IsPowerConnection() )
342  return PRIORITY_POWER_PIN;
343  else
344  return PRIORITY_PIN;
345  }
346 
347  default: return PRIORITY_NONE;
348  }
349 }
KICAD_T Type() const
Function Type()
Definition: base_struct.h:210

References PRIORITY_GLOBAL, PRIORITY_HIER_LABEL, PRIORITY_LOCAL_LABEL, PRIORITY_NONE, PRIORITY_PIN, PRIORITY_POWER_PIN, PRIORITY_SHEET_PIN, SCH_GLOBAL_LABEL_T, SCH_HIER_LABEL_T, SCH_LABEL_T, SCH_PIN_T, SCH_SHEET_PIN_T, and EDA_ITEM::Type().

Referenced by CONNECTION_GRAPH::propagateToNeighbors(), and ResolveDrivers().

◆ GetNameForDriver()

wxString CONNECTION_SUBGRAPH::GetNameForDriver ( SCH_ITEM aItem) const

Returns the candidate net name for a driver.

Definition at line 234 of file connection_graph.cpp.

235 {
236  wxString name;
237 
238  switch( aItem->Type() )
239  {
240  case SCH_PIN_T:
241  {
242  auto power_object = static_cast<SCH_PIN*>( aItem );
243  name = power_object->GetDefaultNetName( m_sheet );
244  break;
245  }
246 
247  case SCH_LABEL_T:
248  case SCH_GLOBAL_LABEL_T:
249  case SCH_HIER_LABEL_T:
250  case SCH_SHEET_PIN_T:
251  {
252  name = static_cast<SCH_TEXT*>( aItem )->GetText();
253  break;
254  }
255 
256  default:
257  break;
258  }
259 
260  return name;
261 }
SCH_SHEET_PATH m_sheet
const char * name
Definition: DXF_plotter.cpp:61
KICAD_T Type() const
Function Type()
Definition: base_struct.h:210

References m_sheet, name, SCH_GLOBAL_LABEL_T, SCH_HIER_LABEL_T, SCH_LABEL_T, SCH_PIN_T, SCH_SHEET_PIN_T, and EDA_ITEM::Type().

Referenced by ResolveDrivers().

◆ GetNetName()

wxString CONNECTION_SUBGRAPH::GetNetName ( ) const

Returns the fully-qualified net name for this subgraph (if one exists)

Definition at line 191 of file connection_graph.cpp.

192 {
193  if( !m_driver || m_dirty )
194  return "";
195 
196  if( !m_driver->Connection( m_sheet ) )
197  {
198  #ifdef CONNECTIVITY_DEBUG
199  wxASSERT_MSG( false, "Tried to get the net name of an item with no connection" );
200  #endif
201 
202  return "";
203  }
204 
205  return m_driver->Connection( m_sheet )->Name();
206 }
SCH_SHEET_PATH m_sheet
wxString Name(bool aIgnoreSheet=false) const
SCH_CONNECTION * Connection(const SCH_SHEET_PATH &aPath) const
Retrieves the connection associated with this object in the given sheet.
Definition: sch_item.cpp:128

References SCH_ITEM::Connection(), m_dirty, m_driver, m_sheet, and SCH_CONNECTION::Name().

◆ ResolveDrivers()

bool CONNECTION_SUBGRAPH::ResolveDrivers ( bool  aCreateMarkers = false)

Determines which potential driver should drive the subgraph.

If multiple possible drivers exist, picks one according to the priority. If multiple "winners" exist, returns false and sets m_driver to nullptr.

Parameters
aCreateMarkerscontrols whether ERC markers should be added for conflicts
Returns
true if m_driver was set, or false if a conflict occurred

Definition at line 45 of file connection_graph.cpp.

46 {
47  int highest_priority = -1;
48  std::vector<SCH_ITEM*> candidates;
49  std::vector<SCH_ITEM*> strong_drivers;
50 
51  m_driver = nullptr;
52 
53  // Hierarchical labels are lower priority than local labels here,
54  // because on the first pass we want local labels to drive subgraphs
55  // so that we can identify same-sheet neighbors and link them together.
56  // Hierarchical labels will end up overriding the final net name if
57  // a higher-level sheet has a different name during the hierarchical
58  // pass.
59 
60  for( auto item : m_drivers )
61  {
62  PRIORITY item_priority = GetDriverPriority( item );
63 
64  if( item_priority == PRIORITY_PIN &&
65  !static_cast<SCH_PIN*>( item )->GetParentComponent()->IsInNetlist() )
66  continue;
67 
68  if( item_priority >= PRIORITY_HIER_LABEL )
69  strong_drivers.push_back( item );
70 
71  if( item_priority > highest_priority )
72  {
73  candidates.clear();
74  candidates.push_back( item );
75  highest_priority = item_priority;
76  }
77  else if( !candidates.empty() && ( item_priority == highest_priority ) )
78  {
79  candidates.push_back( item );
80  }
81  }
82 
83  if( highest_priority >= PRIORITY_HIER_LABEL )
84  m_strong_driver = true;
85 
86  // Power pins are 5, global labels are 6
87  m_local_driver = ( highest_priority < PRIORITY_POWER_PIN );
88 
89  if( !candidates.empty() )
90  {
91  if( candidates.size() > 1 )
92  {
93  if( highest_priority == PRIORITY_SHEET_PIN )
94  {
95  // We have multiple options, and they are all hierarchical
96  // sheet pins. Let's prefer outputs over inputs.
97 
98  for( auto c : candidates )
99  {
100  auto p = static_cast<SCH_SHEET_PIN*>( c );
101 
102  if( p->GetShape() == NET_OUTPUT )
103  {
104  m_driver = c;
105  break;
106  }
107  }
108  }
109  else
110  {
111  // For all other driver types, sort by name
112  std::sort( candidates.begin(), candidates.end(),
113  [&] ( SCH_ITEM* a, SCH_ITEM* b) -> bool
114  {
115  return GetNameForDriver( a ) < GetNameForDriver( b );
116  } );
117  }
118  }
119 
120  if( !m_driver )
121  m_driver = candidates[0];
122  }
123 
124  if( strong_drivers.size() > 1 )
125  m_multiple_drivers = true;
126 
127  // Drop weak drivers
128  if( m_strong_driver )
129  m_drivers = strong_drivers;
130 
131  // Cache driver connection
132  if( m_driver )
134  else
135  m_driver_connection = nullptr;
136 
137  if( aCreateMarkers && m_multiple_drivers )
138  {
139  // First check if all the candidates are actually the same
140  bool same = true;
141  wxString first = GetNameForDriver( candidates[0] );
142  SCH_ITEM* second_item = nullptr;
143 
144  for( unsigned i = 1; i < candidates.size(); i++ )
145  {
146  if( GetNameForDriver( candidates[i] ) != first )
147  {
148  second_item = candidates[i];
149  same = false;
150  break;
151  }
152  }
153 
154  if( !same )
155  {
156  wxString msg;
157  msg.Printf( _( "%s and %s are both attached to the same wires. "
158  "%s was picked as the label to use for netlisting." ),
159  candidates[0]->GetSelectMenuText( m_frame->GetUserUnits() ),
160  second_item->GetSelectMenuText( m_frame->GetUserUnits() ),
161  candidates[0]->Connection( m_sheet )->Name() );
162 
163  wxASSERT( candidates[0] != second_item );
164 
165  auto p0 = ( candidates[0]->Type() == SCH_PIN_T ) ?
166  static_cast<SCH_PIN*>( candidates[0] )->GetTransformedPosition() :
167  candidates[0]->GetPosition();
168 
169  auto p1 = ( second_item->Type() == SCH_PIN_T ) ?
170  static_cast<SCH_PIN*>( second_item )->GetTransformedPosition() :
171  second_item->GetPosition();
172 
173  auto marker = new SCH_MARKER();
174  marker->SetTimeStamp( GetNewTimeStamp() );
175  marker->SetMarkerType( MARKER_BASE::MARKER_ERC );
176  marker->SetErrorLevel( MARKER_BASE::MARKER_SEVERITY_WARNING );
177  marker->SetData( ERCE_DRIVER_CONFLICT, p0, msg, p1 );
178 
179  m_sheet.LastScreen()->Append( marker );
180 
181  // If aCreateMarkers is true, then this is part of ERC check, so we
182  // should return false even if the driver was assigned
183  return false;
184  }
185  }
186 
187  return aCreateMarkers || ( m_driver != nullptr );
188 }
SCH_SHEET_PATH m_sheet
SCH_CONNECTION * m_driver_connection
Cache for driver connection.
SCH_EDIT_FRAME * m_frame
static PRIORITY GetDriverPriority(SCH_ITEM *aDriver)
Returns the priority (higher is more important) of a candidate driver.
bool m_local_driver
True if the driver is a local (i.e. non-global) type.
bool m_multiple_drivers
True if this subgraph contains more than one driver that should be shorted together in the netlist.
timestamp_t GetNewTimeStamp()
Definition: common.cpp:217
virtual wxPoint GetPosition() const =0
Function GetPosition.
bool m_strong_driver
True if the driver is "strong": a label or power object.
std::vector< SCH_ITEM * > m_drivers
#define _(s)
SCH_CONNECTION * Connection(const SCH_SHEET_PATH &aPath) const
Retrieves the connection associated with this object in the given sheet.
Definition: sch_item.cpp:128
EDA_UNITS_T GetUserUnits() const
Return the user units currently in use.
void Append(SCH_ITEM *aItem)
Definition: sch_screen.h:149
size_t i
Definition: json11.cpp:597
virtual wxString GetSelectMenuText(EDA_UNITS_T aUnits) const
Function GetSelectMenuText returns the text to display to be used in the selection clarification cont...
Class SCH_ITEM is a base class for any item which can be embedded within the SCHEMATIC container clas...
Definition: sch_item.h:114
SCH_SCREEN * LastScreen() const
Function LastScreen.
wxString GetNameForDriver(SCH_ITEM *aItem) const
Returns the candidate net name for a driver.
KICAD_T Type() const
Function Type()
Definition: base_struct.h:210

References _, SCH_SCREEN::Append(), SCH_ITEM::Connection(), ERCE_DRIVER_CONFLICT, GetDriverPriority(), GetNameForDriver(), GetNewTimeStamp(), SCH_ITEM::GetPosition(), EDA_ITEM::GetSelectMenuText(), EDA_BASE_FRAME::GetUserUnits(), i, SCH_SHEET_PATH::LastScreen(), m_driver, m_driver_connection, m_drivers, m_frame, m_local_driver, m_multiple_drivers, m_sheet, m_strong_driver, MARKER_BASE::MARKER_ERC, MARKER_BASE::MARKER_SEVERITY_WARNING, NET_OUTPUT, PRIORITY_HIER_LABEL, PRIORITY_PIN, PRIORITY_POWER_PIN, PRIORITY_SHEET_PIN, SCH_PIN_T, and EDA_ITEM::Type().

Referenced by CONNECTION_GRAPH::buildConnectionGraph().

◆ UpdateItemConnections()

void CONNECTION_SUBGRAPH::UpdateItemConnections ( )

Updates all items to match the driver connection.

Definition at line 299 of file connection_graph.cpp.

300 {
301  if( !m_driver_connection )
302  return;
303 
304  for( auto item : m_items )
305  {
306  auto item_conn = item->Connection( m_sheet );
307 
308  if( !item_conn )
309  item_conn = item->InitializeConnection( m_sheet );
310 
311  if( ( m_driver_connection->IsBus() && item_conn->IsNet() ) ||
312  ( m_driver_connection->IsNet() && item_conn->IsBus() ) )
313  {
314  continue;
315  }
316 
317  if( item != m_driver )
318  {
319  item_conn->Clone( *m_driver_connection );
320  item_conn->ClearDirty();
321  }
322  }
323 }
SCH_SHEET_PATH m_sheet
SCH_CONNECTION * m_driver_connection
Cache for driver connection.
std::vector< SCH_ITEM * > m_items
bool IsNet() const
bool IsBus() const

References SCH_CONNECTION::IsBus(), SCH_CONNECTION::IsNet(), m_driver, m_driver_connection, m_items, and m_sheet.

Referenced by CONNECTION_GRAPH::propagateToNeighbors().

Member Data Documentation

◆ m_absorbed

bool CONNECTION_SUBGRAPH::m_absorbed

True if this subgraph has been absorbed into another. No pointers here are safe if so!

Definition at line 127 of file connection_graph.h.

Referenced by Absorb(), CONNECTION_GRAPH::buildConnectionGraph(), and CONNECTION_GRAPH::propagateToNeighbors().

◆ m_absorbed_by

CONNECTION_SUBGRAPH* CONNECTION_SUBGRAPH::m_absorbed_by

If this subgraph is absorbed, points to the absorbing (and valid) subgraph.

Definition at line 130 of file connection_graph.h.

Referenced by Absorb(), CONNECTION_GRAPH::buildConnectionGraph(), and CONNECTION_GRAPH::propagateToNeighbors().

◆ m_bus_entry

SCH_ITEM* CONNECTION_SUBGRAPH::m_bus_entry

Bus entry in graph, if any.

Definition at line 151 of file connection_graph.h.

◆ m_bus_neighbors

std::unordered_map< std::shared_ptr<SCH_CONNECTION>, std::unordered_set<CONNECTION_SUBGRAPH*> > CONNECTION_SUBGRAPH::m_bus_neighbors

If a subgraph is a bus, this map contains links between the bus members and any local sheet neighbors with the same connection name.

For example, if this subgraph is a bus D[7..0], and on the same sheet there is a net with label D7, this map will contain an entry for the D7 bus member, and the vector will contain a pointer to the D7 net subgraph.

Definition at line 176 of file connection_graph.h.

Referenced by Absorb().

◆ m_bus_parents

std::unordered_map< std::shared_ptr<SCH_CONNECTION>, std::unordered_set<CONNECTION_SUBGRAPH*> > CONNECTION_SUBGRAPH::m_bus_parents

If this is a net, this vector contains links to any same-sheet buses that contain it.

The string key is the name of the connection that forms the link (which isn't necessarily the same as the name of the connection driving this subgraph)

Definition at line 184 of file connection_graph.h.

Referenced by Absorb().

◆ m_code

long CONNECTION_SUBGRAPH::m_code

◆ m_dirty

bool CONNECTION_SUBGRAPH::m_dirty

Definition at line 124 of file connection_graph.h.

Referenced by Absorb(), GetNetName(), and CONNECTION_GRAPH::propagateToNeighbors().

◆ m_driver

SCH_ITEM* CONNECTION_SUBGRAPH::m_driver

◆ m_driver_connection

◆ m_drivers

std::vector<SCH_ITEM*> CONNECTION_SUBGRAPH::m_drivers

Definition at line 155 of file connection_graph.h.

Referenced by AddItem(), GetBusLabels(), and ResolveDrivers().

◆ m_frame

SCH_EDIT_FRAME* CONNECTION_SUBGRAPH::m_frame

Definition at line 162 of file connection_graph.h.

Referenced by ResolveDrivers().

◆ m_hier_pins

std::vector<SCH_SHEET_PIN*> CONNECTION_SUBGRAPH::m_hier_pins

Definition at line 187 of file connection_graph.h.

Referenced by AddItem(), and CONNECTION_GRAPH::propagateToNeighbors().

◆ m_hier_ports

std::vector<SCH_HIERLABEL*> CONNECTION_SUBGRAPH::m_hier_ports

Definition at line 190 of file connection_graph.h.

Referenced by AddItem(), and CONNECTION_GRAPH::propagateToNeighbors().

◆ m_items

◆ m_local_driver

bool CONNECTION_SUBGRAPH::m_local_driver

True if the driver is a local (i.e. non-global) type.

Definition at line 145 of file connection_graph.h.

Referenced by ResolveDrivers().

◆ m_multiple_drivers

bool CONNECTION_SUBGRAPH::m_multiple_drivers

True if this subgraph contains more than one driver that should be shorted together in the netlist.

For example, two labels or two power ports.

Definition at line 139 of file connection_graph.h.

Referenced by ResolveDrivers().

◆ m_no_connect

SCH_ITEM* CONNECTION_SUBGRAPH::m_no_connect

No-connect item in graph, if any.

Definition at line 148 of file connection_graph.h.

Referenced by CONNECTION_GRAPH::ercCheckLabels(), and CONNECTION_GRAPH::ercCheckNoConnects().

◆ m_sheet

◆ m_strong_driver

bool CONNECTION_SUBGRAPH::m_strong_driver

True if the driver is "strong": a label or power object.

Definition at line 142 of file connection_graph.h.

Referenced by ResolveDrivers().


The documentation for this class was generated from the following files: