KiCad PCB EDA Suite
Loading...
Searching...
No Matches
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 class  PRIORITY {
  INVALID = -1 , NONE = 0 , PIN , SHEET_PIN ,
  HIER_LABEL , LOCAL_LABEL , POWER_PIN , GLOBAL
}
 

Public Member Functions

 CONNECTION_SUBGRAPH (CONNECTION_GRAPH *aGraph)
 
 ~CONNECTION_SUBGRAPH ()
 
bool ResolveDrivers (bool aCheckMultipleDrivers=false)
 Determine which potential driver should drive the subgraph.
 
wxString GetNetName () const
 Return the fully-qualified net name for this subgraph (if one exists)
 
std::vector< SCH_ITEM * > GetVectorBusLabels () const
 Return all the vector-based bus labels attached to this subgraph (if any).
 
std::vector< SCH_ITEM * > GetAllBusLabels () const
 Return all the all bus labels attached to this subgraph (if any).
 
const wxString & GetNameForDriver (SCH_ITEM *aItem) const
 Return the candidate net name for a driver.
 
const std::vector< std::pair< wxString, SCH_ITEM * > > GetNetclassesForDriver (SCH_ITEM *aItem) const
 Return the resolved netclasses for the item, and the source item providing the netclass.
 
void Absorb (CONNECTION_SUBGRAPH *aOther)
 Combine another subgraph on the same sheet into this one.
 
void AddItem (SCH_ITEM *aItem)
 Add a new item to the subgraph.
 
void UpdateItemConnections ()
 Update all items to match the driver connection.
 
const std::set< SCH_ITEM * > & GetItems () const
 Provide a read-only reference to the items in the subgraph.
 
void getAllConnectedItems (std::set< std::pair< SCH_SHEET_PATH, SCH_ITEM * > > &aItems, std::set< CONNECTION_SUBGRAPH * > &aSubgraphs)
 Find all items in the subgraph as well as child subgraphs recursively.
 
PRIORITY GetDriverPriority ()
 
const SCH_ITEMGetDriver () const
 
const SCH_CONNECTIONGetDriverConnection () const
 
const SCH_ITEMGetNoConnect () const
 
const SCH_SHEET_PATHGetSheet () const
 
void RemoveItem (SCH_ITEM *aItem)
 
void ExchangeItem (SCH_ITEM *aOldItem, SCH_ITEM *aNewItem)
 Replaces all references to #aOldItem with #aNewItem in the subgraph.
 
void StoreImplicitConnection (SCH_CONNECTION *aConnection)
 

Static Public Member Functions

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

Private Member Functions

wxString driverName (SCH_ITEM *aItem) const
 

Private Attributes

CONNECTION_GRAPHm_graph
 
bool m_dirty
 
bool m_absorbed
 True if this subgraph has been absorbed into another. No pointers here are safe if so!
 
bool m_is_bus_member
 True if the subgraph is not actually part of a net.
 
CONNECTION_SUBGRAPHm_absorbed_by
 If this subgraph is absorbed, points to the absorbing (and valid) subgraph.
 
std::set< CONNECTION_SUBGRAPH * > m_absorbed_subgraphs
 Set of subgraphs that have been absorbed by this subgraph.
 
long m_code
 
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.
 
bool m_local_driver
 True if the driver is a local (i.e. non-global) type.
 
SCH_ITEMm_bus_entry
 Bus entry in graph, if any.
 
std::set< SCH_ITEM * > m_drivers
 
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.
 
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.
 
std::set< SCH_SHEET_PIN * > m_hier_pins
 Cache for lookup of any hierarchical (sheet) pins on this subgraph (for referring down).
 
std::set< SCH_HIERLABEL * > m_hier_ports
 Cache for lookup of any hierarchical ports on this subgraph (for referring up).
 
CONNECTION_SUBGRAPHm_hier_parent
 If not null, this indicates the subgraph on a higher level sheet that is linked to this one.
 
std::unordered_set< CONNECTION_SUBGRAPH * > m_hier_children
 If not null, this indicates the subgraph(s) on a lower level sheet that are linked to this one.
 
std::unordered_map< SCH_ITEM *, wxString > m_driver_name_cache
 A cache of escaped netnames from schematic items.
 
SCH_ITEMm_driver
 Fully-resolved driver for the subgraph (might not exist in this subgraph).
 
std::set< SCH_ITEM * > m_items
 Contents of the subgraph.
 
