summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/nl_setup.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/nl_setup.cpp')
-rw-r--r--src/lib/netlist/nl_setup.cpp274
1 files changed, 130 insertions, 144 deletions
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index 21b2c0e8999..5cda3e03d64 100644
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -36,10 +36,10 @@ namespace netlist
void nlparse_t::register_dip_alias_arr(const pstring &terms)
{
std::vector<pstring> list(plib::psplit(terms,", "));
- if (list.size() == 0 || (list.size() % 2) == 1)
+ if (list.empty() || (list.size() % 2) == 1)
{
log().fatal(MF_DIP_PINS_MUST_BE_AN_EQUAL_NUMBER_OF_PINS_1(build_fqn("")));
- plib::pthrow<nl_exception>(MF_DIP_PINS_MUST_BE_AN_EQUAL_NUMBER_OF_PINS_1(build_fqn("")));
+ throw nl_exception(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++)
@@ -80,7 +80,7 @@ namespace netlist
register_dev(classname, name);
- if (params_and_connections.size() > 0)
+ if (!params_and_connections.empty())
{
auto ptok(params_and_connections.begin());
auto ptok_end(params_and_connections.end());
@@ -94,7 +94,7 @@ namespace netlist
{
auto err(MF_PARAM_COUNT_MISMATCH_2(name, params_and_connections.size()));
log().fatal(err);
- plib::pthrow<nl_exception>(err);
+ throw nl_exception(err);
//break;
}
pstring output_name = *ptok;
@@ -116,16 +116,14 @@ namespace netlist
{
auto err(MF_PARAM_COUNT_MISMATCH_2(name, params_and_connections.size()));
log().fatal(err);
- plib::pthrow<nl_exception>(err);
+ throw nl_exception(err);
}
pstring paramfq = name + "." + tp;
log().debug("Defparam: {1}\n", paramfq);
- // remove quotes
- if (plib::startsWith(*ptok, "\"") && plib::endsWith(*ptok, "\""))
- register_param(paramfq, ptok->substr(1, ptok->length() - 2));
- else
- register_param(paramfq, *ptok);
+
+ register_param(paramfq, *ptok);
+
++ptok;
}
}
@@ -133,7 +131,7 @@ namespace netlist
{
auto err(MF_PARAM_COUNT_EXCEEDED_2(name, params_and_connections.size()));
log().fatal(err);
- plib::pthrow<nl_exception>(err);
+ throw nl_exception(err);
}
}
}
@@ -144,21 +142,19 @@ namespace netlist
if (f == nullptr)
{
log().fatal(MF_CLASS_1_NOT_FOUND(classname));
- plib::pthrow<nl_exception>(MF_CLASS_1_NOT_FOUND(classname));
+ throw nl_exception(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))
{
- // make sure we parse macro library entries
- f->macro_actions(*this, name);
- pstring key = build_fqn(name);
- if (device_exists(key))
- {
- log().fatal(MF_DEVICE_ALREADY_EXISTS_1(name));
- plib::pthrow<nl_exception>(MF_DEVICE_ALREADY_EXISTS_1(name));
- }
- else
- m_device_factory.insert(m_device_factory.end(), {key, f});
+ log().fatal(MF_DEVICE_ALREADY_EXISTS_1(name));
+ throw nl_exception(MF_DEVICE_ALREADY_EXISTS_1(name));
}
+
+ m_device_factory.insert(m_device_factory.end(), {key, f});
}
void nlparse_t::register_link(const pstring &sin, const pstring &sout)
@@ -172,7 +168,7 @@ namespace netlist
if (list.size() < 2)
{
log().fatal(MF_NET_C_NEEDS_AT_LEAST_2_TERMINAL());
- plib::pthrow<nl_exception>(MF_NET_C_NEEDS_AT_LEAST_2_TERMINAL());
+ throw nl_exception(MF_NET_C_NEEDS_AT_LEAST_2_TERMINAL());
}
for (std::size_t i = 1; i < list.size(); i++)
{
@@ -188,7 +184,7 @@ namespace netlist
}))
return;
log().fatal(MF_NOT_FOUND_IN_SOURCE_COLLECTION(netlist_name));
- plib::pthrow<nl_exception>(MF_NOT_FOUND_IN_SOURCE_COLLECTION(netlist_name));
+ throw nl_exception(MF_NOT_FOUND_IN_SOURCE_COLLECTION(netlist_name));
}
@@ -218,21 +214,26 @@ namespace netlist
void nlparse_t::register_param(const pstring &param, const pstring &value)
{
pstring fqn = build_fqn(param);
+ pstring val(value);
+
+ // strip " from stringified strings
+ if (plib::startsWith(value, "\"") && plib::endsWith(value, "\""))
+ val = value.substr(1, value.length() - 2);
auto idx = m_param_values.find(fqn);
if (idx == m_param_values.end())
{
- if (!m_param_values.insert({fqn, value}).second)
+ if (!m_param_values.insert({fqn, val}).second)
{
log().fatal(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST(param));
- plib::pthrow<nl_exception>(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST(param));
+ throw nl_exception(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST(param));
}
}
else
{
log().warning(MW_OVERWRITING_PARAM_1_OLD_2_NEW_3(fqn, idx->second,
- value));
- m_param_values[fqn] = value;
+ val));
+ m_param_values[fqn] = val;
}
}
@@ -241,7 +242,7 @@ namespace netlist
m_factory.register_device(plib::make_unique<factory::library_element_t>(name, name, "", sourcefile));
}
- void nlparse_t::register_frontier(const pstring &attach, const nl_fptype r_IN, const nl_fptype r_OUT)
+ void nlparse_t::register_frontier(const pstring &attach, const pstring &r_IN, const pstring &r_OUT)
{
pstring frontier_name = plib::pfmt("frontier_{1}")(m_frontier_cnt);
m_frontier_cnt++;
@@ -268,7 +269,7 @@ namespace netlist
if (!found)
{
log().fatal(MF_FOUND_NO_OCCURRENCE_OF_1(attach));
- plib::pthrow<nl_exception>(MF_FOUND_NO_OCCURRENCE_OF_1(attach));
+ throw nl_exception(MF_FOUND_NO_OCCURRENCE_OF_1(attach));
}
register_link(attach, frontier_name + ".Q");
}
@@ -281,11 +282,8 @@ namespace netlist
pstring nlparse_t::build_fqn(const pstring &obj_name) const
{
- if (m_namespace_stack.empty())
- //return netlist().name() + "." + obj_name;
- return obj_name;
- else
- return m_namespace_stack.top() + "." + obj_name;
+ return (m_namespace_stack.empty()) ? obj_name
+ : m_namespace_stack.top() + "." + obj_name;
}
void nlparse_t::register_alias_nofqn(const pstring &alias, const pstring &out)
@@ -293,7 +291,7 @@ namespace netlist
if (!m_alias.insert({alias, out}).second)
{
log().fatal(MF_ADDING_ALI1_TO_ALIAS_LIST(alias));
- plib::pthrow<nl_exception>(MF_ADDING_ALI1_TO_ALIAS_LIST(alias));
+ throw nl_exception(MF_ADDING_ALI1_TO_ALIAS_LIST(alias));
}
}
@@ -343,7 +341,7 @@ setup_t::setup_t(netlist_state_t &nlstate)
{
}
-pstring setup_t::termtype_as_str(detail::core_terminal_t &in) const
+pstring setup_t::termtype_as_str(detail::core_terminal_t &in)
{
switch (in.type())
{
@@ -362,10 +360,7 @@ pstring setup_t::termtype_as_str(detail::core_terminal_t &in) const
pstring setup_t::get_initial_param_val(const pstring &name, const pstring &def) const
{
auto i = m_param_values.find(name);
- if (i != m_param_values.end())
- return i->second;
- else
- return def;
+ return (i != m_param_values.end()) ? i->second : def;
}
void setup_t::register_term(detail::core_terminal_t &term)
@@ -374,10 +369,16 @@ void setup_t::register_term(detail::core_terminal_t &term)
if (!m_terminals.insert({term.name(), &term}).second)
{
log().fatal(MF_ADDING_1_2_TO_TERMINAL_LIST(termtype_as_str(term), term.name()));
- plib::pthrow<nl_exception>(MF_ADDING_1_2_TO_TERMINAL_LIST(termtype_as_str(term), term.name()));
+ throw nl_exception(MF_ADDING_1_2_TO_TERMINAL_LIST(termtype_as_str(term), term.name()));
}
}
+void setup_t::register_term(terminal_t &term, terminal_t &other_term)
+{
+ this->register_term(term);
+ m_connected_terminals.insert({&term, &other_term});
+}
+
void setup_t::remove_connections(const pstring &pin)
{
pstring pinfn = build_fqn(pin);
@@ -397,7 +398,7 @@ void setup_t::remove_connections(const pstring &pin)
if (!found)
{
log().fatal(MF_FOUND_NO_OCCURRENCE_OF_1(pin));
- plib::pthrow<nl_exception>(MF_FOUND_NO_OCCURRENCE_OF_1(pin));
+ throw nl_exception(MF_FOUND_NO_OCCURRENCE_OF_1(pin));
}
}
@@ -406,7 +407,7 @@ void setup_t::register_param_t(const pstring &name, param_t &param)
if (!m_params.insert({param.name(), param_ref_t(param.name(), param.device(), param)}).second)
{
log().fatal(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST(name));
- plib::pthrow<nl_exception>(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST(name));
+ throw nl_exception(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST(name));
}
}
@@ -502,7 +503,7 @@ detail::core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, bool
if (term == nullptr && required)
{
log().fatal(MF_TERMINAL_1_2_NOT_FOUND(terminal_in, tname));
- plib::pthrow<nl_exception>(MF_TERMINAL_1_2_NOT_FOUND(terminal_in, tname));
+ throw nl_exception(MF_TERMINAL_1_2_NOT_FOUND(terminal_in, tname));
}
if (term != nullptr)
{
@@ -527,7 +528,7 @@ detail::core_terminal_t *setup_t::find_terminal(const pstring &terminal_in,
if (ret == m_terminals.end() && required)
{
log().fatal(MF_TERMINAL_1_2_NOT_FOUND(terminal_in, tname));
- plib::pthrow<nl_exception>(MF_TERMINAL_1_2_NOT_FOUND(terminal_in, tname));
+ throw nl_exception(MF_TERMINAL_1_2_NOT_FOUND(terminal_in, tname));
}
detail::core_terminal_t *term = (ret == m_terminals.end() ? nullptr : ret->second);
@@ -536,10 +537,10 @@ detail::core_terminal_t *setup_t::find_terminal(const pstring &terminal_in,
if (required)
{
log().fatal(MF_OBJECT_1_2_WRONG_TYPE(terminal_in, tname));
- plib::pthrow<nl_exception>(MF_OBJECT_1_2_WRONG_TYPE(terminal_in, tname));
+ throw nl_exception(MF_OBJECT_1_2_WRONG_TYPE(terminal_in, tname));
}
- else
- term = nullptr;
+
+ term = nullptr;
}
if (term != nullptr)
log().debug("Found input {1}\n", tname);
@@ -556,7 +557,7 @@ param_t *setup_t::find_param(const pstring &param_in, bool required) const
if (ret == m_params.end() && required)
{
log().fatal(MF_PARAMETER_1_2_NOT_FOUND(param_in_fqn, outname));
- plib::pthrow<nl_exception>(MF_PARAMETER_1_2_NOT_FOUND(param_in_fqn, outname));
+ throw nl_exception(MF_PARAMETER_1_2_NOT_FOUND(param_in_fqn, outname));
}
if (ret != m_params.end())
log().debug("Found parameter {1}\n", outname);
@@ -570,39 +571,38 @@ devices::nld_base_proxy *setup_t::get_d_a_proxy(detail::core_terminal_t &out)
auto &out_cast = static_cast<logic_output_t &>(out);
auto iter_proxy(m_proxies.find(&out));
- if (iter_proxy == m_proxies.end())
- {
- // create a new one ...
- pstring x = plib::pfmt("proxy_da_{1}_{2}")(out.name())(m_proxy_cnt);
- auto new_proxy =
- out_cast.logic_family()->create_d_a_proxy(m_nlstate, x, &out_cast);
- m_proxy_cnt++;
- // connect all existing terminals to new net
+ if (iter_proxy != m_proxies.end())
+ return iter_proxy->second;
- for (auto & p : out.net().core_terms())
+ // create a new one ...
+ pstring x = plib::pfmt("proxy_da_{1}_{2}")(out.name())(m_proxy_cnt);
+ auto new_proxy =
+ out_cast.logic_family()->create_d_a_proxy(m_nlstate, x, &out_cast);
+ m_proxy_cnt++;
+ // connect all existing terminals to new net
+
+ for (auto & p : out.net().core_terms())
+ {
+ p->clear_net(); // de-link from all nets ...
+ if (!connect(new_proxy->proxy_term(), *p))
{
- p->clear_net(); // de-link from all nets ...
- if (!connect(new_proxy->proxy_term(), *p))
- {
- log().fatal(MF_CONNECTING_1_TO_2(
- new_proxy->proxy_term().name(), (*p).name()));
- plib::pthrow<nl_exception>(MF_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()));
+ throw nl_exception(MF_CONNECTING_1_TO_2(
+ new_proxy->proxy_term().name(), (*p).name()));
}
- out.net().core_terms().clear();
+ }
+ out.net().core_terms().clear();
- out.net().add_terminal(new_proxy->in());
+ out.net().add_terminal(new_proxy->in());
- auto proxy(new_proxy.get());
- if (!m_proxies.insert({&out, proxy}).second)
- plib::pthrow<nl_exception>(MF_DUPLICATE_PROXY_1(out.name()));
+ auto proxy(new_proxy.get());
+ if (!m_proxies.insert({&out, proxy}).second)
+ throw nl_exception(MF_DUPLICATE_PROXY_1(out.name()));
+
+ m_nlstate.register_device(new_proxy->name(), std::move(new_proxy));
+ return proxy;
- m_nlstate.register_device(new_proxy->name(), std::move(new_proxy));
- return proxy;
- }
- else
- return iter_proxy->second;
}
devices::nld_base_proxy *setup_t::get_a_d_proxy(detail::core_terminal_t &inp)
@@ -615,42 +615,40 @@ devices::nld_base_proxy *setup_t::get_a_d_proxy(detail::core_terminal_t &inp)
if (iter_proxy != m_proxies.end())
return iter_proxy->second;
- else
- {
- log().debug("connect_terminal_input: connecting proxy\n");
- pstring x = plib::pfmt("proxy_ad_{1}_{2}")(inp.name())(m_proxy_cnt);
- auto new_proxy = incast.logic_family()->create_a_d_proxy(m_nlstate, x, &incast);
- //auto new_proxy = plib::owned_ptr<devices::nld_a_to_d_proxy>::Create(netlist(), x, &incast);
- auto ret(new_proxy.get());
+ log().debug("connect_terminal_input: connecting proxy\n");
+ pstring x = plib::pfmt("proxy_ad_{1}_{2}")(inp.name())(m_proxy_cnt);
+ auto new_proxy = incast.logic_family()->create_a_d_proxy(m_nlstate, x, &incast);
+ //auto new_proxy = plib::owned_ptr<devices::nld_a_to_d_proxy>::Create(netlist(), x, &incast);
- if (!m_proxies.insert({&inp, ret}).second)
- plib::pthrow<nl_exception>(MF_DUPLICATE_PROXY_1(inp.name()));
+ auto ret(new_proxy.get());
- m_proxy_cnt++;
+ if (!m_proxies.insert({&inp, ret}).second)
+ throw nl_exception(MF_DUPLICATE_PROXY_1(inp.name()));
- // connect all existing terminals to new net
+ m_proxy_cnt++;
- if (inp.has_net())
+ // connect all existing terminals to new net
+
+ if (inp.has_net())
+ {
+ for (auto & p : inp.net().core_terms())
{
- for (auto & p : inp.net().core_terms())
+ p->clear_net(); // de-link from all nets ...
+ if (!connect(ret->proxy_term(), *p))
{
- p->clear_net(); // de-link from all nets ...
- if (!connect(ret->proxy_term(), *p))
- {
- log().fatal(MF_CONNECTING_1_TO_2(
- ret->proxy_term().name(), (*p).name()));
- plib::pthrow<nl_exception>(MF_CONNECTING_1_TO_2(
- ret->proxy_term().name(), (*p).name()));
+ log().fatal(MF_CONNECTING_1_TO_2(
+ ret->proxy_term().name(), (*p).name()));
+ throw nl_exception(MF_CONNECTING_1_TO_2(
+ ret->proxy_term().name(), (*p).name()));
- }
}
- inp.net().core_terms().clear(); // clear the list
}
- ret->out().net().add_terminal(inp);
- m_nlstate.register_device(new_proxy->name(), std::move(new_proxy));
- return ret;
+ inp.net().core_terms().clear(); // clear the list
}
+ ret->out().net().add_terminal(inp);
+ m_nlstate.register_device(new_proxy->name(), std::move(new_proxy));
+ return ret;
}
detail::core_terminal_t &setup_t::resolve_proxy(detail::core_terminal_t &term)
@@ -677,7 +675,7 @@ void setup_t::merge_nets(detail::net_t &thisnet, detail::net_t &othernet)
if (thisnet.isRailNet() && othernet.isRailNet())
{
log().fatal(MF_MERGE_RAIL_NETS_1_AND_2(thisnet.name(), othernet.name()));
- plib::pthrow<nl_exception>(MF_MERGE_RAIL_NETS_1_AND_2(thisnet.name(), othernet.name()));
+ throw nl_exception(MF_MERGE_RAIL_NETS_1_AND_2(thisnet.name(), othernet.name()));
}
if (othernet.isRailNet())
@@ -737,7 +735,7 @@ void setup_t::connect_terminal_input(terminal_t &term, detail::core_terminal_t &
else
{
log().fatal(MF_OBJECT_INPUT_TYPE_1(inp.name()));
- plib::pthrow<nl_exception>(MF_OBJECT_INPUT_TYPE_1(inp.name()));
+ throw nl_exception(MF_OBJECT_INPUT_TYPE_1(inp.name()));
}
}
@@ -762,7 +760,7 @@ void setup_t::connect_terminal_output(terminal_t &in, detail::core_terminal_t &o
else
{
log().fatal(MF_OBJECT_OUTPUT_TYPE_1(out.name()));
- plib::pthrow<nl_exception>(MF_OBJECT_OUTPUT_TYPE_1(out.name()));
+ throw nl_exception(MF_OBJECT_OUTPUT_TYPE_1(out.name()));
}
}
@@ -844,7 +842,7 @@ bool setup_t::connect(detail::core_terminal_t &t1_in, detail::core_terminal_t &t
if (t2.has_net() && t2.net().isRailNet())
{
log().fatal(MF_INPUT_1_ALREADY_CONNECTED(t2.name()));
- plib::pthrow<nl_exception>(MF_INPUT_1_ALREADY_CONNECTED(t2.name()));
+ throw nl_exception(MF_INPUT_1_ALREADY_CONNECTED(t2.name()));
}
connect_input_output(t2, t1);
}
@@ -853,7 +851,7 @@ bool setup_t::connect(detail::core_terminal_t &t1_in, detail::core_terminal_t &t
if (t1.has_net() && t1.net().isRailNet())
{
log().fatal(MF_INPUT_1_ALREADY_CONNECTED(t1.name()));
- plib::pthrow<nl_exception>(MF_INPUT_1_ALREADY_CONNECTED(t1.name()));
+ throw nl_exception(MF_INPUT_1_ALREADY_CONNECTED(t1.name()));
}
connect_input_output(t1, t2);
}
@@ -895,7 +893,7 @@ void setup_t::resolve_inputs()
// after all other terminals were connected.
unsigned tries = m_netlist_params->m_max_link_loops();
- while (m_links.size() > 0 && tries > 0)
+ while (!m_links.empty() > 0 && tries > 0)
{
for (auto li = m_links.begin(); li != m_links.end(); )
@@ -919,7 +917,7 @@ void setup_t::resolve_inputs()
log().warning(MF_CONNECTING_1_TO_2(setup().de_alias(link.first), setup().de_alias(link.second)));
log().fatal(MF_LINK_TRIES_EXCEEDED(m_netlist_params->m_max_link_loops()));
- plib::pthrow<nl_exception>(MF_LINK_TRIES_EXCEEDED(m_netlist_params->m_max_link_loops()));
+ throw nl_exception(MF_LINK_TRIES_EXCEEDED(m_netlist_params->m_max_link_loops()));
}
log().verbose("deleting empty nets ...");
@@ -964,7 +962,7 @@ void setup_t::resolve_inputs()
if (err)
{
log().fatal(MF_TERMINALS_WITHOUT_NET());
- plib::pthrow<nl_exception>(MF_TERMINALS_WITHOUT_NET());
+ throw nl_exception(MF_TERMINALS_WITHOUT_NET());
}
}
@@ -1006,11 +1004,11 @@ void models_t::register_model(const pstring &model_in)
{
auto pos = model_in.find(' ');
if (pos == pstring::npos)
- plib::pthrow<nl_exception>(MF_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)
- plib::pthrow<nl_exception>(MF_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)
@@ -1027,7 +1025,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())
- plib::pthrow<nl_exception>(MF_MODEL_NOT_FOUND(model));
+ throw nl_exception(MF_MODEL_NOT_FOUND(model));
model = i->second;
}
pstring xmodel = plib::left(model, pos);
@@ -1040,12 +1038,12 @@ void models_t::model_parse(const pstring &model_in, model_map_t &map)
if (i != m_models.end())
model_parse(xmodel, map);
else
- plib::pthrow<nl_exception>(MF_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, ")"))
- plib::pthrow<nl_exception>(MF_MODEL_ERROR_1(model));
+ throw nl_exception(MF_MODEL_ERROR_1(model));
// FIMXE: Not optimal
remainder = plib::left(remainder, remainder.size() - 1);
@@ -1054,7 +1052,7 @@ void models_t::model_parse(const pstring &model_in, model_map_t &map)
{
auto pose = pe.find('=');
if (pose == pstring::npos)
- plib::pthrow<nl_exception>(MF_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);
}
}
@@ -1073,26 +1071,22 @@ pstring models_t::value_str(const pstring &model, const pstring &entity)
{
model_map_t &map = m_cache[model];
- if (map.size() == 0)
+ if (map.empty())
model_parse(model , map);
- pstring ret;
-
if (entity != plib::ucase(entity))
- plib::pthrow<nl_exception>(MF_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())
- plib::pthrow<nl_exception>(MF_ENTITY_1_NOT_FOUND_IN_MODEL_2(entity, model_string(map)));
- else
- ret = map[entity];
+ throw nl_exception(MF_ENTITY_1_NOT_FOUND_IN_MODEL_2(entity, model_string(map)));
- return ret;
+ return map[entity];
}
nl_fptype models_t::value(const pstring &model, const pstring &entity)
{
model_map_t &map = m_cache[model];
- if (map.size() == 0)
+ if (map.empty())
model_parse(model , map);
pstring tmp = value_str(model, entity);
@@ -1112,7 +1106,7 @@ nl_fptype models_t::value(const pstring &model, const pstring &entity)
case 'a': factor = nlconst::magic(1e-18); break;
default:
if (*p < '0' || *p > '9')
- plib::pthrow<nl_exception>(MF_UNKNOWN_NUMBER_FACTOR_IN_1(entity));
+ throw nl_exception(MF_UNKNOWN_NUMBER_FACTOR_IN_1(entity));
}
if (factor != nlconst::one())
tmp = plib::left(tmp, tmp.size() - 1);
@@ -1121,7 +1115,7 @@ nl_fptype models_t::value(const pstring &model, const pstring &entity)
bool err(false);
auto val = plib::pstonum_ne<nl_fptype>(tmp, err);
if (err)
- plib::pthrow<nl_exception>(MF_MODEL_NUMBER_CONVERSION_ERROR(entity, tmp, "double", model));
+ throw nl_exception(MF_MODEL_NUMBER_CONVERSION_ERROR(entity, tmp, "double", model));
return val * factor;
}
@@ -1159,7 +1153,6 @@ const logic_family_desc_t *setup_t::family_from_model(const pstring &model)
auto ret = plib::make_unique<logic_family_std_proxy_t>();
- ret->m_fixed_V = m_models.value(model, "FV");
ret->m_low_thresh_PCNT = m_models.value(model, "IVL");
ret->m_high_thresh_PCNT = m_models.value(model, "IVH");
ret->m_low_VO = m_models.value(model, "OVL");
@@ -1204,8 +1197,7 @@ void setup_t::delete_empty_nets()
x->state().run_state_manager().remove_save_items(x.get());
return true;
}
- else
- return false;
+ return false;
}), m_nlstate.nets().end());
}
@@ -1269,7 +1261,7 @@ void setup_t::prepare_to_run()
}
}
- bool use_deactivate = m_netlist_params->m_use_deactivate() ? true : false;
+ const bool use_deactivate = m_netlist_params->m_use_deactivate();
for (auto &d : m_nlstate.devices())
{
@@ -1284,7 +1276,7 @@ void setup_t::prepare_to_run()
if (err || plib::abs(v - plib::floor(v)) > nlconst::magic(1e-6) )
{
log().fatal(MF_HND_VAL_NOT_SUPPORTED(p->second));
- plib::pthrow<nl_exception>(MF_HND_VAL_NOT_SUPPORTED(p->second));
+ throw nl_exception(MF_HND_VAL_NOT_SUPPORTED(p->second));
}
// FIXME comparison with zero
d.second->set_hint_deactivate(v == nlconst::zero());
@@ -1318,7 +1310,7 @@ void setup_t::prepare_to_run()
if (p->is_analog())
{
log().fatal(MF_NO_SOLVER());
- plib::pthrow<nl_exception>(MF_NO_SOLVER());
+ throw nl_exception(MF_NO_SOLVER());
}
}
else
@@ -1340,10 +1332,7 @@ void setup_t::prepare_to_run()
bool source_netlist_t::parse(nlparse_t &setup, const pstring &name)
{
auto strm(stream(name));
- if (strm)
- return setup.parse_stream(std::move(strm), name);
- else
- return false;
+ return (strm) ? setup.parse_stream(std::move(strm), name) : false;
}
source_string_t::stream_ptr source_string_t::stream(const pstring &name)
@@ -1366,10 +1355,7 @@ source_file_t::stream_ptr source_file_t::stream(const pstring &name)
{
plib::unused_var(name);
auto ret(plib::make_unique<std::ifstream>(plib::filesystem::u8path(m_filename)));
- if (ret->is_open())
- return std::move(ret);
- else
- return stream_ptr(nullptr);
+ return (ret->is_open()) ? std::move(ret) : stream_ptr(nullptr);
}
bool source_proc_t::parse(nlparse_t &setup, const pstring &name)
@@ -1379,8 +1365,8 @@ bool source_proc_t::parse(nlparse_t &setup, const pstring &name)
m_setup_func(setup);
return true;
}
- else
- return false;
+
+ return false;
}
source_proc_t::stream_ptr source_proc_t::stream(const pstring &name)