diff options
author | 2016-04-23 23:35:27 +0200 | |
---|---|---|
committer | 2016-05-02 21:56:57 +0200 | |
commit | 576189b1695936f35f077918fbb9191ed68ad8df (patch) | |
tree | b20669555c740ced035d9ffb78f71d1619cf7dd9 /src/lib/netlist/nl_setup.cpp | |
parent | 28eeb49676eb5550180d481b87f5a6ca86564828 (diff) |
Converted most subdevices to unique_ptr. This is a temporary measure
until the device initialisation is moved into the constructor. Started
converting constructors of devices to be passed name and netlist. (nw)
Diffstat (limited to 'src/lib/netlist/nl_setup.cpp')
-rw-r--r-- | src/lib/netlist/nl_setup.cpp | 38 |
1 files changed, 18 insertions, 20 deletions
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index 3e347356b5a..e158a5c8673 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -103,15 +103,11 @@ void setup_t::namespace_pop() } -device_t *setup_t::register_dev(device_t *dev, const pstring &name) +device_t *setup_t::register_dev(device_t *dev) { - pstring fqn = build_fqn(name); - - dev->init(netlist(), fqn); - for (auto & d : netlist().m_devices) if (d->name() == dev->name()) - log().fatal("Error adding {1} to device list. Duplicate name \n", name); + log().fatal("Error adding {1} to device list. Duplicate name \n", d->name()); netlist().m_devices.push_back(dev); return dev; @@ -136,11 +132,11 @@ device_t *setup_t::register_dev(const pstring &classname, const pstring &name) } else { - device_t *dev = factory().new_device_by_name(classname); + device_t *dev = factory().new_device_by_name(classname, netlist(), build_fqn(name)); //device_t *dev = factory().new_device_by_classname(classname); if (dev == nullptr) log().fatal("Class {1} not found!\n", classname); - return register_dev(dev, name); + return register_dev(dev); } } @@ -477,11 +473,12 @@ devices::nld_base_proxy *setup_t::get_d_a_proxy(core_terminal_t &out) if (proxy == nullptr) { // create a new one ... - devices::nld_base_d_to_a_proxy *new_proxy = out_cast.logic_family()->create_d_a_proxy(&out_cast); pstring x = pfmt("proxy_da_{1}_{2}")(out.name())(m_proxy_cnt); + devices::nld_base_d_to_a_proxy *new_proxy = + out_cast.logic_family()->create_d_a_proxy(netlist(), x, &out_cast); m_proxy_cnt++; - register_dev(new_proxy, x); + register_dev(new_proxy); new_proxy->start_dev(); /* connect all existing terminals to new net */ @@ -506,12 +503,12 @@ void setup_t::connect_input_output(core_terminal_t &in, core_terminal_t &out) if (out.isFamily(terminal_t::ANALOG) && in.isFamily(terminal_t::LOGIC)) { logic_input_t &incast = dynamic_cast<logic_input_t &>(in); - devices::nld_a_to_d_proxy *proxy = palloc(devices::nld_a_to_d_proxy(&incast)); - incast.set_proxy(proxy); pstring x = pfmt("proxy_ad_{1}_{2}")(in.name())( m_proxy_cnt); + devices::nld_a_to_d_proxy *proxy = palloc(devices::nld_a_to_d_proxy(netlist(), x, &incast)); + incast.set_proxy(proxy); m_proxy_cnt++; - register_dev(proxy, x); + register_dev(proxy); proxy->start_dev(); proxy->m_Q.net().register_con(in); @@ -545,12 +542,12 @@ 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"); - devices::nld_a_to_d_proxy *proxy = palloc(devices::nld_a_to_d_proxy(&incast)); - incast.set_proxy(proxy); pstring x = pfmt("proxy_ad_{1}_{2}")(inp.name())(m_proxy_cnt); + devices::nld_a_to_d_proxy *proxy = palloc(devices::nld_a_to_d_proxy(netlist(), x, &incast)); + incast.set_proxy(proxy); m_proxy_cnt++; - register_dev(proxy, x); + register_dev(proxy); proxy->start_dev(); connect_terminals(term, proxy->m_I); @@ -829,9 +826,9 @@ void setup_t::start_devices() pstring_vector_t loglist(env, ":"); for (pstring ll : loglist) { - device_t *nc = factory().new_device_by_name("LOG"); pstring name = "log_" + ll; - register_dev(nc, name); + device_t *nc = factory().new_device_by_name("LOG", netlist(), name); + register_dev(nc); register_link(name + ".I", ll); log().debug(" dynamic link {1}: <{2}>\n",ll, name); } @@ -863,9 +860,10 @@ class logic_family_std_proxy_t : public logic_family_desc_t { public: logic_family_std_proxy_t() { } - virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(logic_output_t *proxied) const override + virtual devices::nld_base_d_to_a_proxy *create_d_a_proxy(netlist_t &anetlist, + const pstring &name, logic_output_t *proxied) const override { - return palloc(devices::nld_d_to_a_proxy(proxied)); + return palloc(devices::nld_d_to_a_proxy(anetlist, name, proxied)); } }; |