Commit 630a3fb1 authored by Maciej Suminski's avatar Maciej Suminski

Safer RN_NET::GetNodes()

parent 7f3bf1be
...@@ -548,15 +548,17 @@ const RN_NODE_PTR RN_NET::GetClosestNode( const RN_NODE_PTR& aNode ) const ...@@ -548,15 +548,17 @@ const RN_NODE_PTR RN_NET::GetClosestNode( const RN_NODE_PTR& aNode ) const
for( it = nodes.begin(), itEnd = nodes.end(); it != itEnd; ++it ) for( it = nodes.begin(), itEnd = nodes.end(); it != itEnd; ++it )
{ {
RN_NODE_PTR node = *it;
// Obviously the distance between node and itself is the shortest, // Obviously the distance between node and itself is the shortest,
// that's why we have to skip it // that's why we have to skip it
if( *it != aNode ) if( node != aNode )
{ {
unsigned int distance = getDistance( *it, aNode ); unsigned int distance = getDistance( node, aNode );
if( distance < minDistance ) if( distance < minDistance )
{ {
minDistance = distance; minDistance = distance;
closest = *it; closest = node;
} }
} }
} }
...@@ -650,34 +652,41 @@ std::list<RN_NODE_PTR> RN_NET::GetNodes( const BOARD_CONNECTED_ITEM* aItem ) con ...@@ -650,34 +652,41 @@ std::list<RN_NODE_PTR> RN_NET::GetNodes( const BOARD_CONNECTED_ITEM* aItem ) con
{ {
std::list<RN_NODE_PTR> nodes; std::list<RN_NODE_PTR> nodes;
switch( aItem->Type() ) try
{
case PCB_PAD_T:
{
const D_PAD* pad = static_cast<const D_PAD*>( aItem );
nodes.push_back( m_pads.at( pad ) );
}
break;
case PCB_VIA_T:
{ {
const SEGVIA* via = static_cast<const SEGVIA*>( aItem ); switch( aItem->Type() )
nodes.push_back( m_vias.at( via ) ); {
} case PCB_PAD_T:
break; {
const D_PAD* pad = static_cast<const D_PAD*>( aItem );
nodes.push_back( m_pads.at( pad ) );
}
break;
case PCB_TRACE_T: case PCB_VIA_T:
{ {
const TRACK* track = static_cast<const TRACK*>( aItem ); const SEGVIA* via = static_cast<const SEGVIA*>( aItem );
RN_EDGE_PTR edge = m_tracks.at( track ); nodes.push_back( m_vias.at( via ) );
}
break;
nodes.push_back( edge->getSourceNode() ); case PCB_TRACE_T:
nodes.push_back( edge->getTargetNode() ); {
} const TRACK* track = static_cast<const TRACK*>( aItem );
break; RN_EDGE_PTR edge = m_tracks.at( track );
default: nodes.push_back( edge->getSourceNode() );
nodes.push_back( edge->getTargetNode() );
}
break; break;
default:
break;
}
}
catch ( ... )
{
return nodes;
} }
return nodes; return nodes;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment