Sim: Minor SIM_LIBRARY cleanup

This commit is contained in:
Mikolaj Wielgus 2022-10-06 14:08:01 +02:00
parent b95f4ec6bb
commit 6f2b2d7e19
4 changed files with 25 additions and 29 deletions

View File

@ -574,12 +574,9 @@ void DIALOG_SIM_MODEL<T>::loadLibrary( const wxString& aFilePath )
try try
{ {
for( unsigned i = 0; i < m_library->GetModels().size(); ++i ) for( auto& [baseModelName, baseModel] : m_library->GetModels() )
{ {
const SIM_MODEL& baseModel = m_library->GetModels().at( i );
wxString baseModelName = m_library->GetModelNames().at( i );
wxString expectedModelName; wxString expectedModelName;
expectedModelName = expectedModelName =
SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY_KIBIS::NAME_FIELD ); SIM_MODEL::GetFieldValue( &m_fields, SIM_LIBRARY_KIBIS::NAME_FIELD );
@ -604,8 +601,8 @@ void DIALOG_SIM_MODEL<T>::loadLibrary( const wxString& aFilePath )
} }
wxArrayString modelNames; wxArrayString modelNames;
for( const std::string& name : m_library->GetModelNames() ) for( auto& [modelName, model] : m_library->GetModels() )
modelNames.Add( name ); modelNames.Add( modelName );
auto validator = dynamic_cast<MODEL_NAME_VALIDATOR*>( m_modelNameCombobox->GetValidator() ); auto validator = dynamic_cast<MODEL_NAME_VALIDATOR*>( m_modelNameCombobox->GetValidator() );

View File

@ -50,11 +50,11 @@ void SIM_LIBRARY::ReadFile( const std::string& aFilePath )
SIM_MODEL* SIM_LIBRARY::FindModel( const std::string& aModelName ) const SIM_MODEL* SIM_LIBRARY::FindModel( const std::string& aModelName ) const
{ {
for( int i = 0; i < static_cast<int>( GetModelNames().size() ); ++i ) for( int i = 0; i < static_cast<int>( m_modelNames.size() ); ++i )
{ {
std::string curModelName = GetModelNames().at( i ); const std::string& modelName = m_modelNames.at( i );
if( curModelName == aModelName ) if( modelName == aModelName )
return m_models.at( i ).get(); return m_models.at( i ).get();
} }
@ -62,12 +62,12 @@ SIM_MODEL* SIM_LIBRARY::FindModel( const std::string& aModelName ) const
} }
std::vector<std::reference_wrapper<SIM_MODEL>> SIM_LIBRARY::GetModels() const std::vector<SIM_LIBRARY::MODEL> SIM_LIBRARY::GetModels() const
{ {
std::vector<std::reference_wrapper<SIM_MODEL>> ret; std::vector<MODEL> result;
for( const std::unique_ptr<SIM_MODEL>& model : m_models ) for( int i = 0; i < static_cast<int>( m_modelNames.size() ); ++i )
ret.emplace_back( *model ); result.push_back( { m_modelNames.at( i ), *m_models.at( i ) } );
return ret; return result;
} }

View File

@ -34,6 +34,12 @@ public:
static constexpr auto LIBRARY_FIELD = "Sim_Library"; static constexpr auto LIBRARY_FIELD = "Sim_Library";
static constexpr auto NAME_FIELD = "Sim_Name"; static constexpr auto NAME_FIELD = "Sim_Name";
struct MODEL
{
std::string name;
SIM_MODEL& model;
};
virtual ~SIM_LIBRARY() = default; virtual ~SIM_LIBRARY() = default;
SIM_LIBRARY() = default; SIM_LIBRARY() = default;
@ -65,8 +71,7 @@ public:
SIM_MODEL* FindModel( const std::string& aModelName ) const; SIM_MODEL* FindModel( const std::string& aModelName ) const;
std::vector<std::reference_wrapper<SIM_MODEL>> GetModels() const; std::vector<MODEL> GetModels() const;
const std::vector<std::string>& GetModelNames() const { return m_modelNames; }
std::string GetFilePath() const { return m_filePath; } std::string GetFilePath() const { return m_filePath; }
std::string GetError() const { return m_error; } std::string GetError() const { return m_error; }
@ -76,8 +81,8 @@ public:
virtual SIM_LIBRARY::LIBRARY_TYPE GetType() { return SIM_LIBRARY::LIBRARY_TYPE::NONE; }; virtual SIM_LIBRARY::LIBRARY_TYPE GetType() { return SIM_LIBRARY::LIBRARY_TYPE::NONE; };
protected: protected:
std::vector<std::string> m_modelNames;
std::vector<std::unique_ptr<SIM_MODEL>> m_models; std::vector<std::unique_ptr<SIM_MODEL>> m_models;
std::vector<std::string> m_modelNames;
std::string m_filePath; std::string m_filePath;
std::string m_error; std::string m_error;

View File

@ -131,15 +131,13 @@ BOOST_AUTO_TEST_CASE( Diodes )
LoadLibrary( "diodes" ); LoadLibrary( "diodes" );
const std::vector<std::reference_wrapper<SIM_MODEL>> models = m_library->GetModels(); const std::vector<SIM_LIBRARY::MODEL> models = m_library->GetModels();
const std::vector<std::string>& modelNames = m_library->GetModelNames();
BOOST_CHECK_EQUAL( models.size(), 22 ); BOOST_CHECK_EQUAL( models.size(), 22 );
for( int i = 0; i < models.size(); ++i ) for( int i = 0; i < models.size(); ++i )
{ {
const SIM_MODEL& model = models.at( i ); const auto& [modelName, model] = models.at( i );
const std::string& modelName = modelNames.at( i );
switch( i ) switch( i )
{ {
@ -238,15 +236,13 @@ BOOST_AUTO_TEST_CASE( Bjts )
LoadLibrary( "bjts" ); LoadLibrary( "bjts" );
const std::vector<std::reference_wrapper<SIM_MODEL>> models = m_library->GetModels(); const std::vector<SIM_LIBRARY::MODEL> models = m_library->GetModels();
const std::vector<std::string>& modelNames = m_library->GetModelNames();
BOOST_CHECK_EQUAL( models.size(), 6 ); BOOST_CHECK_EQUAL( models.size(), 6 );
for( int i = 0; i < models.size(); ++i ) for( int i = 0; i < models.size(); ++i )
{ {
const SIM_MODEL& model = models.at( i ); const auto& [modelName, model] = models.at( i );
const std::string& modelName = modelNames.at( i );
switch( i ) switch( i )
{ {
@ -294,15 +290,13 @@ BOOST_AUTO_TEST_CASE( Fets )
LoadLibrary( "fets" ); LoadLibrary( "fets" );
const std::vector<std::reference_wrapper<SIM_MODEL>> models = m_library->GetModels(); const std::vector<SIM_LIBRARY::MODEL> models = m_library->GetModels();
const std::vector<std::string>& modelNames = m_library->GetModelNames();
BOOST_CHECK_EQUAL( models.size(), 44 ); BOOST_CHECK_EQUAL( models.size(), 44 );
for( int i = 0; i < models.size(); ++i ) for( int i = 0; i < models.size(); ++i )
{ {
const SIM_MODEL& model = models.at( i ); const auto& [modelName, model] = models.at( i );
const std::string& modelName = modelNames.at( i );
switch( i ) switch( i )
{ {