24#include <boost/algorithm/string/predicate.hpp>
26#include <pegtl/contrib/parse_tree.hpp>
46 std::string type =
m_model.GetParam( (
int) SIM_MODEL_RAW_SPICE::SPICE_PARAM::TYPE ).value;
48 if( aItem.
refName !=
"" && boost::starts_with( aItem.
refName, type ) )
51 return fmt::format(
"{}{}", type, aItem.
refName );
65 pin.symbolPinNumber );
69 long symbolPinIndex = std::distance( aItem.
pinNumbers.begin(), it );
74 result.append( fmt::format(
" NC-{}-{}", aItem.
refName, ncCounter++ ) );
82 for(
const std::string& pinNetName : aItem.
pinNetNames )
83 result.append( fmt::format(
" {}", pinNetName ) );
100 for(
int ii = 0; ii <
m_model.GetParamCount(); ++ii )
104 if( !
param.info.isSpiceInstanceParam )
107 if(
param.info.name ==
"model" )
121SIM_MODEL_RAW_SPICE::SIM_MODEL_RAW_SPICE(
const std::string& aSpiceSource ) :
123 m_spiceCode( aSpiceSource )
125 static std::vector<PARAM::INFO> paramInfos = makeParamInfos();
127 for(
const PARAM::INFO& paramInfo : paramInfos )
128 AddParam( paramInfo );
130 SetParamValue(
"model", aSpiceSource );
135 const wxString& aSymbolPinNumber )
138 int pinIndex = (int) strtol( aModelPinName.c_str(),
nullptr, 10 );
145 m_modelPins[ --pinIndex ].symbolPinNumber = aSymbolPinNumber;
152 std::vector<PARAM::INFO> paramInfos;
154 for( SPICE_PARAM spiceParam : SPICE_PARAM_ITERATOR() )
156 PARAM::INFO paramInfo;
160 case SPICE_PARAM::TYPE:
161 paramInfo.name =
"type";
164 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
165 paramInfo.defaultValue =
"";
166 paramInfo.description =
"Spice element type";
167 paramInfo.isSpiceInstanceParam =
true;
169 paramInfos.push_back( paramInfo );
172 case SPICE_PARAM::MODEL:
173 paramInfo.name =
"model";
176 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
177 paramInfo.defaultValue =
"";
178 paramInfo.description =
"Model name or value";
179 paramInfo.isSpiceInstanceParam =
true;
181 paramInfos.push_back( paramInfo );
184 case SPICE_PARAM::LIB:
185 paramInfo.name =
"lib";
188 paramInfo.category = SIM_MODEL::PARAM::CATEGORY::PRINCIPAL;
189 paramInfo.defaultValue =
"";
190 paramInfo.description =
"Library path to include";
191 paramInfo.isSpiceInstanceParam =
true;
193 paramInfos.push_back( paramInfo );
196 case SPICE_PARAM::_ENUM_END:
void AssignSymbolPinNumberToModelPin(const std::string &aModelPinName, const wxString &aSymbolPinNumber) override
static std::vector< PARAM::INFO > makeParamInfos()
std::vector< SIM_MODEL_PIN > m_modelPins
static std::string ToSpice(const std::string &aString)
std::string ModelLine(const SPICE_ITEM &aItem) const override
std::string ItemPins(const SPICE_ITEM &aItem) const override
std::string ItemModelName(const SPICE_ITEM &aItem) const override
std::string ItemParams() const override
std::string Preview(const SPICE_ITEM &aItem) const override
std::string ItemName(const SPICE_ITEM &aItem) const override
virtual std::vector< std::reference_wrapper< const SIM_MODEL_PIN > > GetPins() const
const SIM_MODEL & m_model
static bool empty(const wxTextEntryBase *aCtrl)
std::vector< std::string > pinNetNames
std::vector< std::string > pinNumbers
wxString result
Test unit parsing edge cases and error handling.