mirror of
https://github.com/holub/mame
synced 2025-10-04 16:34:53 +03:00
netlist: scalable error messages.
This approach uses functors for logging messages.
This commit is contained in:
parent
e6261f9e39
commit
6392b345e6
@ -116,7 +116,7 @@ namespace netlist
|
||||
{
|
||||
m_type = static_cast<int>(m_model.m_TYPE);
|
||||
if (m_type < 1 || m_type > 3)
|
||||
log().fatal(MF_1_UNKNOWN_OPAMP_TYPE, m_type);
|
||||
log().fatal(MF_UNKNOWN_OPAMP_TYPE(m_type));
|
||||
|
||||
if (m_type == 1)
|
||||
{
|
||||
|
@ -72,7 +72,7 @@ namespace netlist
|
||||
m_RV.set_G_V_I(plib::constants<nl_double>::one() / R_LOW, 0.0, 0.0);
|
||||
m_inc = netlist_time::from_double(1.0 / m_FREQ());
|
||||
if (m_FREQ() < 24000 || m_FREQ() > 56000)
|
||||
log().warning(MW_1_FREQUENCY_OUTSIDE_OF_SPECS_1, m_FREQ());
|
||||
log().warning(MW_FREQUENCY_OUTSIDE_OF_SPECS_1(m_FREQ()));
|
||||
|
||||
m_shift = 0x1ffff;
|
||||
m_is_timestep = m_RV.m_P.net().solver()->has_timestep_devices();
|
||||
@ -82,7 +82,7 @@ namespace netlist
|
||||
{
|
||||
m_inc = netlist_time::from_double(1.0 / m_FREQ());
|
||||
if (m_FREQ() < 24000 || m_FREQ() > 56000)
|
||||
log().warning(MW_1_FREQUENCY_OUTSIDE_OF_SPECS_1, m_FREQ());
|
||||
log().warning(MW_FREQUENCY_OUTSIDE_OF_SPECS_1(m_FREQ()));
|
||||
}
|
||||
|
||||
NETLIB_UPDATE(MM5837_dip)
|
||||
|
@ -106,7 +106,7 @@ namespace netlist
|
||||
}
|
||||
//FIXME: Use power terminals and change info to warning or error
|
||||
if (!f)
|
||||
log().info(MI_1_NO_POWER_TERMINALS_ON_DEVICE_1, out_proxied->device().name());
|
||||
log().info(MI_NO_POWER_TERMINALS_ON_DEVICE_1(out_proxied->device().name()));
|
||||
else
|
||||
log().verbose("D/A Proxy: Found power terminals on device {1}", out_proxied->device().name());
|
||||
}
|
||||
|
@ -227,7 +227,7 @@ detail::terminal_type detail::core_terminal_t::type() const
|
||||
return terminal_type::OUTPUT;
|
||||
else
|
||||
{
|
||||
state().log().fatal(MF_1_UNKNOWN_TYPE_FOR_OBJECT, name());
|
||||
state().log().fatal(MF_UNKNOWN_TYPE_FOR_OBJECT(name()));
|
||||
return terminal_type::TERMINAL; // please compiler
|
||||
}
|
||||
}
|
||||
@ -543,7 +543,7 @@ core_device_t *netlist_state_t::get_single_device(const pstring &classname, bool
|
||||
if (cc(d.second.get()))
|
||||
{
|
||||
if (ret != nullptr)
|
||||
m_log.fatal(MF_1_MORE_THAN_ONE_1_DEVICE_FOUND, classname);
|
||||
m_log.fatal(MF_MORE_THAN_ONE_1_DEVICE_FOUND(classname));
|
||||
else
|
||||
ret = d.second.get();
|
||||
}
|
||||
@ -648,7 +648,7 @@ void device_t::connect(const pstring &t1, const pstring &t2)
|
||||
void device_t::connect_post_start(detail::core_terminal_t &t1, detail::core_terminal_t &t2)
|
||||
{
|
||||
if (!setup().connect(t1, t2))
|
||||
log().fatal(MF_2_ERROR_CONNECTING_1_TO_2, t1.name(), t2.name());
|
||||
log().fatal(MF_ERROR_CONNECTING_1_TO_2(t1.name(), t2.name()));
|
||||
}
|
||||
|
||||
|
||||
@ -769,8 +769,7 @@ void detail::net_t::add_terminal(detail::core_terminal_t &terminal)
|
||||
{
|
||||
for (auto &t : m_core_terms)
|
||||
if (t == &terminal)
|
||||
state().log().fatal(MF_2_NET_1_DUPLICATE_TERMINAL_2, name(),
|
||||
t->name());
|
||||
state().log().fatal(MF_NET_1_DUPLICATE_TERMINAL_2(name(), t->name()));
|
||||
|
||||
terminal.set_net(this);
|
||||
|
||||
@ -785,8 +784,7 @@ void detail::net_t::remove_terminal(detail::core_terminal_t &terminal)
|
||||
plib::container::remove(m_core_terms, &terminal);
|
||||
}
|
||||
else
|
||||
state().log().fatal(MF_2_REMOVE_TERMINAL_1_FROM_NET_2, terminal.name(),
|
||||
this->name());
|
||||
state().log().fatal(MF_REMOVE_TERMINAL_1_FROM_NET_2(terminal.name(), this->name()));
|
||||
}
|
||||
|
||||
void detail::net_t::move_connections(detail::net_t &dest_net)
|
||||
@ -970,7 +968,7 @@ param_t::param_type_t param_t::param_type() const
|
||||
return POINTER;
|
||||
else
|
||||
{
|
||||
state().log().fatal(MF_1_UNKNOWN_PARAM_TYPE, name());
|
||||
state().log().fatal(MF_UNKNOWN_PARAM_TYPE(name()));
|
||||
return POINTER; /* Please compiler */
|
||||
}
|
||||
}
|
||||
@ -1012,7 +1010,7 @@ param_ptr_t::param_ptr_t(device_t &device, const pstring &name, uint8_t * val)
|
||||
|
||||
void param_model_t::changed()
|
||||
{
|
||||
state().log().fatal(MF_1_MODEL_1_CAN_NOT_BE_CHANGED_AT_RUNTIME, name());
|
||||
state().log().fatal(MF_MODEL_1_CAN_NOT_BE_CHANGED_AT_RUNTIME(name()));
|
||||
}
|
||||
|
||||
const pstring param_model_t::value_str(const pstring &entity)
|
||||
|
@ -1379,7 +1379,7 @@ namespace netlist
|
||||
if (d.first == name)
|
||||
{
|
||||
dev.release();
|
||||
log().fatal(MF_1_DUPLICATE_NAME_DEVICE_LIST, name);
|
||||
log().fatal(MF_DUPLICATE_NAME_DEVICE_LIST(name));
|
||||
}
|
||||
//m_devices.push_back(std::move(dev));
|
||||
m_devices.insert(m_devices.end(), { name, std::move(dev) });
|
||||
@ -1561,7 +1561,7 @@ namespace netlist
|
||||
bool err = false;
|
||||
auto vald = plib::pstonum_ne<T>(p, err);
|
||||
if (err)
|
||||
device.state().log().fatal(MF_2_INVALID_NUMBER_CONVERSION_1_2, name, p);
|
||||
device.state().log().fatal(MF_INVALID_NUMBER_CONVERSION_1_2(name, p));
|
||||
m_param = vald;
|
||||
}
|
||||
else
|
||||
|
@ -6,101 +6,121 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef NLERRSTR_H_
|
||||
#define NLERRSTR_H_
|
||||
#ifndef NL_ERRSTR_H_
|
||||
#define NL_ERRSTR_H_
|
||||
|
||||
#include "plib/pfmtlog.h"
|
||||
|
||||
#define PERRMSG(name, str) \
|
||||
struct name \
|
||||
{ \
|
||||
operator pstring() const { return str; } \
|
||||
};
|
||||
|
||||
#define PERRMSGV(name, narg, str) \
|
||||
struct name \
|
||||
{ \
|
||||
template<typename... Args> name(Args&&... args) \
|
||||
: m_m(plib::pfmt(str)(std::forward<Args>(args)...)) \
|
||||
{ static_assert(narg == sizeof...(args), "Argument count mismatch"); } \
|
||||
operator pstring() const { return m_m; } \
|
||||
pstring m_m; \
|
||||
};
|
||||
|
||||
// nl_base.cpp
|
||||
|
||||
#define MF_1_DUPLICATE_NAME_DEVICE_LIST "Error adding {1} to device list. Duplicate name."
|
||||
#define MF_1_UNKNOWN_TYPE_FOR_OBJECT "Unknown type for object {1} "
|
||||
#define MF_2_NET_1_DUPLICATE_TERMINAL_2 "net {1}: duplicate terminal {2}"
|
||||
#define MF_2_REMOVE_TERMINAL_1_FROM_NET_2 "Can not remove terminal {1} from net {2}."
|
||||
#define MF_1_UNKNOWN_PARAM_TYPE "Can not determine param_type for {1}"
|
||||
#define MF_2_ERROR_CONNECTING_1_TO_2 "Error connecting {1} to {2}"
|
||||
#define MF_0_NO_SOLVER "No solver found for this netlist although analog elements are present"
|
||||
#define MF_1_HND_VAL_NOT_SUPPORTED "HINT_NO_DEACTIVATE value not supported: <{1}>"
|
||||
PERRMSGV(MF_DUPLICATE_NAME_DEVICE_LIST, 1, "Error adding {1} to device list. Duplicate name.")
|
||||
PERRMSGV(MF_UNKNOWN_TYPE_FOR_OBJECT, 1, "Unknown type for object {1},")
|
||||
PERRMSGV(MF_NET_1_DUPLICATE_TERMINAL_2, 2, "net {1}: duplicate terminal {2}")
|
||||
PERRMSGV(MF_REMOVE_TERMINAL_1_FROM_NET_2, 2, "Can not remove terminal {1} from net {2}.")
|
||||
PERRMSGV(MF_UNKNOWN_PARAM_TYPE, 1, "Can not determine param_type for {1}")
|
||||
PERRMSGV(MF_ERROR_CONNECTING_1_TO_2, 2, "Error connecting {1} to {2}")
|
||||
PERRMSGV(MF_NO_SOLVER, 0, "No solver found for this netlist although analog elements are present")
|
||||
PERRMSGV(MF_HND_VAL_NOT_SUPPORTED, 1, "HINT_NO_DEACTIVATE value not supported: <{1}>")
|
||||
|
||||
// nl_factory.cpp
|
||||
|
||||
#define MF_1_FACTORY_ALREADY_CONTAINS_1 "factory already contains {1}"
|
||||
#define MF_1_CLASS_1_NOT_FOUND "Class <{1}> not found!"
|
||||
PERRMSGV(MF_FACTORY_ALREADY_CONTAINS_1, 1, "factory already contains {1}")
|
||||
PERRMSGV(MF_CLASS_1_NOT_FOUND, 1, "Class <{1}> not found!")
|
||||
|
||||
// nld_opamps.cpp
|
||||
|
||||
#define MF_1_UNKNOWN_OPAMP_TYPE "Unknown opamp type: {1}"
|
||||
PERRMSGV(MF_UNKNOWN_OPAMP_TYPE, 1, "Unknown opamp type: {1}")
|
||||
|
||||
// nld_matrix_solver.cpp
|
||||
|
||||
#define MF_1_UNHANDLED_ELEMENT_1_FOUND "setup_base:unhandled element <{1}> found"
|
||||
#define MF_1_FOUND_TERM_WITH_MISSING_OTHERNET "found term with missing othernet {1}"
|
||||
PERRMSGV(MF_UNHANDLED_ELEMENT_1_FOUND, 1, "setup_base:unhandled element <{1}> found")
|
||||
PERRMSGV(MF_FOUND_TERM_WITH_MISSING_OTHERNET, 1, "found term with missing othernet {1}")
|
||||
|
||||
#define MW_1_NEWTON_LOOPS_EXCEEDED_ON_NET_1 "NEWTON_LOOPS exceeded on net {1}... reschedule"
|
||||
PERRMSGV(MW_NEWTON_LOOPS_EXCEEDED_ON_NET_1, 1, "NEWTON_LOOPS exceeded on net {1}... reschedule")
|
||||
|
||||
// nld_solver.cpp
|
||||
|
||||
#define MF_1_UNKNOWN_SOLVER_TYPE "Unknown solver type: {1}"
|
||||
#define MF_1_NETGROUP_SIZE_EXCEEDED_1 "Encountered netgroup with > {1} nets"
|
||||
PERRMSGV(MF_UNKNOWN_SOLVER_TYPE, 1, "Unknown solver type: {1}")
|
||||
PERRMSGV(MF_NETGROUP_SIZE_EXCEEDED_1, 1, "Encountered netgroup with > {1} nets")
|
||||
|
||||
#define MI_1_NO_SPECIFIC_SOLVER "No specific solver found for netlist of size {1}"
|
||||
PERRMSGV(MI_NO_SPECIFIC_SOLVER, 1, "No specific solver found for netlist of size {1}")
|
||||
|
||||
// nl_base.cpp
|
||||
|
||||
#define MF_1_MODEL_1_CAN_NOT_BE_CHANGED_AT_RUNTIME "Model {1} can not be changed at runtime"
|
||||
#define MF_1_MORE_THAN_ONE_1_DEVICE_FOUND "more than one {1} device found"
|
||||
PERRMSGV(MF_MODEL_1_CAN_NOT_BE_CHANGED_AT_RUNTIME, 1, "Model {1} can not be changed at runtime")
|
||||
PERRMSGV(MF_MORE_THAN_ONE_1_DEVICE_FOUND, 1, "more than one {1} device found")
|
||||
|
||||
// nl_parser.cpp
|
||||
|
||||
#define MF_0_UNEXPECTED_NETLIST_END "Unexpected NETLIST_END"
|
||||
#define MF_0_UNEXPECTED_NETLIST_START "Unexpected NETLIST_START"
|
||||
PERRMSGV(MF_UNEXPECTED_NETLIST_END, 0, "Unexpected NETLIST_END")
|
||||
PERRMSGV(MF_UNEXPECTED_NETLIST_START, 0, "Unexpected NETLIST_START")
|
||||
|
||||
// nl_setup.cpp
|
||||
|
||||
//#define MF_1_CLASS_1_NOT_FOUND "Class {1} not found!"
|
||||
#define MF_1_UNABLE_TO_PARSE_MODEL_1 "Unable to parse model: {1}"
|
||||
#define MF_1_MODEL_ALREADY_EXISTS_1 "Model already exists: {1}"
|
||||
#define MF_1_DEVICE_ALREADY_EXISTS_1 "Device already exists: {1}"
|
||||
#define MF_1_ADDING_ALI1_TO_ALIAS_LIST "Error adding alias {1} to alias list"
|
||||
#define MF_1_DIP_PINS_MUST_BE_AN_EQUAL_NUMBER_OF_PINS_1 "You must pass an equal number of pins to DIPPINS {1}"
|
||||
#define MF_1_UNKNOWN_OBJECT_TYPE_1 "Unknown object type {1}"
|
||||
#define MF_2_INVALID_NUMBER_CONVERSION_1_2 "Invalid number conversion {1} : {2}"
|
||||
#define MF_1_ADDING_PARAMETER_1_TO_PARAMETER_LIST "Error adding parameter {1} to parameter list"
|
||||
#define MF_2_ADDING_1_2_TO_TERMINAL_LIST "Error adding {1} {2} to terminal list"
|
||||
#define MF_2_NET_C_NEEDS_AT_LEAST_2_TERMINAL "You must pass at least 2 terminals to NET_C"
|
||||
#define MF_1_FOUND_NO_OCCURRENCE_OF_1 "Found no occurrence of {1}"
|
||||
#define MF_2_TERMINAL_1_2_NOT_FOUND "Alias {1} was resolved to be terminal {2}. Terminal {2} was not found."
|
||||
#define MF_2_OBJECT_1_2_WRONG_TYPE "object {1}({2}) found but wrong type"
|
||||
#define MF_2_PARAMETER_1_2_NOT_FOUND "parameter {1}({2}) not found!"
|
||||
#define MF_2_CONNECTING_1_TO_2 "Error connecting {1} to {2}"
|
||||
#define MF_2_MERGE_RAIL_NETS_1_AND_2 "Trying to merge two rail nets: {1} and {2}"
|
||||
#define MF_1_OBJECT_INPUT_TYPE_1 "Unable to determine input type of {1}"
|
||||
#define MF_1_OBJECT_OUTPUT_TYPE_1 "Unable to determine output type of {1}"
|
||||
#define MF_1_INPUT_1_ALREADY_CONNECTED "Input {1} already connected"
|
||||
#define MF_0_LINK_TRIES_EXCEEDED "Error connecting -- bailing out"
|
||||
#define MF_1_MODEL_NOT_FOUND "Model {1} not found"
|
||||
#define MF_1_MODEL_ERROR_1 "Model error {1}"
|
||||
#define MF_1_MODEL_ERROR_ON_PAIR_1 "Model error on pair {1}"
|
||||
#define MF_2_MODEL_PARAMETERS_NOT_UPPERCASE_1_2 "model parameters should be uppercase:{1} {2}"
|
||||
#define MF_2_ENTITY_1_NOT_FOUND_IN_MODEL_2 "Entity {1} not found in model {2}"
|
||||
#define MF_1_UNKNOWN_NUMBER_FACTOR_IN_1 "Unknown number factor in: {1}"
|
||||
#define MF_1_NOT_FOUND_IN_SOURCE_COLLECTION "unable to find {1} in sources collection"
|
||||
//PERRMSG(MF_1_CLASS_1_NOT_FOUND ,"Class {1} not found!")
|
||||
PERRMSGV(MF_UNABLE_TO_PARSE_MODEL_1, 1, "Unable to parse model: {1}")
|
||||
PERRMSGV(MF_MODEL_ALREADY_EXISTS_1, 1, "Model already exists: {1}")
|
||||
PERRMSGV(MF_DEVICE_ALREADY_EXISTS_1, 1, "Device already exists: {1}")
|
||||
PERRMSGV(MF_ADDING_ALI1_TO_ALIAS_LIST, 1, "Error adding alias {1} to alias list")
|
||||
PERRMSGV(MF_DIP_PINS_MUST_BE_AN_EQUAL_NUMBER_OF_PINS_1, 1,"You must pass an equal number of pins to DIPPINS {1}")
|
||||
PERRMSGV(MF_UNKNOWN_OBJECT_TYPE_1, 1, "Unknown object type {1}")
|
||||
PERRMSGV(MF_INVALID_NUMBER_CONVERSION_1_2, 2, "Invalid number conversion {1} : {2}")
|
||||
PERRMSGV(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST,1, "Error adding parameter {1} to parameter list")
|
||||
PERRMSGV(MF_ADDING_1_2_TO_TERMINAL_LIST, 2, "Error adding {1} {2} to terminal list")
|
||||
PERRMSGV(MF_NET_C_NEEDS_AT_LEAST_2_TERMINAL, 0, "You must pass at least 2 terminals to NET_C")
|
||||
PERRMSGV(MF_FOUND_NO_OCCURRENCE_OF_1, 1, "Found no occurrence of {1}")
|
||||
PERRMSGV(MF_TERMINAL_1_2_NOT_FOUND, 2, "Alias {1} was resolved to be terminal {2}. Terminal {2} was not found.")
|
||||
PERRMSGV(MF_OBJECT_1_2_WRONG_TYPE, 2, "object {1}({2}) found but wrong type")
|
||||
PERRMSGV(MF_PARAMETER_1_2_NOT_FOUND, 2, "parameter {1}({2}) not found!")
|
||||
PERRMSGV(MF_CONNECTING_1_TO_2, 2, "Error connecting {1} to {2}")
|
||||
PERRMSGV(MF_MERGE_RAIL_NETS_1_AND_2, 2, "Trying to merge two rail nets: {1} and {2}")
|
||||
PERRMSGV(MF_OBJECT_INPUT_TYPE_1, 1, "Unable to determine input type of {1}")
|
||||
PERRMSGV(MF_OBJECT_OUTPUT_TYPE_1, 1, "Unable to determine output type of {1}")
|
||||
PERRMSGV(MF_INPUT_1_ALREADY_CONNECTED, 1, "Input {1} already connected")
|
||||
PERRMSGV(MF_LINK_TRIES_EXCEEDED, 1, "Error connecting, {1} tries exceeded")
|
||||
PERRMSGV(MF_MODEL_NOT_FOUND, 1, "Model {1} not found")
|
||||
PERRMSGV(MF_MODEL_ERROR_1, 1, "Model error {1}")
|
||||
PERRMSGV(MF_MODEL_ERROR_ON_PAIR_1, 1, "Model error on pair {1}")
|
||||
PERRMSGV(MF_MODEL_PARAMETERS_NOT_UPPERCASE_1_2, 2, "Model parameters should be uppercase:{1} {2}")
|
||||
PERRMSGV(MF_ENTITY_1_NOT_FOUND_IN_MODEL_2, 2, "Entity {1} not found in model {2}")
|
||||
PERRMSGV(MF_UNKNOWN_NUMBER_FACTOR_IN_1, 1, "Unknown number factor in: {1}")
|
||||
PERRMSGV(MF_NOT_FOUND_IN_SOURCE_COLLECTION, 1, "unable to find {1} in sources collection")
|
||||
|
||||
#define MW_3_OVERWRITING_PARAM_1_OLD_2_NEW_3 "Overwriting {1} old <{2}> new <{3}>"
|
||||
#define MW_1_CONNECTING_1_TO_ITSELF "Connecting {1} to itself. This may be right, though"
|
||||
#define MI_1_DUMMY_1_WITHOUT_CONNECTIONS "Found dummy terminal {1} without connections"
|
||||
#define MI_1_ANALOG_OUTPUT_1_WITHOUT_CONNECTIONS "Found analog output {1} without connections"
|
||||
#define MI_1_LOGIC_OUTPUT_1_WITHOUT_CONNECTIONS "Found logic output {1} without connections"
|
||||
#define MW_1_LOGIC_INPUT_1_WITHOUT_CONNECTIONS "Found logic input {1} without connections"
|
||||
#define MW_1_TERMINAL_1_WITHOUT_CONNECTIONS "Found terminal {1} without connections"
|
||||
#define MI_3_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3 "Found device {1} connected only to railterminals {2}/{3}. Will be removed"
|
||||
#define MW_1_DATA_1_NOT_FOUND "unable to find data {1} in sources collection"
|
||||
PERRMSGV(MW_OVERWRITING_PARAM_1_OLD_2_NEW_3, 3, "Overwriting {1} old <{2}> new <{3}>")
|
||||
PERRMSGV(MW_CONNECTING_1_TO_ITSELF, 1, "Connecting {1} to itself. This may be right, though")
|
||||
PERRMSGV(MI_DUMMY_1_WITHOUT_CONNECTIONS, 1, "Found dummy terminal {1} without connections")
|
||||
PERRMSGV(MI_ANALOG_OUTPUT_1_WITHOUT_CONNECTIONS,1, "Found analog output {1} without connections")
|
||||
PERRMSGV(MI_LOGIC_OUTPUT_1_WITHOUT_CONNECTIONS, 1, "Found logic output {1} without connections")
|
||||
PERRMSGV(MW_LOGIC_INPUT_1_WITHOUT_CONNECTIONS, 1, "Found logic input {1} without connections")
|
||||
PERRMSGV(MW_TERMINAL_1_WITHOUT_CONNECTIONS, 1, "Found terminal {1} without connections")
|
||||
|
||||
PERRMSGV(MI_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3, 3, "Found device {1} connected only to railterminals {2}/{3}. Will be removed")
|
||||
|
||||
PERRMSGV(MW_DATA_1_NOT_FOUND, 1, "unable to find data {1} in sources collection")
|
||||
|
||||
// nld_mm5837.cpp
|
||||
|
||||
#define MW_1_FREQUENCY_OUTSIDE_OF_SPECS_1 "MM5837: Frequency outside of specs: {1}"
|
||||
PERRMSGV(MW_FREQUENCY_OUTSIDE_OF_SPECS_1, 1, "MM5837: Frequency outside of specs: {1}")
|
||||
|
||||
// nlid_proxy.cpp
|
||||
|
||||
#define MI_1_NO_POWER_TERMINALS_ON_DEVICE_1 "D/A Proxy: Found no valid combination of power terminals on device {1}"
|
||||
PERRMSGV(MI_NO_POWER_TERMINALS_ON_DEVICE_1, 1, "D/A Proxy: Found no valid combination of power terminals on device {1}")
|
||||
|
||||
|
||||
#endif /* NL_ERRSTR_H_ */
|
||||
|
@ -56,7 +56,7 @@ namespace netlist { namespace factory
|
||||
{
|
||||
for (auto & e : *this)
|
||||
if (e->name() == factory->name())
|
||||
m_log.fatal(MF_1_FACTORY_ALREADY_CONTAINS_1, factory->name());
|
||||
m_log.fatal(MF_FACTORY_ALREADY_CONTAINS_1(factory->name()));
|
||||
push_back(std::move(factory));
|
||||
}
|
||||
|
||||
@ -68,7 +68,7 @@ namespace netlist { namespace factory
|
||||
return e.get();
|
||||
}
|
||||
|
||||
m_log.fatal(MF_1_CLASS_1_NOT_FOUND, devname);
|
||||
m_log.fatal(MF_CLASS_1_NOT_FOUND(devname));
|
||||
return nullptr; // appease code analysis
|
||||
}
|
||||
|
||||
|
@ -68,7 +68,7 @@ bool parser_t::parse(const pstring &nlname)
|
||||
{
|
||||
require_token(m_tok_param_left);
|
||||
if (!in_nl)
|
||||
error (MF_0_UNEXPECTED_NETLIST_END);
|
||||
error (MF_UNEXPECTED_NETLIST_END());
|
||||
else
|
||||
{
|
||||
in_nl = false;
|
||||
@ -78,7 +78,7 @@ bool parser_t::parse(const pstring &nlname)
|
||||
else if (token.is(m_tok_NETLIST_START))
|
||||
{
|
||||
if (in_nl)
|
||||
error (MF_0_UNEXPECTED_NETLIST_START);
|
||||
error (MF_UNEXPECTED_NETLIST_START());
|
||||
require_token(m_tok_param_left);
|
||||
token_t name = get_token();
|
||||
require_token(m_tok_param_right);
|
||||
|
@ -43,8 +43,7 @@ namespace netlist
|
||||
{
|
||||
std::vector<pstring> list(plib::psplit(terms,", "));
|
||||
if (list.size() == 0 || (list.size() % 2) == 1)
|
||||
log().fatal(MF_1_DIP_PINS_MUST_BE_AN_EQUAL_NUMBER_OF_PINS_1,
|
||||
build_fqn(""));
|
||||
log().fatal(MF_DIP_PINS_MUST_BE_AN_EQUAL_NUMBER_OF_PINS_1(build_fqn("")));
|
||||
std::size_t n = list.size();
|
||||
for (std::size_t i = 0; i < n / 2; i++)
|
||||
{
|
||||
@ -57,14 +56,14 @@ namespace netlist
|
||||
{
|
||||
auto f = m_factory.factory_by_name(classname);
|
||||
if (f == nullptr)
|
||||
log().fatal(MF_1_CLASS_1_NOT_FOUND, classname);
|
||||
log().fatal(MF_CLASS_1_NOT_FOUND(classname));
|
||||
else
|
||||
{
|
||||
/* make sure we parse macro library entries */
|
||||
f->macro_actions(*this, name);
|
||||
pstring key = build_fqn(name);
|
||||
if (device_exists(key))
|
||||
log().fatal(MF_1_DEVICE_ALREADY_EXISTS_1, name);
|
||||
log().fatal(MF_DEVICE_ALREADY_EXISTS_1(name));
|
||||
else
|
||||
m_device_factory.insert(m_device_factory.end(), {key, f});
|
||||
}
|
||||
@ -79,7 +78,7 @@ namespace netlist
|
||||
{
|
||||
std::vector<pstring> list(plib::psplit(terms,", "));
|
||||
if (list.size() < 2)
|
||||
log().fatal(MF_2_NET_C_NEEDS_AT_LEAST_2_TERMINAL);
|
||||
log().fatal(MF_NET_C_NEEDS_AT_LEAST_2_TERMINAL());
|
||||
for (std::size_t i = 1; i < list.size(); i++)
|
||||
{
|
||||
register_link(list[0], list[i]);
|
||||
@ -93,7 +92,7 @@ namespace netlist
|
||||
if (source->parse(*this, netlist_name))
|
||||
return;
|
||||
}
|
||||
log().fatal(MF_1_NOT_FOUND_IN_SOURCE_COLLECTION, netlist_name);
|
||||
log().fatal(MF_NOT_FOUND_IN_SOURCE_COLLECTION(netlist_name));
|
||||
}
|
||||
|
||||
|
||||
@ -127,13 +126,12 @@ namespace netlist
|
||||
if (idx == m_param_values.end())
|
||||
{
|
||||
if (!m_param_values.insert({fqn, value}).second)
|
||||
log().fatal(MF_1_ADDING_PARAMETER_1_TO_PARAMETER_LIST,
|
||||
param);
|
||||
log().fatal(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST(param));
|
||||
}
|
||||
else
|
||||
{
|
||||
log().warning(MW_3_OVERWRITING_PARAM_1_OLD_2_NEW_3, fqn, idx->second,
|
||||
value);
|
||||
log().warning(MW_OVERWRITING_PARAM_1_OLD_2_NEW_3(fqn, idx->second,
|
||||
value));
|
||||
m_param_values[fqn] = value;
|
||||
}
|
||||
}
|
||||
@ -168,7 +166,7 @@ namespace netlist
|
||||
}
|
||||
}
|
||||
if (!found)
|
||||
log().fatal(MF_1_FOUND_NO_OCCURRENCE_OF_1, attach);
|
||||
log().fatal(MF_FOUND_NO_OCCURRENCE_OF_1(attach));
|
||||
register_link(attach, frontier_name + ".Q");
|
||||
}
|
||||
|
||||
@ -190,7 +188,7 @@ namespace netlist
|
||||
void nlparse_t::register_alias_nofqn(const pstring &alias, const pstring &out)
|
||||
{
|
||||
if (!m_alias.insert({alias, out}).second)
|
||||
log().fatal(MF_1_ADDING_ALI1_TO_ALIAS_LIST, alias);
|
||||
log().fatal(MF_ADDING_ALI1_TO_ALIAS_LIST(alias));
|
||||
}
|
||||
|
||||
void nlparse_t::register_link_fqn(const pstring &sin, const pstring &sout)
|
||||
@ -256,7 +254,7 @@ pstring setup_t::termtype_as_str(detail::core_terminal_t &in) const
|
||||
case detail::terminal_type::OUTPUT:
|
||||
return pstring("OUTPUT");
|
||||
}
|
||||
log().fatal(MF_1_UNKNOWN_OBJECT_TYPE_1, static_cast<unsigned>(in.type()));
|
||||
log().fatal(MF_UNKNOWN_OBJECT_TYPE_1(static_cast<unsigned>(in.type())));
|
||||
return pstring("Error");
|
||||
}
|
||||
|
||||
@ -273,8 +271,7 @@ void setup_t::register_term(detail::core_terminal_t &term)
|
||||
{
|
||||
if (!m_terminals.insert({term.name(), &term}).second)
|
||||
{
|
||||
log().fatal(MF_2_ADDING_1_2_TO_TERMINAL_LIST, termtype_as_str(term),
|
||||
term.name());
|
||||
log().fatal(MF_ADDING_1_2_TO_TERMINAL_LIST(termtype_as_str(term), term.name()));
|
||||
}
|
||||
log().debug("{1} {2}\n", termtype_as_str(term), term.name());
|
||||
}
|
||||
@ -296,7 +293,7 @@ void setup_t::remove_connections(const pstring &pin)
|
||||
link++;
|
||||
}
|
||||
if (!found)
|
||||
log().fatal(MF_1_FOUND_NO_OCCURRENCE_OF_1, pin);
|
||||
log().fatal(MF_FOUND_NO_OCCURRENCE_OF_1(pin));
|
||||
}
|
||||
|
||||
|
||||
@ -304,7 +301,7 @@ void setup_t::remove_connections(const pstring &pin)
|
||||
void setup_t::register_param_t(const pstring &name, param_t ¶m)
|
||||
{
|
||||
if (!m_params.insert({param.name(), param_ref_t(param.name(), param.device(), param)}).second)
|
||||
log().fatal(MF_1_ADDING_PARAMETER_1_TO_PARAMETER_LIST, name);
|
||||
log().fatal(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST(name));
|
||||
}
|
||||
|
||||
|
||||
@ -375,7 +372,7 @@ detail::core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, bool
|
||||
detail::core_terminal_t *term = (ret == m_terminals.end() ? nullptr : ret->second);
|
||||
|
||||
if (term == nullptr && required)
|
||||
log().fatal(MF_2_TERMINAL_1_2_NOT_FOUND, terminal_in, tname);
|
||||
log().fatal(MF_TERMINAL_1_2_NOT_FOUND(terminal_in, tname));
|
||||
if (term != nullptr)
|
||||
log().debug("Found input {1}\n", tname);
|
||||
return term;
|
||||
@ -393,14 +390,14 @@ detail::core_terminal_t *setup_t::find_terminal(const pstring &terminal_in,
|
||||
ret = m_terminals.find(tname + ".Q");
|
||||
}
|
||||
if (ret == m_terminals.end() && required)
|
||||
log().fatal(MF_2_TERMINAL_1_2_NOT_FOUND, terminal_in, tname);
|
||||
log().fatal(MF_TERMINAL_1_2_NOT_FOUND(terminal_in, tname));
|
||||
|
||||
detail::core_terminal_t *term = (ret == m_terminals.end() ? nullptr : ret->second);
|
||||
|
||||
if (term != nullptr && term->type() != atype)
|
||||
{
|
||||
if (required)
|
||||
log().fatal(MF_2_OBJECT_1_2_WRONG_TYPE, terminal_in, tname);
|
||||
log().fatal(MF_OBJECT_1_2_WRONG_TYPE(terminal_in, tname));
|
||||
else
|
||||
term = nullptr;
|
||||
}
|
||||
@ -417,7 +414,7 @@ param_t *setup_t::find_param(const pstring ¶m_in, bool required) const
|
||||
const pstring &outname = resolve_alias(param_in_fqn);
|
||||
auto ret = m_params.find(outname);
|
||||
if (ret == m_params.end() && required)
|
||||
log().fatal(MF_2_PARAMETER_1_2_NOT_FOUND, param_in_fqn, outname);
|
||||
log().fatal(MF_PARAMETER_1_2_NOT_FOUND(param_in_fqn, outname));
|
||||
if (ret != m_params.end())
|
||||
log().debug("Found parameter {1}\n", outname);
|
||||
return (ret == m_params.end() ? nullptr : &ret->second.m_param);
|
||||
@ -443,8 +440,8 @@ devices::nld_base_proxy *setup_t::get_d_a_proxy(detail::core_terminal_t &out)
|
||||
{
|
||||
p->clear_net(); // de-link from all nets ...
|
||||
if (!connect(new_proxy->proxy_term(), *p))
|
||||
log().fatal(MF_2_CONNECTING_1_TO_2,
|
||||
new_proxy->proxy_term().name(), (*p).name());
|
||||
log().fatal(MF_CONNECTING_1_TO_2(
|
||||
new_proxy->proxy_term().name(), (*p).name()));
|
||||
}
|
||||
out.net().core_terms().clear(); // clear the list
|
||||
|
||||
@ -486,8 +483,8 @@ devices::nld_base_proxy *setup_t::get_a_d_proxy(detail::core_terminal_t &inp)
|
||||
{
|
||||
p->clear_net(); // de-link from all nets ...
|
||||
if (!connect(ret->proxy_term(), *p))
|
||||
log().fatal(MF_2_CONNECTING_1_TO_2,
|
||||
ret->proxy_term().name(), (*p).name());
|
||||
log().fatal(MF_CONNECTING_1_TO_2(
|
||||
ret->proxy_term().name(), (*p).name()));
|
||||
}
|
||||
inp.net().core_terms().clear(); // clear the list
|
||||
}
|
||||
@ -502,13 +499,12 @@ void setup_t::merge_nets(detail::net_t &thisnet, detail::net_t &othernet)
|
||||
log().debug("merging nets ...\n");
|
||||
if (&othernet == &thisnet)
|
||||
{
|
||||
log().warning(MW_1_CONNECTING_1_TO_ITSELF, thisnet.name());
|
||||
log().warning(MW_CONNECTING_1_TO_ITSELF(thisnet.name()));
|
||||
return; // Nothing to do
|
||||
}
|
||||
|
||||
if (thisnet.isRailNet() && othernet.isRailNet())
|
||||
log().fatal(MF_2_MERGE_RAIL_NETS_1_AND_2,
|
||||
thisnet.name(), othernet.name());
|
||||
log().fatal(MF_MERGE_RAIL_NETS_1_AND_2(thisnet.name(), othernet.name()));
|
||||
|
||||
if (othernet.isRailNet())
|
||||
{
|
||||
@ -566,7 +562,7 @@ void setup_t::connect_terminal_input(terminal_t &term, detail::core_terminal_t &
|
||||
}
|
||||
else
|
||||
{
|
||||
log().fatal(MF_1_OBJECT_INPUT_TYPE_1, inp.name());
|
||||
log().fatal(MF_OBJECT_INPUT_TYPE_1(inp.name()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -590,7 +586,7 @@ void setup_t::connect_terminal_output(terminal_t &in, detail::core_terminal_t &o
|
||||
}
|
||||
else
|
||||
{
|
||||
log().fatal(MF_1_OBJECT_OUTPUT_TYPE_1, out.name());
|
||||
log().fatal(MF_OBJECT_OUTPUT_TYPE_1(out.name()));
|
||||
}
|
||||
}
|
||||
|
||||
@ -681,13 +677,13 @@ bool setup_t::connect(detail::core_terminal_t &t1_in, detail::core_terminal_t &t
|
||||
if (t1.is_type(detail::terminal_type::OUTPUT) && t2.is_type(detail::terminal_type::INPUT))
|
||||
{
|
||||
if (t2.has_net() && t2.net().isRailNet())
|
||||
log().fatal(MF_1_INPUT_1_ALREADY_CONNECTED, t2.name());
|
||||
log().fatal(MF_INPUT_1_ALREADY_CONNECTED(t2.name()));
|
||||
connect_input_output(t2, t1);
|
||||
}
|
||||
else if (t1.is_type(detail::terminal_type::INPUT) && t2.is_type(detail::terminal_type::OUTPUT))
|
||||
{
|
||||
if (t1.has_net() && t1.net().isRailNet())
|
||||
log().fatal(MF_1_INPUT_1_ALREADY_CONNECTED, t1.name());
|
||||
log().fatal(MF_INPUT_1_ALREADY_CONNECTED(t1.name()));
|
||||
connect_input_output(t1, t2);
|
||||
}
|
||||
else if (t1.is_type(detail::terminal_type::OUTPUT) && t2.is_type(detail::terminal_type::TERMINAL))
|
||||
@ -750,9 +746,9 @@ void setup_t::resolve_inputs()
|
||||
if (tries == 0)
|
||||
{
|
||||
for (auto & link : m_links)
|
||||
log().warning(MF_2_CONNECTING_1_TO_2, link.first, link.second);
|
||||
log().warning(MF_CONNECTING_1_TO_2(link.first, link.second));
|
||||
|
||||
log().fatal(MF_0_LINK_TRIES_EXCEEDED);
|
||||
log().fatal(MF_LINK_TRIES_EXCEEDED(NL_MAX_LINK_RESOLVE_LOOPS));
|
||||
}
|
||||
|
||||
log().verbose("deleting empty nets ...");
|
||||
@ -768,19 +764,19 @@ void setup_t::resolve_inputs()
|
||||
{
|
||||
detail::core_terminal_t *term = i.second;
|
||||
if (!term->has_net() && dynamic_cast< devices::NETLIB_NAME(dummy_input) *>(&term->device()) != nullptr)
|
||||
log().info(MI_1_DUMMY_1_WITHOUT_CONNECTIONS, term->name());
|
||||
log().info(MI_DUMMY_1_WITHOUT_CONNECTIONS(term->name()));
|
||||
else if (!term->has_net())
|
||||
errstr += plib::pfmt("Found terminal {1} without a net\n")(term->name());
|
||||
else if (term->net().num_cons() == 0)
|
||||
{
|
||||
if (term->is_logic_input())
|
||||
log().warning(MW_1_LOGIC_INPUT_1_WITHOUT_CONNECTIONS, term->name());
|
||||
log().warning(MW_LOGIC_INPUT_1_WITHOUT_CONNECTIONS(term->name()));
|
||||
else if (term->is_logic_output())
|
||||
log().info(MI_1_LOGIC_OUTPUT_1_WITHOUT_CONNECTIONS, term->name());
|
||||
log().info(MI_LOGIC_OUTPUT_1_WITHOUT_CONNECTIONS(term->name()));
|
||||
else if (term->is_analog_output())
|
||||
log().info(MI_1_ANALOG_OUTPUT_1_WITHOUT_CONNECTIONS, term->name());
|
||||
log().info(MI_ANALOG_OUTPUT_1_WITHOUT_CONNECTIONS(term->name()));
|
||||
else
|
||||
log().warning(MW_1_TERMINAL_1_WITHOUT_CONNECTIONS, term->name());
|
||||
log().warning(MW_TERMINAL_1_WITHOUT_CONNECTIONS(term->name()));
|
||||
}
|
||||
}
|
||||
//FIXME: error string handling
|
||||
@ -826,11 +822,11 @@ void models_t::register_model(pstring model_in)
|
||||
{
|
||||
auto pos = model_in.find(" ");
|
||||
if (pos == pstring::npos)
|
||||
throw nl_exception(MF_1_UNABLE_TO_PARSE_MODEL_1, model_in);
|
||||
throw nl_exception(MF_UNABLE_TO_PARSE_MODEL_1(model_in));
|
||||
pstring model = plib::ucase(plib::trim(plib::left(model_in, pos)));
|
||||
pstring def = plib::trim(model_in.substr(pos + 1));
|
||||
if (!m_models.insert({model, def}).second)
|
||||
throw nl_exception(MF_1_MODEL_ALREADY_EXISTS_1, model_in);
|
||||
throw nl_exception(MF_MODEL_ALREADY_EXISTS_1(model_in));
|
||||
}
|
||||
|
||||
void models_t::model_parse(const pstring &model_in, model_map_t &map)
|
||||
@ -847,7 +843,7 @@ void models_t::model_parse(const pstring &model_in, model_map_t &map)
|
||||
key = plib::ucase(model);
|
||||
auto i = m_models.find(key);
|
||||
if (i == m_models.end())
|
||||
throw nl_exception(MF_1_MODEL_NOT_FOUND, model);
|
||||
throw nl_exception(MF_MODEL_NOT_FOUND(model));
|
||||
model = i->second;
|
||||
}
|
||||
pstring xmodel = plib::left(model, pos);
|
||||
@ -860,12 +856,12 @@ void models_t::model_parse(const pstring &model_in, model_map_t &map)
|
||||
if (i != m_models.end())
|
||||
model_parse(xmodel, map);
|
||||
else
|
||||
throw nl_exception(MF_1_MODEL_NOT_FOUND, model_in);
|
||||
throw nl_exception(MF_MODEL_NOT_FOUND(model_in));
|
||||
}
|
||||
|
||||
pstring remainder = plib::trim(model.substr(pos + 1));
|
||||
if (!plib::endsWith(remainder, ")"))
|
||||
throw nl_exception(MF_1_MODEL_ERROR_1, model);
|
||||
throw nl_exception(MF_MODEL_ERROR_1(model));
|
||||
// FIMXE: Not optimal
|
||||
remainder = plib::left(remainder, remainder.size() - 1);
|
||||
|
||||
@ -874,7 +870,7 @@ void models_t::model_parse(const pstring &model_in, model_map_t &map)
|
||||
{
|
||||
auto pose = pe.find("=");
|
||||
if (pose == pstring::npos)
|
||||
throw nl_exception(MF_1_MODEL_ERROR_ON_PAIR_1, model);
|
||||
throw nl_exception(MF_MODEL_ERROR_ON_PAIR_1(model));
|
||||
map[plib::ucase(plib::left(pe, pose))] = pe.substr(pose + 1);
|
||||
}
|
||||
}
|
||||
@ -898,10 +894,9 @@ pstring models_t::value_str(pstring model, pstring entity)
|
||||
pstring ret;
|
||||
|
||||
if (entity != plib::ucase(entity))
|
||||
throw nl_exception(MF_2_MODEL_PARAMETERS_NOT_UPPERCASE_1_2, entity,
|
||||
model_string(map));
|
||||
throw nl_exception(MF_MODEL_PARAMETERS_NOT_UPPERCASE_1_2(entity, model_string(map)));
|
||||
if (map.find(entity) == map.end())
|
||||
throw nl_exception(MF_2_ENTITY_1_NOT_FOUND_IN_MODEL_2, entity, model_string(map));
|
||||
throw nl_exception(MF_ENTITY_1_NOT_FOUND_IN_MODEL_2(entity, model_string(map)));
|
||||
else
|
||||
ret = map[entity];
|
||||
|
||||
@ -932,7 +927,7 @@ nl_double models_t::value(pstring model, pstring entity)
|
||||
case 'a': factor = 1e-18; break;
|
||||
default:
|
||||
if (*p < '0' || *p > '9')
|
||||
throw nl_exception(MF_1_UNKNOWN_NUMBER_FACTOR_IN_1, entity);
|
||||
throw nl_exception(MF_UNKNOWN_NUMBER_FACTOR_IN_1(entity));
|
||||
}
|
||||
if (factor != plib::constants<nl_double>::one())
|
||||
tmp = plib::left(tmp, tmp.size() - 1);
|
||||
@ -1005,7 +1000,7 @@ plib::unique_ptr<plib::pistream> setup_t::get_data_stream(const pstring &name)
|
||||
return strm;
|
||||
}
|
||||
}
|
||||
log().warning(MW_1_DATA_1_NOT_FOUND, name);
|
||||
log().warning(MW_DATA_1_NOT_FOUND(name));
|
||||
return plib::unique_ptr<plib::pistream>(nullptr);
|
||||
}
|
||||
|
||||
@ -1100,7 +1095,7 @@ void setup_t::prepare_to_run()
|
||||
//FIXME: check for errors ...
|
||||
auto v = plib::pstonum<double>(p->second);
|
||||
if (std::abs(v - std::floor(v)) > 1e-6 )
|
||||
log().fatal(MF_1_HND_VAL_NOT_SUPPORTED, p->second);
|
||||
log().fatal(MF_HND_VAL_NOT_SUPPORTED(p->second));
|
||||
d.second->set_hint_deactivate(v == 0.0);
|
||||
}
|
||||
}
|
||||
@ -1116,8 +1111,8 @@ void setup_t::prepare_to_run()
|
||||
{
|
||||
if (t->m_N.net().isRailNet() && t->m_P.net().isRailNet())
|
||||
{
|
||||
log().info(MI_3_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3,
|
||||
t->name(), t->m_N.net().name(), t->m_P.net().name());
|
||||
log().info(MI_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3(
|
||||
t->name(), t->m_N.net().name(), t->m_P.net().name()));
|
||||
t->m_N.net().remove_terminal(t->m_N);
|
||||
t->m_P.net().remove_terminal(t->m_P);
|
||||
m_nlstate.remove_dev(t);
|
||||
@ -1130,7 +1125,7 @@ void setup_t::prepare_to_run()
|
||||
{
|
||||
for (auto &p : m_nlstate.nets())
|
||||
if (p->is_analog())
|
||||
log().fatal(MF_0_NO_SOLVER);
|
||||
log().fatal(MF_NO_SOLVER());
|
||||
}
|
||||
else
|
||||
solver->post_start();
|
||||
|
@ -191,6 +191,12 @@ public:
|
||||
return format_element(ptype_traits<T *>::size_spec(), ptype_traits<T *>::fmt_spec(), ptype_traits<T *>::cast(x));
|
||||
}
|
||||
|
||||
pfmt &operator ()()
|
||||
{
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
template<typename X, typename Y, typename... Args>
|
||||
pfmt &operator()(X&& x, Y && y, Args&&... args)
|
||||
{
|
||||
|
@ -127,8 +127,7 @@ namespace devices
|
||||
}
|
||||
break;
|
||||
case detail::terminal_type::OUTPUT:
|
||||
log().fatal(MF_1_UNHANDLED_ELEMENT_1_FOUND,
|
||||
p->name());
|
||||
log().fatal(MF_UNHANDLED_ELEMENT_1_FOUND(p->name()));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -438,7 +437,7 @@ namespace devices
|
||||
// reschedule ....
|
||||
if (this_resched > 1 && !m_Q_sync.net().is_queued())
|
||||
{
|
||||
log().warning(MW_1_NEWTON_LOOPS_EXCEEDED_ON_NET_1, this->name());
|
||||
log().warning(MW_NEWTON_LOOPS_EXCEEDED_ON_NET_1(this->name()));
|
||||
m_Q_sync.net().toggle_and_push_to_queue(m_params.m_nr_recalc_delay);
|
||||
}
|
||||
}
|
||||
@ -554,7 +553,7 @@ namespace devices
|
||||
else // if (ot<0)
|
||||
{
|
||||
m_rails_temp[k]->add(term, ot, true);
|
||||
log().fatal(MF_1_FOUND_TERM_WITH_MISSING_OTHERNET, term->name());
|
||||
log().fatal(MF_FOUND_TERM_WITH_MISSING_OTHERNET(term->name()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -160,7 +160,7 @@ namespace devices
|
||||
}
|
||||
else
|
||||
{
|
||||
log().fatal(MF_1_UNKNOWN_SOLVER_TYPE, m_method());
|
||||
log().fatal(MF_UNKNOWN_SOLVER_TYPE(m_method()));
|
||||
return pool_owned_ptr<matrix_solver_t>();
|
||||
}
|
||||
}
|
||||
@ -358,7 +358,7 @@ namespace devices
|
||||
#endif
|
||||
#endif
|
||||
default:
|
||||
log().info(MI_1_NO_SPECIFIC_SOLVER, net_count);
|
||||
log().info(MI_NO_SPECIFIC_SOLVER(net_count));
|
||||
if (net_count <= 8)
|
||||
{
|
||||
ms = create_solver<double, -8>(net_count, sname);
|
||||
@ -383,7 +383,7 @@ namespace devices
|
||||
}
|
||||
else
|
||||
{
|
||||
log().fatal(MF_1_NETGROUP_SIZE_EXCEEDED_1, 128);
|
||||
log().fatal(MF_NETGROUP_SIZE_EXCEEDED_1(128));
|
||||
return; /* tease compilers */
|
||||
}
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user