SCH_ITEMm_no_connect
 No-connect item in graph, if any.
 
SCH_SHEET_PATH m_sheet
 On which logical sheet is the subgraph contained.
 
SCH_CONNECTIONm_driver_connection
 Cache for driver connection.
 
std::set< SCH_CONNECTION * > m_bus_element_connections
 A cache of connections that are part of this subgraph but that don't have an owning element (i.e.
 
std::mutex m_driver_mutex
 

Friends

class CONNECTION_GRAPH
 

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 62 of file connection_graph.h.

Member Enumeration Documentation

◆ PRIORITY

enum class CONNECTION_SUBGRAPH::PRIORITY
strong
Enumerator
INVALID 
NONE 
PIN 
SHEET_PIN 
HIER_LABEL 
LOCAL_LABEL 
POWER_PIN 
GLOBAL 

Definition at line 65 of file connection_graph.h.

Constructor & Destructor Documentation

◆ CONNECTION_SUBGRAPH()

CONNECTION_SUBGRAPH::CONNECTION_SUBGRAPH ( CONNECTION_GRAPH aGraph)
inlineexplicit

Definition at line 77 of file connection_graph.h.

◆ ~CONNECTION_SUBGRAPH()

CONNECTION_SUBGRAPH::~CONNECTION_SUBGRAPH ( )
inline

Definition at line 94 of file connection_graph.h.

References m_bus_element_connections.

Member Function Documentation

◆ Absorb()

void CONNECTION_SUBGRAPH::Absorb ( CONNECTION_SUBGRAPH aOther)

◆ AddItem()

◆ driverName()

◆ ExchangeItem()

void CONNECTION_SUBGRAPH::ExchangeItem ( SCH_ITEM aOldItem,
SCH_ITEM aNewItem 
)

◆ GetAllBusLabels()

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

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

Definition at line 320 of file connection_graph.cpp.

References m_drivers, m_sheet, SCH_GLOBAL_LABEL_T, and SCH_LABEL_T.

◆ getAllConnectedItems()

void CONNECTION_SUBGRAPH::getAllConnectedItems ( std::set< std::pair< SCH_SHEET_PATH, SCH_ITEM * > > &  aItems,
std::set< CONNECTION_SUBGRAPH * > &  aSubgraphs 
)

Find all items in the subgraph as well as child subgraphs recursively.

Definition at line 275 of file connection_graph.cpp.

References getAllConnectedItems(), m_absorbed_by, m_absorbed_subgraphs, m_graph, m_hier_children, m_items, and m_sheet.

Referenced by getAllConnectedItems().

◆ GetDriver()

const SCH_ITEM * CONNECTION_SUBGRAPH::GetDriver ( ) const
inline
Returns
pointer to the SCH_ITEM whose name sets the subgraph netname. N.B. This item may not be in the subgraph.

Definition at line 179 of file connection_graph.h.

References m_driver.

Referenced by DIALOG_MIGRATE_BUSES::onItemSelected().

◆ GetDriverConnection()

const SCH_CONNECTION * CONNECTION_SUBGRAPH::GetDriverConnection ( ) const
inline
Returns
SCH_CONNECTION object for m_driver on m_sheet.

Definition at line 187 of file connection_graph.h.

References m_driver_connection.

Referenced by SCHEMATIC::GetNetClassAssignmentCandidates().

◆ GetDriverPriority() [1/2]

◆ GetDriverPriority() [2/2]

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

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

0: Invalid driver 1: Symbol 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 561 of file connection_graph.cpp.

References SYMBOL::GetExcludedFromBoard(), SCH_SYMBOL::GetLibSymbolRef(), SCH_ITEM::GetParentSymbol(), GLOBAL, HIER_LABEL, SCH_PIN::IsGlobalPower(), LOCAL_LABEL, NONE, PIN, POWER_PIN, SCH_GLOBAL_LABEL_T, SCH_HIER_LABEL_T, SCH_LABEL_T, SCH_PIN_T, SCH_SHEET_PIN_T, SHEET_PIN, and EDA_ITEM::Type().

Referenced by CONNECTION_GRAPH::ercCheckNoConnects(), and SCHEMATIC::GetNetClassAssignmentCandidates().

◆ GetItems()

const std::set< SCH_ITEM * > & CONNECTION_SUBGRAPH::GetItems ( ) const
inline

◆ GetNameForDriver()

