Update DRC MatchDPSuffix routine

This matches the router matchDPSuffix routine until we merge the two
into a common utility
This commit is contained in:
Seth Hillbrand 2021-10-11 09:49:39 -07:00
parent 7aa3514042
commit fce054319c
1 changed files with 36 additions and 45 deletions

View File

@ -1261,55 +1261,46 @@ int DRC_ENGINE::MatchDpSuffix( const wxString& aNetName, wxString& aComplementNe
wxString& aBaseDpName ) wxString& aBaseDpName )
{ {
int rv = 0; int rv = 0;
int count = 0;
if( aNetName.EndsWith( "+" ) ) for( auto it = aNetName.rbegin(); it != aNetName.rend() && rv == 0; ++it, ++count )
{
int ch = *it;
if( ( ch >= '0' && ch <= '9' ) || ch == '_' )
{
continue;
}
else if( ch == '+' )
{ {
aComplementNet = "-"; aComplementNet = "-";
rv = 1; rv = 1;
} }
else if( aNetName.EndsWith( "P" ) ) else if( ch == '-' )
{
aComplementNet = "N";
rv = 1;
}
else if( aNetName.EndsWith( "-" ) )
{ {
aComplementNet = "+"; aComplementNet = "+";
rv = -1; rv = -1;
} }
else if( aNetName.EndsWith( "N" ) ) else if( ch == 'N' )
{ {
aComplementNet = "P"; aComplementNet = "P";
rv = -1; rv = -1;
} }
// Match P followed by 2 digits else if ( ch == 'P' )
else if( aNetName.Right( 2 ).IsNumber() && aNetName.Right( 3 ).Left( 1 ) == "P" )
{ {
aComplementNet = "N" + aNetName.Right( 2 ); aComplementNet = "N";
rv = 1; rv = 1;
} }
// Match P followed by 1 digit else
else if( aNetName.Right( 1 ).IsNumber() && aNetName.Right( 2 ).Left( 1 ) == "P" )
{ {
aComplementNet = "N" + aNetName.Right( 1 ); break;
rv = 1;
} }
// Match N followed by 2 digits
else if( aNetName.Right( 2 ).IsNumber() && aNetName.Right( 3 ).Left( 1 ) == "N" )
{
aComplementNet = "P" + aNetName.Right( 2 );
rv = -1;
} }
// Match N followed by 1 digit
else if( aNetName.Right( 1 ).IsNumber() && aNetName.Right( 2 ).Left( 1 ) == "N" ) if( rv != 0 && count >= 1 )
{ {
aComplementNet = "P" + aNetName.Right( 1 ); aBaseDpName = aNetName.Left( aNetName.Length() - count );
rv = -1; aComplementNet = aBaseDpName + aComplementNet + aNetName.Right( count - 1 );
}
if( rv != 0 )
{
aBaseDpName = aNetName.Left( aNetName.Length() - aComplementNet.Length() );
aComplementNet = aBaseDpName + aComplementNet;
} }
return rv; return rv;