Browse Source

Cache for netclass pattern assignments.

newinvert
Jeff Young 3 years ago
parent
commit
9b9efb9002
  1. 2
      common/dialogs/dialog_assign_netclass.cpp
  2. 2
      common/dialogs/panel_setup_netclasses.cpp
  3. 8
      common/project/net_settings.cpp
  4. 1
      include/project/net_settings.h
  5. 1
      pcbnew/board.cpp

2
common/dialogs/dialog_assign_netclass.cpp

@ -86,6 +86,8 @@ bool DIALOG_ASSIGN_NETCLASS::TransferDataFromWindow()
m_netclassCtrl->GetStringSelection()
} );
netSettings->m_NetClassPatternAssignmentCache.clear();
return true;
}

2
common/dialogs/panel_setup_netclasses.cpp

@ -411,6 +411,8 @@ bool PANEL_SETUP_NETCLASSES::TransferDataFromWindow()
std::make_unique<EDA_COMBINED_MATCHER>( pattern, CTX_NETCLASS ),
netclass
} );
m_netSettings->m_NetClassPatternAssignmentCache.clear();
}
return true;

8
common/project/net_settings.cpp

@ -391,13 +391,21 @@ std::shared_ptr<NETCLASS> NET_SETTINGS::GetEffectiveNetClass( const wxString& aN
if( it != m_NetClassLabelAssignments.end() )
return getNetclass( it->second );
auto it2 = m_NetClassPatternAssignmentCache.find( aNetName );
if( it2 != m_NetClassPatternAssignmentCache.end() )
return getNetclass( it2->second );
for( const auto& [ matcher, netclassName ] : m_NetClassPatternAssignments )
{
int matches;
int offset;
if( matcher->Find( aNetName, matches, offset ) && offset == 0 )
{
m_NetClassPatternAssignmentCache[ aNetName ] = netclassName;
return getNetclass( netclassName );
}
}
return m_DefaultNetClass;

1
include/project/net_settings.h

@ -43,6 +43,7 @@ public:
std::vector<std::pair<std::unique_ptr<EDA_COMBINED_MATCHER>, wxString>>
m_NetClassPatternAssignments;
mutable std::map<wxString, wxString> m_NetClassPatternAssignmentCache;
std::map<wxString, wxString> m_NetClassLabelAssignments;

1
pcbnew/board.cpp

@ -203,6 +203,7 @@ void BOARD::SetProject( PROJECT* aProject, bool aReferenceOnly )
projectSettings->m_NetClasses = legacySettings->m_NetClasses;
projectSettings->m_NetClassPatternAssignments =
std::move( legacySettings->m_NetClassPatternAssignments );
projectSettings->m_NetClassPatternAssignmentCache.clear();
}
// Now update the DesignSettings' netclass pointer to point into the project.

Loading…
Cancel
Save