Sim: Universally initialize enum parameters with their default values

This commit is contained in:
Mikolaj Wielgus 2022-11-30 12:40:50 +01:00
parent 39cd9f8980
commit e39c0b20ea
4 changed files with 10 additions and 24 deletions

View File

@ -650,6 +650,10 @@ int SIM_MODEL::FindModelPinIndex( const std::string& aSymbolPinNumber )
void SIM_MODEL::AddParam( const PARAM::INFO& aInfo, bool aIsOtherVariant ) void SIM_MODEL::AddParam( const PARAM::INFO& aInfo, bool aIsOtherVariant )
{ {
m_params.emplace_back( aInfo, aIsOtherVariant ); m_params.emplace_back( aInfo, aIsOtherVariant );
// Enums are initialized with their default values.
if( aInfo.enumValues.size() >= 1 )
m_params.back().value->FromString( aInfo.defaultValue );
} }

View File

@ -94,19 +94,9 @@ std::vector<std::reference_wrapper<const SIM_MODEL::PIN>> SPICE_GENERATOR_SWITCH
} }
std::string SIM_SERDE_SWITCH::GenerateParamValuePair( const SIM_MODEL::PARAM& aParam ) const
{
if( aParam.info.name == "ic" && aParam.value->ToString() == "none" )
return "";
return SIM_SERDE::GenerateParamValuePair( aParam );
}
SIM_MODEL_SWITCH::SIM_MODEL_SWITCH( TYPE aType ) : SIM_MODEL_SWITCH::SIM_MODEL_SWITCH( TYPE aType ) :
SIM_MODEL( aType, SIM_MODEL( aType,
std::make_unique<SPICE_GENERATOR_SWITCH>( *this ), std::make_unique<SPICE_GENERATOR_SWITCH>( *this ) )
std::make_unique<SIM_SERDE_SWITCH>( *this ) )
{ {
static std::vector<PARAM::INFO> vsw = makeSwVParamInfos(); static std::vector<PARAM::INFO> vsw = makeSwVParamInfos();
static std::vector<PARAM::INFO> isw = makeSwIParamInfos(); static std::vector<PARAM::INFO> isw = makeSwIParamInfos();
@ -127,8 +117,6 @@ SIM_MODEL_SWITCH::SIM_MODEL_SWITCH( TYPE aType ) :
wxFAIL_MSG( "Unhandled SIM_MODEL type in SIM_MODEL_SWITCH" ); wxFAIL_MSG( "Unhandled SIM_MODEL type in SIM_MODEL_SWITCH" );
break; break;
} }
SetParamValue( "ic", "none" );
} }
@ -185,7 +173,7 @@ const std::vector<SIM_MODEL::PARAM::INFO> SIM_MODEL_SWITCH::makeSwVParamInfos()
paramInfo.type = SIM_VALUE::TYPE_STRING; paramInfo.type = SIM_VALUE::TYPE_STRING;
paramInfo.unit = ""; paramInfo.unit = "";
paramInfo.category = PARAM::CATEGORY::PRINCIPAL; paramInfo.category = PARAM::CATEGORY::PRINCIPAL;
paramInfo.defaultValue = "1"; paramInfo.defaultValue = "none";
paramInfo.description = "Initial state"; paramInfo.description = "Initial state";
paramInfo.isSpiceInstanceParam = true; paramInfo.isSpiceInstanceParam = true;
paramInfo.spiceModelName = ""; paramInfo.spiceModelName = "";

View File

@ -41,16 +41,6 @@ public:
}; };
class SIM_SERDE_SWITCH : public SIM_SERDE
{
public:
using SIM_SERDE::SIM_SERDE;
protected:
std::string GenerateParamValuePair( const SIM_MODEL::PARAM& aParam ) const override;
};
class SIM_MODEL_SWITCH : public SIM_MODEL class SIM_MODEL_SWITCH : public SIM_MODEL
{ {
public: public:

View File

@ -94,6 +94,10 @@ std::string SIM_SERDE::GenerateParams() const
continue; continue;
} }
// If the parameter is an enum and the value is default, don't write anything.
if( param.info.enumValues.size() >= 1 && param.value->ToString() == param.info.defaultValue )
continue;
std::string paramValuePair = GenerateParamValuePair( param ); std::string paramValuePair = GenerateParamValuePair( param );
if( paramValuePair == "" ) if( paramValuePair == "" )