Use proper refdes sorting for component ordering in netlists

This commit is contained in:
Jon Evans 2020-05-23 18:39:55 -04:00
parent cc47082566
commit 1c2ef8678c
1 changed files with 13 additions and 10 deletions

View File

@ -204,9 +204,13 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents()
for( unsigned i = 0; i < sheetList.size(); i++ )
{
SCH_SHEET_PATH sheet = sheetList[i];
auto cmp = []( const SCH_COMPONENT* a, const SCH_COMPONENT* b ) {
return a->GetField( REFERENCE )->GetText() < b->GetField( REFERENCE )->GetText();
auto cmp =
[sheet]( SCH_COMPONENT* a, SCH_COMPONENT* b )
{
return ( UTIL::RefDesStringCompare( a->GetRef( &sheet ),
b->GetRef( &sheet ) ) < 0 );
};
std::set<SCH_COMPONENT*, decltype( cmp )> ordered_components( cmp );
@ -226,10 +230,9 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents()
}
}
for( auto item : ordered_components )
{
SCH_COMPONENT* comp = findNextComponent( item, &sheetList[i] );
SCH_COMPONENT* comp = findNextComponent( item, &sheet );
if( !comp )
continue;
@ -242,7 +245,7 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents()
// an element.
xcomps->AddChild( xcomp = node( "comp" ) );
xcomp->AddAttribute( "ref", comp->GetRef( &sheetList[i] ) );
xcomp->AddAttribute( "ref", comp->GetRef( &sheet ) );
addComponentFields( xcomp, comp, &sheetList[i] );
@ -263,8 +266,8 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents()
XNODE* xsheetpath;
xcomp->AddChild( xsheetpath = node( "sheetpath" ) );
xsheetpath->AddAttribute( "names", sheetList[i].PathHumanReadable() );
xsheetpath->AddAttribute( "tstamps", sheetList[i].PathAsString() );
xsheetpath->AddAttribute( "names", sheet.PathHumanReadable() );
xsheetpath->AddAttribute( "tstamps", sheet.PathAsString() );
xcomp->AddChild( node( "tstamp", comp->m_Uuid.AsString() ) );
}
}