◆ GetNetclassesForDriver()

const std::vector< std::pair< wxString, SCH_ITEM * > > CONNECTION_SUBGRAPH::GetNetclassesForDriver ( SCH_ITEM aItem) const

Return the resolved netclasses for the item, and the source item providing the netclass.

Parameters
aItemthe item to query for netclass assignments

Definition at line 435 of file connection_graph.cpp.

References SCH_ITEM::GetRuleAreaCache(), SCH_ITEM::RunOnChildren(), SCH_FIELD_T, and EDA_ITEM::Type().

◆ GetNetName()

wxString CONNECTION_SUBGRAPH::GetNetName ( ) const

◆ GetNoConnect()

const SCH_ITEM * CONNECTION_SUBGRAPH::GetNoConnect ( ) const
inline
Returns
pointer to the item causing a no-connect or nullptr if none.

Definition at line 195 of file connection_graph.h.

References m_no_connect.

Referenced by NETLIST_EXPORTER_BASE::CreatePinList(), NETLIST_EXPORTER_BASE::findAllUnitsOfSymbol(), and ERC_TESTER::TestPinToPin().

◆ GetSheet()

◆ GetVectorBusLabels()

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

Return all the vector-based bus labels attached to this subgraph (if any).

Definition at line 349 of file connection_graph.cpp.

References m_drivers, m_sheet, SCH_GLOBAL_LABEL_T, SCH_LABEL_T, and SCH_CONNECTION::Type().

◆ RemoveItem()

void CONNECTION_SUBGRAPH::RemoveItem ( SCH_ITEM aItem)

◆ ResolveDrivers()

bool CONNECTION_SUBGRAPH::ResolveDrivers ( bool  aCheckMultipleDrivers = false)

Determine 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
aCheckMultipleDriverscontrols whether the second driver should be captured for ERC.
Returns
true if m_driver was set, or false if a conflict occurred.

Definition at line 130 of file connection_graph.cpp.

References SCH_CONNECTION::ClearDirty(), SCH_CONNECTION::ConfigureFromLabel(), SCH_ITEM::Connection(), GetDriverPriority(), SCH_PIN::GetLibPin(), GetNameForDriver(), SCH_ITEM::GetParentSymbol(), SCH_LABEL_BASE::GetShape(), HIER_LABEL, INVALID, SCH_CONNECTION::IsBus(), SCH_SYMBOL::IsInNetlist(), SYMBOL::IsPower(), SCH_CONNECTION::IsSubsetOf(), m_driver, m_driver_connection, m_driver_mutex, m_drivers, m_is_bus_member, m_local_driver, m_multiple_drivers, m_sheet, m_strong_driver, PIN, pin, POWER_PIN, SCH_PIN_T, SCH_CONNECTION::SetDriver(), SHEET_PIN, and EDA_ITEM::Type().

Referenced by CONNECTION_GRAPH::ExtractAffectedItems(), and CONNECTION_GRAPH::generateGlobalPowerPinSubGraphs().

◆ StoreImplicitConnection()

void CONNECTION_SUBGRAPH::StoreImplicitConnection ( SCH_CONNECTION aConnection)
inline

Definition at line 214 of file connection_graph.h.

References m_bus_element_connections.

◆ UpdateItemConnections()

void CONNECTION_SUBGRAPH::UpdateItemConnections ( )

Update all items to match the driver connection.

Definition at line 534 of file connection_graph.cpp.

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

Friends And Related Function Documentation

◆ CONNECTION_GRAPH

friend class CONNECTION_GRAPH
friend

Definition at line 100 of file connection_graph.h.

Member Data Documentation

◆ m_absorbed

bool CONNECTION_SUBGRAPH::m_absorbed
private

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

Definition at line 227 of file connection_graph.h.

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

◆ m_absorbed_by

CONNECTION_SUBGRAPH* CONNECTION_SUBGRAPH::m_absorbed_by
private

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

Definition at line 236 of file connection_graph.h.

Referenced by CONNECTION_GRAPH::buildConnectionGraph(), getAllConnectedItems(), CONNECTION_GRAPH::GetSubgraphForItem(), CONNECTION_GRAPH::propagateToNeighbors(), and CONNECTION_GRAPH::RemoveItem().

◆ m_absorbed_subgraphs

std::set<CONNECTION_SUBGRAPH*> CONNECTION_SUBGRAPH::m_absorbed_subgraphs
private

