Remove matching parents/neighbors in subgraphs
This ensures that when bus elements or labels matching bus elements are removed that the stale neighbor/parent references are similarly removed
This commit is contained in:
parent
53eb39e033
commit
4cdf75dc72
|
@ -711,6 +711,44 @@ void CONNECTION_GRAPH::removeSubgraphs( std::set<CONNECTION_SUBGRAPH*>& aSubgrap
|
|||
|
||||
for( CONNECTION_SUBGRAPH* sg : aSubgraphs )
|
||||
{
|
||||
for( auto it : sg->m_bus_neighbors )
|
||||
{
|
||||
for( CONNECTION_SUBGRAPH* neighbor : it.second )
|
||||
{
|
||||
auto& parents = neighbor->m_bus_parents[it.first];
|
||||
|
||||
for( auto test = parents.begin(); test != parents.end(); )
|
||||
{
|
||||
if( *test == sg )
|
||||
test = parents.erase( test );
|
||||
else
|
||||
++test;
|
||||
}
|
||||
|
||||
if( parents.empty() )
|
||||
neighbor->m_bus_parents.erase( it.first );
|
||||
}
|
||||
}
|
||||
|
||||
for( auto it : sg->m_bus_parents )
|
||||
{
|
||||
for( CONNECTION_SUBGRAPH* parent : it.second )
|
||||
{
|
||||
auto& neighbors = parent->m_bus_neighbors[it.first];
|
||||
|
||||
for( auto test = neighbors.begin(); test != neighbors.end(); )
|
||||
{
|
||||
if( *test == sg )
|
||||
test = neighbors.erase( test );
|
||||
else
|
||||
++test;
|
||||
}
|
||||
|
||||
if( neighbors.empty() )
|
||||
parent->m_bus_neighbors.erase( it.first );
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
auto it = std::lower_bound( m_driver_subgraphs.begin(), m_driver_subgraphs.end(), sg );
|
||||
|
||||
|
|
Loading…
Reference in New Issue