27#include <boost/algorithm/string/predicate.hpp>
28#include <boost/algorithm/string/trim.hpp>
35 return fmt::format(
"__{}", aItem.
refName );
51 result.append( fmt::format(
".model {} ", aItem.
modelName ) );
52 size_t indentLength = result.length();
58 result.append( fmt::format(
" level={}", spiceInfo.
level ) );
60 if ( !spiceInfo.
version.empty() )
61 result.append( fmt::format(
" version={}", spiceInfo.
version ) );
63 result.append(
"\n" );
67 if( param.info.isSpiceInstanceParam )
73 if( !param.info.spiceModelName.empty() )
75 name = param.info.spiceModelName;
81 if( boost::ends_with( param.info.name,
"_" ) )
82 name = param.info.name.substr( 0, param.info.name.length() - 1 );
84 name = param.info.name;
95 result.append( fmt::format(
"+{}\n",
name ) );
99 result.append( fmt::format(
"+{}{}={}\n",
100 std::string( indentLength - 1,
' ' ),
107 if( result.length() == indentLength + 1 )
121 item.
pinNumbers.push_back( fmt::format(
"{}", i + 1 ) );
135 result.append(
"\n" );
157 pin.symbolPinNumber );
161 result.append( fmt::format(
" NC-{}-{}", aItem.
refName, ncCounter++ ) );
165 long symbolPinIndex = std::distance( aItem.
pinNumbers.begin(), it );
166 result.append( fmt::format(
" {}", aItem.
pinNetNames.at( symbolPinIndex ) ) );
176 return fmt::format(
" {}", aItem.
modelName );
186 std::string
name = param.info.spiceInstanceName.empty() ? param.info.name
187 : param.info.spiceInstanceName;
193 result.append( fmt::format(
" {}",
name ) );
198 result.append( fmt::format(
" {}={}",
name, value ) );
215 return { fmt::format(
"I({})",
ItemName( aItem ) ) };
221 std::string spiceCode =
ModelLine( aItem );
223 std::string itemLine =
ItemLine( aItem );
225 if( spiceCode !=
"" )
226 spiceCode.append(
"\n" );
228 spiceCode.append( itemLine );
229 return boost::trim_copy( spiceCode );
235 std::vector<std::reference_wrapper<const SIM_MODEL::PARAM>> instanceParams;
239 if( param.info.isSpiceInstanceParam )
240 instanceParams.emplace_back( param );
243 return instanceParams;
virtual bool requiresSpiceModelLine(const SPICE_ITEM &aItem) const
SPICE_INFO GetSpiceInfo() const
std::vector< std::reference_wrapper< const PARAM > > GetParams() const
static std::string ToSpice(const std::string &aString)
virtual std::string ItemName(const SPICE_ITEM &aItem) const
virtual std::vector< std::reference_wrapper< const SIM_MODEL::PARAM > > GetInstanceParams() const
virtual std::string ItemPins(const SPICE_ITEM &aItem) const
virtual std::string ItemLine(const SPICE_ITEM &aItem) const
virtual std::string ModelLine(const SPICE_ITEM &aItem) const
virtual std::vector< std::reference_wrapper< const SIM_MODEL::PIN > > GetPins() const
virtual std::string ItemParams() const
const SIM_MODEL & m_model
virtual std::string Preview(const SPICE_ITEM &aItem) const
virtual std::string ItemModelName(const SPICE_ITEM &aItem) const
virtual std::string TunerCommand(const SPICE_ITEM &aItem, double aValue) const
virtual std::string ModelName(const SPICE_ITEM &aItem) const
virtual std::vector< std::string > CurrentNames(const SPICE_ITEM &aItem) const
std::vector< std::string > pinNetNames
std::string baseModelName
std::vector< std::string > pinNumbers