summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/nl_setup.cpp
diff options
context:
space:
mode:
author couriersud <couriersud@arcor.de>2016-05-16 22:36:46 +0200
committer couriersud <couriersud@arcor.de>2016-05-21 12:58:23 +0200
commitd200744fbfb40fd5cd017c2222a44523f8ba12e6 (patch)
tree91281a8c3b55b5d12eaf622e5cd0a88550096430 /src/lib/netlist/nl_setup.cpp
parent17d85d78d1f50e3eeeb58a4f4a806ad5ea31d323 (diff)
Converted more devices to new layout. Improved memory handling in
factories. (nw)
Diffstat (limited to 'src/lib/netlist/nl_setup.cpp')
-rw-r--r--src/lib/netlist/nl_setup.cpp35
1 files changed, 19 insertions, 16 deletions
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index 6b554a701ee..77cc497989d 100644
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -71,7 +71,7 @@ setup_t::~setup_t()
m_param_values.clear();
netlist().set_setup(nullptr);
- m_sources.clear_and_free();
+ m_sources.clear();
pstring::resetmem();
}
@@ -100,13 +100,13 @@ void setup_t::namespace_pop()
}
-void setup_t::register_dev(std::shared_ptr<device_t> dev)
+void setup_t::register_dev(powned_ptr<device_t> dev)
{
for (auto & d : netlist().m_devices)
if (d->name() == dev->name())
log().fatal("Error adding {1} to device list. Duplicate name \n", d->name());
- netlist().m_devices.push_back(dev);
+ netlist().m_devices.push_back(std::move(dev));
}
void setup_t::register_lib_entry(const pstring &name)
@@ -501,7 +501,7 @@ devices::nld_base_proxy *setup_t::get_d_a_proxy(core_terminal_t &out)
out_cast.logic_family()->create_d_a_proxy(netlist(), x, &out_cast);
m_proxy_cnt++;
- register_dev_s(new_proxy);
+ proxy = new_proxy.get();
new_proxy->start_dev();
/* connect all existing terminals to new net */
@@ -516,7 +516,9 @@ devices::nld_base_proxy *setup_t::get_d_a_proxy(core_terminal_t &out)
out.net().register_con(new_proxy->in());
out_cast.set_proxy(new_proxy.get());
+
proxy = new_proxy.get();
+ register_dev_s(std::move(new_proxy));
}
return proxy;
}
@@ -527,16 +529,17 @@ void setup_t::connect_input_output(core_terminal_t &in, core_terminal_t &out)
{
logic_input_t &incast = dynamic_cast<logic_input_t &>(in);
pstring x = pfmt("proxy_ad_{1}_{2}")(in.name())( m_proxy_cnt);
- auto proxy = std::make_shared<devices::nld_a_to_d_proxy>(netlist(), x, &incast);
+ auto proxy = powned_ptr<devices::nld_a_to_d_proxy>::Create(netlist(), x, &incast);
incast.set_proxy(proxy.get());
m_proxy_cnt++;
- register_dev_s(proxy);
proxy->start_dev();
proxy->m_Q.net().register_con(in);
out.net().register_con(proxy->m_I);
+ register_dev_s(std::move(proxy));
+
}
else if (out.is_logic() && in.is_analog())
{
@@ -566,13 +569,11 @@ void setup_t::connect_terminal_input(terminal_t &term, core_terminal_t &inp)
logic_input_t &incast = dynamic_cast<logic_input_t &>(inp);
log().debug("connect_terminal_input: connecting proxy\n");
pstring x = pfmt("proxy_ad_{1}_{2}")(inp.name())(m_proxy_cnt);
- auto proxy = std::make_shared<devices::nld_a_to_d_proxy>(netlist(), x, &incast);
+ auto proxy = powned_ptr<devices::nld_a_to_d_proxy>::Create(netlist(), x, &incast);
incast.set_proxy(proxy.get());
m_proxy_cnt++;
- register_dev_s(proxy);
proxy->start_dev();
-
connect_terminals(term, proxy->m_I);
if (inp.has_net())
@@ -580,6 +581,8 @@ void setup_t::connect_terminal_input(terminal_t &term, core_terminal_t &inp)
proxy->m_Q.net().merge_net(&inp.net());
else
proxy->m_Q.net().register_con(inp);
+
+ register_dev_s(std::move(proxy));
}
else
{
@@ -848,9 +851,9 @@ void setup_t::start_devices()
{
pstring name = "log_" + ll;
auto nc = factory().new_device_by_name("LOG", netlist(), name);
- register_dev_s(nc);
register_link(name + ".I", ll);
log().debug(" dynamic link {1}: <{2}>\n",ll, name);
+ register_dev_s(std::move(nc));
}
}
@@ -866,22 +869,22 @@ class logic_family_std_proxy_t : public logic_family_desc_t
{
public:
logic_family_std_proxy_t() { }
- virtual std::shared_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_t &anetlist,
+ virtual powned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_t &anetlist,
const pstring &name, logic_output_t *proxied) const override
{
- return std::make_shared<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
+ return powned_ptr<devices::nld_base_d_to_a_proxy>::Create<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
}
};
-logic_family_desc_t *setup_t::family_from_model(const pstring &model)
+const logic_family_desc_t *setup_t::family_from_model(const pstring &model)
{
model_map_t map;
model_parse(model, map);
if (setup_t::model_value_str(map, "TYPE") == "TTL")
- return family_TTL;
+ return family_TTL();
if (setup_t::model_value_str(map, "TYPE") == "CD4XXX")
- return family_CD4XXX;
+ return family_CD4XXX();
logic_family_std_proxy_t *ret = palloc(logic_family_std_proxy_t);
@@ -993,7 +996,7 @@ nl_double setup_t::model_value(model_map_t &map, const pstring &entity)
void setup_t::include(const pstring &netlist_name)
{
- for (source_t *source : m_sources)
+ for (auto source : m_sources)
{
if (source->parse(*this, netlist_name))
return;