Set of subgraphs that have been absorbed by this subgraph.

Definition at line 239 of file connection_graph.h.

Referenced by Absorb(), and getAllConnectedItems().

◆ m_bus_element_connections

std::set<SCH_CONNECTION*> CONNECTION_SUBGRAPH::m_bus_element_connections
private

A cache of connections that are part of this subgraph but that don't have an owning element (i.e.

bus members)

Definition at line 313 of file connection_graph.h.

Referenced by StoreImplicitConnection(), and ~CONNECTION_SUBGRAPH().

◆ m_bus_entry

SCH_ITEM* CONNECTION_SUBGRAPH::m_bus_entry
private

Bus entry in graph, if any.

Definition at line 257 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
private

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 set will contain a pointer to the D7 net subgraph.

Definition at line 270 of file connection_graph.h.

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

◆ m_bus_parents

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

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 278 of file connection_graph.h.

Referenced by Absorb(), CONNECTION_GRAPH::ercCheckLabels(), CONNECTION_GRAPH::processSubGraphs(), and CONNECTION_GRAPH::removeSubgraphs().

◆ m_code

◆ m_dirty

◆ m_driver

◆ m_driver_connection

◆ m_driver_mutex

std::mutex CONNECTION_SUBGRAPH::m_driver_mutex
private

Definition at line 315 of file connection_graph.h.

Referenced by ResolveDrivers().

◆ m_driver_name_cache

std::unordered_map<SCH_ITEM*, wxString> CONNECTION_SUBGRAPH::m_driver_name_cache
mutableprivate

A cache of escaped netnames from schematic items.

Definition at line 294 of file connection_graph.h.

Referenced by GetNameForDriver().

◆ m_drivers

◆ m_graph

◆ m_hier_children

std::unordered_set<CONNECTION_SUBGRAPH*> CONNECTION_SUBGRAPH::m_hier_children
private

If not null, this indicates the subgraph(s) on a lower level sheet that are linked to this one.

Definition at line 291 of file connection_graph.h.

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

◆ m_hier_parent

CONNECTION_SUBGRAPH* CONNECTION_SUBGRAPH::m_hier_parent
private

If not null, this indicates the subgraph on a higher level sheet that is linked to this one.

Definition at line 287 of file connection_graph.h.

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

◆ m_hier_pins

std::set<SCH_SHEET_PIN*> CONNECTION_SUBGRAPH::m_hier_pins
private

Cache for lookup of any hierarchical (sheet) pins on this subgraph (for referring down).

Definition at line 281 of file connection_graph.h.

Referenced by AddItem(), CONNECTION_GRAPH::ercCheckNoConnects(), ExchangeItem(), CONNECTION_GRAPH::propagateToNeighbors(), and RemoveItem().

◆ m_hier_ports

std::set<SCH_HIERLABEL*> CONNECTION_SUBGRAPH::m_hier_ports
private

Cache for lookup of any hierarchical ports on this subgraph (for referring up).

Definition at line 284 of file connection_graph.h.

Referenced by AddItem(), CONNECTION_GRAPH::ercCheckNoConnects(), ExchangeItem(), CONNECTION_GRAPH::propagateToNeighbors(), and RemoveItem().

◆ m_is_bus_member

bool CONNECTION_SUBGRAPH::m_is_bus_member
private

True if the subgraph is not actually part of a net.

These are created for bus members to ensure that bus-to-bus connection happens but they don't have any valid data

Definition at line 233 of file connection_graph.h.

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

◆ m_items

◆ m_local_driver

bool CONNECTION_SUBGRAPH::m_local_driver
private

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

Definition at line 254 of file connection_graph.h.

Referenced by ResolveDrivers().

◆ m_multiple_drivers

bool CONNECTION_SUBGRAPH::m_multiple_drivers
private

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 248 of file connection_graph.h.

Referenced by Absorb(), CONNECTION_GRAPH::ercCheckMultipleDrivers(), CONNECTION_GRAPH::processSubGraphs(), CONNECTION_GRAPH::propagateToNeighbors(), and ResolveDrivers().

◆ m_no_connect

SCH_ITEM* CONNECTION_SUBGRAPH::m_no_connect
private

◆ m_sheet

◆ m_strong_driver

bool CONNECTION_SUBGRAPH::m_strong_driver
private

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

Definition at line 251 of file connection_graph.h.

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


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