From f33cd3e383d36df167445e85ed64a5b6c5e30301 Mon Sep 17 00:00:00 2001 From: Mikolaj Wielgus Date: Fri, 11 Nov 2022 05:16:34 +0100 Subject: [PATCH] Sim: Remove vestiges of (de)serialization from SIM_MODEL --- eeschema/sim/sim_model.cpp | 92 ++++----------------------- eeschema/sim/sim_model.h | 16 +---- eeschema/sim/sim_model_behavioral.cpp | 2 +- eeschema/sim/sim_model_source.cpp | 6 +- eeschema/sim/sim_model_source.h | 3 + eeschema/sim/sim_model_switch.cpp | 2 - eeschema/sim/sim_serde.cpp | 19 +++++- 7 files changed, 37 insertions(+), 103 deletions(-) diff --git a/eeschema/sim/sim_model.cpp b/eeschema/sim/sim_model.cpp index c525521fa6..f2b2f047f0 100644 --- a/eeschema/sim/sim_model.cpp +++ b/eeschema/sim/sim_model.cpp @@ -980,7 +980,7 @@ void SIM_MODEL::WriteInferredDataFields( std::vector& aFields, const std::str std::string value = aValue; if( value == "" ) - value = GenerateValueField( "=" ); + value = m_serde->GenerateValue(); SetFieldValue( aFields, VALUE_FIELD, value ); SetFieldValue( aFields, DEVICE_TYPE_FIELD, "" ); @@ -990,46 +990,16 @@ void SIM_MODEL::WriteInferredDataFields( std::vector& aFields, const std::str } -std::string SIM_MODEL::GenerateValueField( const std::string& aPairSeparator ) const -{ - return m_serde->GenerateValue(); -} - - -std::string SIM_MODEL::GenerateParamsField( const std::string& aPairSeparator ) const -{ - return m_serde->GenerateParams(); -} - - -void SIM_MODEL::ParseParamsField( const std::string& aParamsField ) -{ - m_serde->ParseParams( aParamsField ); -} - - -void SIM_MODEL::ParsePinsField( unsigned aSymbolPinCount, const std::string& aPinsField ) -{ - CreatePins( aSymbolPinCount ); - - m_serde->ParsePins( aPinsField ); -} - - -void SIM_MODEL::ParseEnableField( const std::string& aEnableField ) -{ - m_serde->ParseEnable( aEnableField ); -} - - template void SIM_MODEL::doReadDataFields( unsigned aSymbolPinCount, const std::vector* aFields ) { - ParseEnableField( GetFieldValue( aFields, ENABLE_FIELD ) ); - ParsePinsField( aSymbolPinCount, GetFieldValue( aFields, PINS_FIELD ) ); + m_serde->ParseEnable( GetFieldValue( aFields, ENABLE_FIELD ) ); + + CreatePins( aSymbolPinCount ); + m_serde->ParsePins( GetFieldValue( aFields, PINS_FIELD ) ); if( GetFieldValue( aFields, PARAMS_FIELD ) != "" ) - ParseParamsField( GetFieldValue( aFields, PARAMS_FIELD ) ); + m_serde->ParseParams( GetFieldValue( aFields, PARAMS_FIELD ) ); else InferredReadDataFields( aSymbolPinCount, aFields ); } @@ -1060,51 +1030,11 @@ void SIM_MODEL::InferredReadDataFields( unsigned aSymbolPinCount, const std::vec template void SIM_MODEL::doWriteFields( std::vector& aFields ) const { - SetFieldValue( aFields, DEVICE_TYPE_FIELD, generateDeviceTypeField() ); - SetFieldValue( aFields, TYPE_FIELD, generateTypeField() ); - SetFieldValue( aFields, PINS_FIELD, generatePinsField() ); - SetFieldValue( aFields, PARAMS_FIELD, GenerateParamsField( " " ) ); - SetFieldValue( aFields, ENABLE_FIELD, generateEnableField() ); -} - - -std::string SIM_MODEL::generateDeviceTypeField() const -{ - return DeviceTypeInfo( TypeInfo( m_type ).deviceType ).fieldValue; -} - - -std::string SIM_MODEL::generateTypeField() const -{ - return TypeInfo( m_type ).fieldValue; -} - - -std::string SIM_MODEL::generatePinsField() const -{ - std::string result = ""; - bool isFirst = true; - - for( const PIN& pin : GetPins() ) - { - if( isFirst ) - isFirst = false; - else - result.append( " " ); - - if( pin.symbolPinNumber == "" ) - result.append( "~" ); - else - result.append( pin.symbolPinNumber ); // Note that it's numbered from 1. - } - - return result; -} - - -std::string SIM_MODEL::generateEnableField() const -{ - return m_isEnabled ? "" : "0"; + SetFieldValue( aFields, DEVICE_TYPE_FIELD, m_serde->GenerateDevice() ); + SetFieldValue( aFields, TYPE_FIELD, m_serde->GenerateType() ); + SetFieldValue( aFields, PINS_FIELD, m_serde->GeneratePins() ); + SetFieldValue( aFields, PARAMS_FIELD, m_serde->GenerateParams() ); + SetFieldValue( aFields, ENABLE_FIELD, m_serde->GenerateEnable() ); } diff --git a/eeschema/sim/sim_model.h b/eeschema/sim/sim_model.h index 2a874be434..abf932fc74 100644 --- a/eeschema/sim/sim_model.h +++ b/eeschema/sim/sim_model.h @@ -531,15 +531,9 @@ protected: template void WriteInferredDataFields( std::vector& aFields, const std::string& aValue = "" ) const; - std::string GenerateValueField( const std::string& aPairSeparator ) const; - std::string GenerateParamsField( const std::string& aPairSeparator ) const; - void ParseParamsField( const std::string& aParamsField ); - - void ParsePinsField( unsigned aSymbolPinCount, const std::string& aPinsField ); - void ParseEnableField( const std::string& aDisabledField ); - template void InferredReadDataFields( unsigned aSymbolPinCount, const std::vector* aFields ); + std::vector m_params; const SIM_MODEL* m_baseModel; std::unique_ptr m_serde; @@ -557,14 +551,6 @@ private: template void doWriteFields( std::vector& aFields ) const; - std::string generateDeviceTypeField() const; - std::string generateTypeField() const; - - std::string generatePinsField() const; - std::string generateEnableField() const; - - std::string parseFieldFloatValue( std::string aFieldFloatValue ); - virtual bool requiresSpiceModelLine() const; virtual std::vector getPinNames() const { return {}; } diff --git a/eeschema/sim/sim_model_behavioral.cpp b/eeschema/sim/sim_model_behavioral.cpp index 23bb696728..fc091adb75 100644 --- a/eeschema/sim/sim_model_behavioral.cpp +++ b/eeschema/sim/sim_model_behavioral.cpp @@ -148,7 +148,7 @@ template void SIM_MODEL_BEHAVIORAL::inferredReadDataFields( unsigned aSymbolPinCount, const std::vector* aFields ) { - ParsePinsField( aSymbolPinCount, GetFieldValue( aFields, PINS_FIELD ) ); + m_serde->ParsePins( GetFieldValue( aFields, PINS_FIELD ) ); if( ( m_serde->InferTypeFromRefAndValue( GetFieldValue( aFields, REFERENCE_FIELD ), GetFieldValue( aFields, VALUE_FIELD ), diff --git a/eeschema/sim/sim_model_source.cpp b/eeschema/sim/sim_model_source.cpp index 2c09f191a1..43326803df 100644 --- a/eeschema/sim/sim_model_source.cpp +++ b/eeschema/sim/sim_model_source.cpp @@ -208,7 +208,9 @@ std::string SIM_SERDE_SOURCE::GenerateParamValuePair( const SIM_MODEL::PARAM& aP SIM_MODEL_SOURCE::SIM_MODEL_SOURCE( TYPE aType ) - : SIM_MODEL( aType, std::make_unique( *this ) ) + : SIM_MODEL( aType, + std::make_unique( *this ), + std::make_unique( *this ) ) { for( const SIM_MODEL::PARAM::INFO& paramInfo : makeParamInfos( aType ) ) AddParam( paramInfo ); @@ -268,9 +270,11 @@ void SIM_MODEL_SOURCE::inferredWriteDataFields( std::vector& aFields ) const std::string value; if( GetTypeInfo().fieldValue != "" ) + { value = fmt::format( "{} {}", GetTypeInfo().fieldValue, GetFieldValue( &aFields, PARAMS_FIELD ) ); + } else value = fmt::format( "{}", GetFieldValue( &aFields, PARAMS_FIELD ) ); diff --git a/eeschema/sim/sim_model_source.h b/eeschema/sim/sim_model_source.h index ef3605acb7..f350aec53c 100644 --- a/eeschema/sim/sim_model_source.h +++ b/eeschema/sim/sim_model_source.h @@ -61,6 +61,9 @@ private: class SIM_SERDE_SOURCE : public SIM_SERDE { +public: + using SIM_SERDE::SIM_SERDE; + protected: std::string GenerateParamValuePair( const SIM_MODEL::PARAM& aParam ) const override; }; diff --git a/eeschema/sim/sim_model_switch.cpp b/eeschema/sim/sim_model_switch.cpp index 84dce4f3c4..85efef31c1 100644 --- a/eeschema/sim/sim_model_switch.cpp +++ b/eeschema/sim/sim_model_switch.cpp @@ -132,8 +132,6 @@ SIM_MODEL_SWITCH::SIM_MODEL_SWITCH( TYPE aType ) : } - - const std::vector SIM_MODEL_SWITCH::makeSwVParamInfos() { std::vector paramInfos; diff --git a/eeschema/sim/sim_serde.cpp b/eeschema/sim/sim_serde.cpp index 48b5e53ce4..4e0cfc2c45 100644 --- a/eeschema/sim/sim_serde.cpp +++ b/eeschema/sim/sim_serde.cpp @@ -81,7 +81,12 @@ std::string SIM_SERDE::GenerateValue() const if( param.value->ToString() == "" ) continue; - result.append( fmt::format( " {}", GenerateParamValuePair( param ) ) ); + std::string paramValuePair = GenerateParamValuePair( param ); + + if( paramValuePair == "" ) + continue; // Prevent adding empty spaces. + + result.append( fmt::format( " {}", paramValuePair ) ); } if( result == "" ) @@ -94,6 +99,7 @@ std::string SIM_SERDE::GenerateValue() const std::string SIM_SERDE::GenerateParams() const { std::string result; + bool isFirst = true; for( int i = 0; i < m_model.GetParamCount(); ++i ) { @@ -102,10 +108,17 @@ std::string SIM_SERDE::GenerateParams() const if( param.value->ToString() == "" ) continue; - if( i != 0 ) + std::string paramValuePair = GenerateParamValuePair( param ); + + if( paramValuePair == "" ) + continue; // Prevent adding empty spaces. + + if( isFirst ) // Don't add a space at the beginning. + isFirst = false; + else result.append( " " ); - result.append( GenerateParamValuePair( param ) ); + result.append( paramValuePair ); } return result;