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

@ -192,7 +192,7 @@ void NETLIST_EXPORTER_GENERIC::addComponentFields( XNODE* xcomp, SCH_COMPONENT*
XNODE* NETLIST_EXPORTER_GENERIC::makeComponents() XNODE* NETLIST_EXPORTER_GENERIC::makeComponents()
{ {
XNODE* xcomps = node( "components" ); XNODE* xcomps = node( "components" );
m_ReferencesAlreadyFound.Clear(); m_ReferencesAlreadyFound.Clear();
m_LibParts.clear(); m_LibParts.clear();
@ -202,12 +202,16 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents()
// Output is xml, so there is no reason to remove spaces from the field values. // Output is xml, so there is no reason to remove spaces from the field values.
// And XML element names need not be translated to various languages. // And XML element names need not be translated to various languages.
for( unsigned i = 0; i < sheetList.size(); i++ ) for( unsigned i = 0; i < sheetList.size(); i++ )
{ {
SCH_SHEET_PATH sheet = sheetList[i];
auto cmp = []( const SCH_COMPONENT* a, const SCH_COMPONENT* b ) { auto cmp =
return a->GetField( REFERENCE )->GetText() < b->GetField( REFERENCE )->GetText(); [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 ); std::set<SCH_COMPONENT*, decltype( cmp )> ordered_components( cmp );
@ -226,10 +230,9 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents()
} }
} }
for( auto item : ordered_components ) for( auto item : ordered_components )
{ {
SCH_COMPONENT* comp = findNextComponent( item, &sheetList[i] ); SCH_COMPONENT* comp = findNextComponent( item, &sheet );
if( !comp ) if( !comp )
continue; continue;
@ -242,7 +245,7 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents()
// an element. // an element.
xcomps->AddChild( xcomp = node( "comp" ) ); xcomps->AddChild( xcomp = node( "comp" ) );
xcomp->AddAttribute( "ref", comp->GetRef( &sheetList[i] ) ); xcomp->AddAttribute( "ref", comp->GetRef( &sheet ) );
addComponentFields( xcomp, comp, &sheetList[i] ); addComponentFields( xcomp, comp, &sheetList[i] );
@ -263,8 +266,8 @@ XNODE* NETLIST_EXPORTER_GENERIC::makeComponents()
XNODE* xsheetpath; XNODE* xsheetpath;
xcomp->AddChild( xsheetpath = node( "sheetpath" ) ); xcomp->AddChild( xsheetpath = node( "sheetpath" ) );
xsheetpath->AddAttribute( "names", sheetList[i].PathHumanReadable() ); xsheetpath->AddAttribute( "names", sheet.PathHumanReadable() );
xsheetpath->AddAttribute( "tstamps", sheetList[i].PathAsString() ); xsheetpath->AddAttribute( "tstamps", sheet.PathAsString() );
xcomp->AddChild( node( "tstamp", comp->m_Uuid.AsString() ) ); xcomp->AddChild( node( "tstamp", comp->m_Uuid.AsString() ) );
} }
} }