summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2019-10-15 11:30:05 +0200
committer couriersud <couriersud@gmx.org>2019-10-15 11:30:05 +0200
commit6daeb4b4d14ca313be5b386ca61b6c4222d2e002 (patch)
tree0a87b9f441ab39256f2db99fe8f1943513652818 /src/lib
parentd9905f3d0314dcde2017d7b6b6840d08cd2b89f1 (diff)
netlist: Use unique_ptr where possible. (nw)
Also improve code readability.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/netlist/devices/nld_system.cpp2
-rw-r--r--src/lib/netlist/devices/nlid_truthtable.cpp4
-rw-r--r--src/lib/netlist/nl_base.cpp55
-rw-r--r--src/lib/netlist/nl_base.h134
-rw-r--r--src/lib/netlist/nl_factory.cpp4
-rw-r--r--src/lib/netlist/nl_factory.h8
-rw-r--r--src/lib/netlist/nl_setup.cpp31
-rw-r--r--src/lib/netlist/nltypes.h2
-rw-r--r--src/lib/netlist/plib/pmempool.h2
-rw-r--r--src/lib/netlist/prg/nltool.cpp2
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.cpp4
-rw-r--r--src/lib/netlist/solver/nld_matrix_solver.h2
-rw-r--r--src/lib/netlist/solver/nld_solver.cpp2
13 files changed, 158 insertions, 94 deletions
diff --git a/src/lib/netlist/devices/nld_system.cpp b/src/lib/netlist/devices/nld_system.cpp
index 5a1868bb775..d75dd7d0fe9 100644
--- a/src/lib/netlist/devices/nld_system.cpp
+++ b/src/lib/netlist/devices/nld_system.cpp
@@ -111,7 +111,7 @@ namespace netlist
NETLIB_DEVICE_IMPL(clock, "CLOCK", "FREQ")
NETLIB_DEVICE_IMPL(varclock, "VARCLOCK", "FUNC")
NETLIB_DEVICE_IMPL(extclock, "EXTCLOCK", "FREQ,PATTERN")
- NETLIB_DEVICE_IMPL(res_sw, "RES_SWITCH", "+IN,+P1,+P2")
+ NETLIB_DEVICE_IMPL(res_sw, "RES_SWITCH", "+I,+1,+2")
NETLIB_DEVICE_IMPL(mainclock, "MAINCLOCK", "FREQ")
NETLIB_DEVICE_IMPL(gnd, "GND", "")
NETLIB_DEVICE_IMPL(netlistparams, "PARAMETER", "")
diff --git a/src/lib/netlist/devices/nlid_truthtable.cpp b/src/lib/netlist/devices/nlid_truthtable.cpp
index c62c67da3c1..cd8e9e1ed1b 100644
--- a/src/lib/netlist/devices/nlid_truthtable.cpp
+++ b/src/lib/netlist/devices/nlid_truthtable.cpp
@@ -223,7 +223,7 @@ namespace netlist
: netlist_base_factory_truthtable_t(name, classname, def_param, sourcefile)
{ }
- pool_owned_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override
+ unique_pool_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override
{
using tt_type = nld_truthtable_t<m_NI, m_NO>;
truthtable_parser desc_s(m_NO, m_NI, &m_ttbl.m_initialized,
@@ -239,7 +239,7 @@ namespace netlist
if (m_family_desc == nullptr)
throw nl_exception("family description not found for {1}", m_family_name);
- return pool().make_poolptr<tt_type>(anetlist, name, m_family_desc, m_ttbl, m_desc);
+ return pool().make_unique<tt_type>(anetlist, name, m_family_desc, m_ttbl, m_desc);
}
private:
typename nld_truthtable_t<m_NI, m_NO>::truthtable_t m_ttbl;
diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp
index 1210c6a4d41..7035aa73b2e 100644
--- a/src/lib/netlist/nl_base.cpp
+++ b/src/lib/netlist/nl_base.cpp
@@ -49,17 +49,17 @@ public:
m_R_low = 1.0;
m_R_high = 130.0;
}
- pool_owned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const override;
- pool_owned_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
+ unique_pool_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const override;
+ unique_pool_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
};
-pool_owned_ptr<devices::nld_base_d_to_a_proxy> logic_family_ttl_t::create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const
+unique_pool_ptr<devices::nld_base_d_to_a_proxy> logic_family_ttl_t::create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const
{
- return pool().make_poolptr<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
+ return pool().make_unique<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
}
-pool_owned_ptr<devices::nld_base_a_to_d_proxy> logic_family_ttl_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
+unique_pool_ptr<devices::nld_base_a_to_d_proxy> logic_family_ttl_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
{
- return pool().make_poolptr<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
+ return pool().make_unique<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
}
class logic_family_cd4xxx_t : public logic_family_desc_t
@@ -76,18 +76,18 @@ public:
m_R_low = 10.0;
m_R_high = 10.0;
}
- pool_owned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const override;
- pool_owned_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
+ unique_pool_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const override;
+ unique_pool_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
};
-pool_owned_ptr<devices::nld_base_d_to_a_proxy> logic_family_cd4xxx_t::create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const
+unique_pool_ptr<devices::nld_base_d_to_a_proxy> logic_family_cd4xxx_t::create_d_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *proxied) const
{
- return pool().make_poolptr<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
+ return pool().make_unique<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
}
-pool_owned_ptr<devices::nld_base_a_to_d_proxy> logic_family_cd4xxx_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
+unique_pool_ptr<devices::nld_base_a_to_d_proxy> logic_family_cd4xxx_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
{
- return pool().make_poolptr<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
+ return pool().make_unique<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
}
const logic_family_desc_t *family_TTL()
@@ -409,7 +409,8 @@ void netlist_t::process_queue_stats(const netlist_time delta) NL_NOEXCEPT
while (e.m_object != nullptr)
{
e.m_object->template update_devs<KEEP_STATS>();
- if (KEEP_STATS) m_perf_out_processed.inc();
+ if (KEEP_STATS)
+ m_perf_out_processed.inc();
e = m_queue.pop();
m_time = e.m_exec_time;
}
@@ -435,7 +436,8 @@ void netlist_t::process_queue_stats(const netlist_time delta) NL_NOEXCEPT
if (e.m_object != nullptr)
{
e.m_object->template update_devs<KEEP_STATS>();
- if (KEEP_STATS) m_perf_out_processed.inc();
+ if (KEEP_STATS)
+ m_perf_out_processed.inc();
}
else
break;
@@ -568,7 +570,7 @@ core_device_t::core_device_t(core_device_t &owner, const pstring &name)
set_logic_family(owner.logic_family());
if (logic_family() == nullptr)
set_logic_family(family_TTL());
- state().add_dev(this->name(), pool_owned_ptr<core_device_t>(this, false));
+ state().register_device(this->name(), owned_pool_ptr<core_device_t>(this, false));
if (exec().stats_enabled())
m_stats = pool().make_unique<stats_t>();
}
@@ -725,6 +727,7 @@ void detail::net_t::process(const T mask, netlist_sig_t sig)
template <bool KEEP_STATS>
void detail::net_t::update_devs() NL_NOEXCEPT
{
+#if 0
nl_assert(this->isRailNet());
const unsigned int new_Q(m_new_Q);
@@ -743,6 +746,24 @@ void detail::net_t::update_devs() NL_NOEXCEPT
/* do nothing */
break;
}
+#else
+ nl_assert(this->isRailNet());
+
+ const unsigned int mask((m_new_Q << core_terminal_t::INP_LH_SHIFT)
+ | (m_cur_Q << core_terminal_t::INP_HL_SHIFT));
+
+ m_in_queue = queue_status::DELIVERED; /* mark as taken ... */
+ switch (mask)
+ {
+ case core_terminal_t::STATE_INP_HL:
+ case core_terminal_t::STATE_INP_LH:
+ process<KEEP_STATS>(mask | core_terminal_t::STATE_INP_ACTIVE, m_new_Q);
+ break;
+ default:
+ /* do nothing */
+ break;
+ }
+#endif
}
void detail::net_t::reset()
@@ -897,7 +918,7 @@ logic_output_t::logic_output_t(core_device_t &dev, const pstring &aname)
, m_my_net(dev.state(), name() + ".net", this)
{
this->set_net(&m_my_net);
- state().register_net(pool_owned_ptr<logic_net_t>(&m_my_net, false));
+ state().register_net(owned_pool_ptr<logic_net_t>(&m_my_net, false));
set_logic_family(dev.logic_family());
state().setup().register_term(*this);
}
@@ -927,7 +948,7 @@ analog_output_t::analog_output_t(core_device_t &dev, const pstring &aname)
: analog_t(dev, aname, STATE_OUT)
, m_my_net(dev.state(), name() + ".net", this)
{
- state().register_net(pool_owned_ptr<analog_net_t>(&m_my_net, false));
+ state().register_net(owned_pool_ptr<analog_net_t>(&m_my_net, false));
this->set_net(&m_my_net);
//net().m_cur_Analog = NL_FCONST(0.0);
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index 9946bc8cd43..e58a439a35c 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -144,7 +144,7 @@ class NETLIB_NAME(name) : public device_t
#define NETLIB_TIMESTEP(chip) void NETLIB_NAME(chip) :: timestep(const nl_double step)
#define NETLIB_SUB(chip) nld_ ## chip
-#define NETLIB_SUBXX(ns, chip) pool_owned_ptr< ns :: nld_ ## chip >
+#define NETLIB_SUBXX(ns, chip) unique_pool_ptr< ns :: nld_ ## chip >
#define NETLIB_HANDLER(chip, name) void NETLIB_NAME(chip) :: name() NL_NOEXCEPT
#define NETLIB_UPDATE(chip) NETLIB_HANDLER(chip, update)
@@ -249,9 +249,9 @@ namespace netlist
virtual ~logic_family_desc_t() noexcept = default;
- virtual pool_owned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name,
+ virtual unique_pool_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name,
logic_output_t *proxied) const = 0;
- virtual pool_owned_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name,
+ virtual unique_pool_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name,
logic_input_t *proxied) const = 0;
double fixed_V() const { return m_fixed_V; }
@@ -698,14 +698,14 @@ namespace netlist
netlist_sig_t Q() const noexcept { return m_cur_Q; }
/* only used for logic nets */
- void initial(const netlist_sig_t val) noexcept
+ void initial(netlist_sig_t val) noexcept
{
m_cur_Q = m_new_Q = val;
update_inputs();
}
/* only used for logic nets */
- void set_Q_and_push(const netlist_sig_t newQ, const netlist_time delay) NL_NOEXCEPT
+ void set_Q_and_push(netlist_sig_t newQ, netlist_time delay) NL_NOEXCEPT
{
if (newQ != m_new_Q)
{
@@ -715,7 +715,7 @@ namespace netlist
}
/* only used for logic nets */
- void set_Q_time(const netlist_sig_t newQ, const netlist_time at) NL_NOEXCEPT
+ void set_Q_time(netlist_sig_t newQ, netlist_time at) NL_NOEXCEPT
{
if (newQ != m_new_Q)
{
@@ -935,14 +935,14 @@ namespace netlist
logic_output_t(core_device_t &dev, const pstring &aname);
- void initial(const netlist_sig_t val);
+ void initial(netlist_sig_t val);
- void push(const netlist_sig_t newQ, const netlist_time delay) NL_NOEXCEPT
+ void push(netlist_sig_t newQ, netlist_time delay) NL_NOEXCEPT
{
m_my_net.set_Q_and_push(newQ, delay); // take the shortcut
}
- void set_Q_time(const netlist_sig_t newQ, const netlist_time at) NL_NOEXCEPT
+ void set_Q_time(netlist_sig_t newQ, netlist_time at) NL_NOEXCEPT
{
m_my_net.set_Q_time(newQ, at); // take the shortcut
}
@@ -1260,9 +1260,9 @@ namespace netlist
const setup_t &setup() const;
template<class C, typename... Args>
- void create_and_register_subdevice(const pstring &name, pool_owned_ptr<C> &dev, Args&&... args)
+ void create_and_register_subdevice(const pstring &name, unique_pool_ptr<C> &dev, Args&&... args)
{
- dev = pool().make_poolptr<C>(*this, name, std::forward<Args>(args)...);
+ dev = pool().make_unique<C>(*this, name, std::forward<Args>(args)...);
}
void register_subalias(const pstring &name, detail::core_terminal_t &term);
@@ -1338,10 +1338,10 @@ namespace netlist
{
public:
- using nets_collection_type = std::vector<pool_owned_ptr<detail::net_t>>;
+ using nets_collection_type = std::vector<owned_pool_ptr<detail::net_t>>;
/* need to preserve order of device creation ... */
- using devices_collection_type = std::vector<std::pair<pstring, pool_owned_ptr<core_device_t>>>;
+ using devices_collection_type = std::vector<std::pair<pstring, owned_pool_ptr<core_device_t>>>;
netlist_state_t(const pstring &aname,
netlist_t & anetlist,
plib::unique_ptr<callbacks_t> &&callbacks);
@@ -1360,10 +1360,38 @@ namespace netlist
core_device_t *get_single_device(const pstring &classname, bool (*cc)(core_device_t *)) const;
+ /**
+ * @brief Get single device filtered by class and name
+ *
+ * @tparam C Device class for which devices will be returned
+ * @param name Name of the device
+ *
+ * @return pointers to device
+ */
+ template<class C>
+ C *get_single_device(const pstring &name) const
+ {
+ return dynamic_cast<C *>(get_single_device(name, check_class<C>));
+ }
+
+ /**
+ * @brief Get vector of devices
+ *
+ * @tparam C Device class for which devices will be returned
+ *
+ * @return vector with pointers to devices
+ */
template<class C>
- C *get_single_device(const pstring &classname) const
+ inline std::vector<C *> get_device_list()
{
- return dynamic_cast<C *>(get_single_device(classname, check_class<C>));
+ std::vector<C *> tmp;
+ for (auto &d : m_devices)
+ {
+ auto dev = dynamic_cast<C *>(d.second.get());
+ if (dev != nullptr)
+ tmp.push_back(dev);
+ }
+ return tmp;
}
/* logging and name */
@@ -1396,21 +1424,16 @@ namespace netlist
std::size_t find_net_id(const detail::net_t *net) const;
template <typename T>
- void register_net(pool_owned_ptr<T> &&net) { m_nets.push_back(std::move(net)); }
-
- template<class device_class>
- inline std::vector<device_class *> get_device_list()
- {
- std::vector<device_class *> tmp;
- for (auto &d : m_devices)
- {
- auto dev = dynamic_cast<device_class *>(d.second.get());
- if (dev != nullptr)
- tmp.push_back(dev);
- }
- return tmp;
- }
+ void register_net(owned_pool_ptr<T> &&net) { m_nets.push_back(std::move(net)); }
+ /**
+ * @brief Get device pointer by name
+ *
+ *
+ * @param name Name of the device
+ *
+ * @return core_device_t pointer if device exists, else nullptr
+ */
core_device_t *find_device(const pstring &name)
{
for (auto & d : m_devices)
@@ -1419,8 +1442,17 @@ namespace netlist
return nullptr;
}
+ /**
+ * @brief Register device using owned_ptr
+ *
+ * Used to register owned devices. These are devices declared as objects
+ * in another devices.
+ *
+ * @param name Name of the device
+ * @param dev Device to be registered
+ */
template <typename T>
- void add_dev(const pstring &name, pool_owned_ptr<T> &&dev)
+ void register_device(const pstring &name, owned_pool_ptr<T> &&dev)
{
for (auto & d : m_devices)
if (d.first == name)
@@ -1433,6 +1465,20 @@ namespace netlist
}
/**
+ * @brief Register device using unique_ptr
+ *
+ * Used to register devices.
+ *
+ * @param name Name of the device
+ * @param dev Device to be registered
+ */
+ template <typename T>
+ void register_device(const pstring &name, unique_pool_ptr<T> &&dev)
+ {
+ register_device(name, owned_pool_ptr<T>(dev.release(), true, dev.get_deleter()));
+ }
+
+ /**
* @brief Remove device
*
* Care needs to be applied if this is called to remove devices with
@@ -1440,7 +1486,7 @@ namespace netlist
*
* @param dev Device to be removed
*/
- void remove_dev(core_device_t *dev)
+ void remove_device(core_device_t *dev)
{
for (auto it = m_devices.begin(); it != m_devices.end(); it++)
if (it->second.get() == dev)
@@ -1451,20 +1497,20 @@ namespace netlist
}
}
- /* sole use is to manage lifetime of family objects */
- std::unordered_map<pstring, plib::unique_ptr<logic_family_desc_t>> m_family_cache;
-
setup_t &setup() NL_NOEXCEPT { return *m_setup; }
const setup_t &setup() const NL_NOEXCEPT { return *m_setup; }
- nets_collection_type & nets() { return m_nets; }
- devices_collection_type & devices() { return m_devices; }
-
// FIXME: make a postload member and include code there
void rebuild_lists(); /* must be called after post_load ! */
static void compile_defines(std::vector<std::pair<pstring, pstring>> &defs);
+ nets_collection_type & nets() { return m_nets; }
+ devices_collection_type & devices() { return m_devices; }
+
+ /* sole use is to manage lifetime of family objects */
+ std::unordered_map<pstring, plib::unique_ptr<logic_family_desc_t>> m_family_cache;
+
private:
void reset();
@@ -1503,7 +1549,7 @@ namespace netlist
netlist_time time() const NL_NOEXCEPT { return m_time; }
- void process_queue(const netlist_time delta) NL_NOEXCEPT;
+ void process_queue(netlist_time delta) NL_NOEXCEPT;
void abort_current_queue_slice() NL_NOEXCEPT { m_queue.retime(detail::queue_t::entry_t(m_time, nullptr)); }
const detail::queue_t &queue() const NL_NOEXCEPT { return m_queue; }
@@ -1559,7 +1605,7 @@ namespace netlist
private:
template <bool KEEP_STATS>
- void process_queue_stats(const netlist_time delta) NL_NOEXCEPT;
+ void process_queue_stats(netlist_time delta) NL_NOEXCEPT;
plib::unique_ptr<netlist_state_t> m_state;
devices::NETLIB_NAME(solver) * m_solver;
@@ -1708,27 +1754,25 @@ namespace netlist
}
}
- inline void detail::net_t::push_to_queue(const netlist_time delay) NL_NOEXCEPT
+ inline void detail::net_t::push_to_queue(netlist_time delay) NL_NOEXCEPT
{
if ((num_cons() != 0))
{
- auto &lexec(exec());
- const auto nst(lexec.time() + delay);
+ m_next_scheduled_time = exec().time() + delay;
if (is_queued())
- lexec.qremove(this);
+ exec().qremove(this);
if (!m_list_active.empty())
{
m_in_queue = queue_status::QUEUED;
- lexec.qpush(queue_t::entry_t(nst, this));
+ exec().qpush(queue_t::entry_t(m_next_scheduled_time, this));
}
else
{
m_in_queue = queue_status::DELAYED_DUE_TO_INACTIVE;
update_inputs();
}
- m_next_scheduled_time = nst;
}
}
diff --git a/src/lib/netlist/nl_factory.cpp b/src/lib/netlist/nl_factory.cpp
index f8fc40d27db..74e91ea2ee1 100644
--- a/src/lib/netlist/nl_factory.cpp
+++ b/src/lib/netlist/nl_factory.cpp
@@ -76,9 +76,9 @@ namespace netlist { namespace factory
// factory_lib_entry_t: factory class to wrap macro based chips/elements
// -----------------------------------------------------------------------------
- pool_owned_ptr<device_t> library_element_t::Create(netlist_state_t &anetlist, const pstring &name)
+ unique_pool_ptr<device_t> library_element_t::Create(netlist_state_t &anetlist, const pstring &name)
{
- return pool().make_poolptr<NETLIB_NAME(wrapper)>(anetlist, name);
+ return pool().make_unique<NETLIB_NAME(wrapper)>(anetlist, name);
}
void library_element_t::macro_actions(nlparse_t &nparser, const pstring &name)
diff --git a/src/lib/netlist/nl_factory.h b/src/lib/netlist/nl_factory.h
index b0c73a6a198..f633962d86d 100644
--- a/src/lib/netlist/nl_factory.h
+++ b/src/lib/netlist/nl_factory.h
@@ -55,7 +55,7 @@ namespace factory {
COPYASSIGNMOVE(element_t, default)
- virtual pool_owned_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) = 0;
+ virtual unique_pool_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) = 0;
virtual void macro_actions(nlparse_t &nparser, const pstring &name)
{
plib::unused_var(nparser);
@@ -85,9 +85,9 @@ namespace factory {
const pstring &def_param, const pstring &sourcefile)
: element_t(name, classname, def_param, sourcefile) { }
- pool_owned_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override
+ unique_pool_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override
{
- return pool().make_poolptr<C>(anetlist, name);
+ return pool().make_unique<C>(anetlist, name);
}
};
@@ -147,7 +147,7 @@ namespace factory {
{
}
- pool_owned_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override;
+ unique_pool_ptr<device_t> Create(netlist_state_t &anetlist, const pstring &name) override;
void macro_actions(nlparse_t &nparser, const pstring &name) override;
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index 5d6f283bf56..bb942fdaab1 100644
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -474,7 +474,7 @@ devices::nld_base_proxy *setup_t::get_d_a_proxy(detail::core_terminal_t &out)
proxy = new_proxy.get();
- m_nlstate.add_dev(new_proxy->name(), std::move(new_proxy));
+ m_nlstate.register_device(new_proxy->name(), std::move(new_proxy));
}
return proxy;
}
@@ -513,7 +513,7 @@ devices::nld_base_proxy *setup_t::get_a_d_proxy(detail::core_terminal_t &inp)
inp.net().core_terms().clear(); // clear the list
}
ret->out().net().add_terminal(inp);
- m_nlstate.add_dev(new_proxy->name(), std::move(new_proxy));
+ m_nlstate.register_device(new_proxy->name(), std::move(new_proxy));
return ret;
}
}
@@ -635,7 +635,7 @@ void setup_t::connect_terminals(detail::core_terminal_t &t1, detail::core_termin
{
log().debug("adding analog net ...\n");
// FIXME: Nets should have a unique name
- auto anet = pool().make_poolptr<analog_net_t>(m_nlstate,"net." + t1.name());
+ auto anet = pool().make_owned<analog_net_t>(m_nlstate,"net." + t1.name());
auto anetp = anet.get();
m_nlstate.register_net(std::move(anet));
t1.set_net(anetp);
@@ -824,7 +824,7 @@ void setup_t::register_dynamic_log_devices()
auto nc = factory().factory_by_name("LOG")->Create(m_nlstate, name);
register_link(name + ".I", ll);
log().debug(" dynamic link {1}: <{2}>\n",ll, name);
- m_nlstate.add_dev(nc->name(), std::move(nc));
+ m_nlstate.register_device(nc->name(), std::move(nc));
}
}
}
@@ -970,19 +970,19 @@ class logic_family_std_proxy_t : public logic_family_desc_t
{
public:
logic_family_std_proxy_t() = default;
- pool_owned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist,
+ unique_pool_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist,
const pstring &name, logic_output_t *proxied) const override;
- pool_owned_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
+ unique_pool_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const override;
};
-pool_owned_ptr<devices::nld_base_d_to_a_proxy> logic_family_std_proxy_t::create_d_a_proxy(netlist_state_t &anetlist,
+unique_pool_ptr<devices::nld_base_d_to_a_proxy> logic_family_std_proxy_t::create_d_a_proxy(netlist_state_t &anetlist,
const pstring &name, logic_output_t *proxied) const
{
- return pool().make_poolptr<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
+ return pool().make_unique<devices::nld_d_to_a_proxy>(anetlist, name, proxied);
}
-pool_owned_ptr<devices::nld_base_a_to_d_proxy> logic_family_std_proxy_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
+unique_pool_ptr<devices::nld_base_a_to_d_proxy> logic_family_std_proxy_t::create_a_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *proxied) const
{
- return pool().make_poolptr<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
+ return pool().make_unique<devices::nld_a_to_d_proxy>(anetlist, name, proxied);
}
@@ -1043,7 +1043,7 @@ void setup_t::delete_empty_nets()
{
m_nlstate.nets().erase(
std::remove_if(m_nlstate.nets().begin(), m_nlstate.nets().end(),
- [](pool_owned_ptr<detail::net_t> &x)
+ [](owned_pool_ptr<detail::net_t> &x)
{
if (x->num_cons() == 0)
{
@@ -1071,7 +1071,7 @@ void setup_t::prepare_to_run()
if ( factory().is_class<devices::NETLIB_NAME(solver)>(e.second)
|| factory().is_class<devices::NETLIB_NAME(netlistparams)>(e.second))
{
- m_nlstate.add_dev(e.first, pool_owned_ptr<device_t>(e.second->Create(m_nlstate, e.first)));
+ m_nlstate.register_device(e.first, e.second->Create(m_nlstate, e.first));
}
}
@@ -1093,8 +1093,8 @@ void setup_t::prepare_to_run()
if ( !factory().is_class<devices::NETLIB_NAME(solver)>(e.second)
&& !factory().is_class<devices::NETLIB_NAME(netlistparams)>(e.second))
{
- auto dev = pool_owned_ptr<device_t>(e.second->Create(m_nlstate, e.first));
- m_nlstate.add_dev(dev->name(), std::move(dev));
+ auto dev = e.second->Create(m_nlstate, e.first);
+ m_nlstate.register_device(dev->name(), std::move(dev));
}
}
@@ -1151,7 +1151,7 @@ void setup_t::prepare_to_run()
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);
+ m_nlstate.remove_device(t);
}
else
{
@@ -1175,7 +1175,6 @@ void setup_t::prepare_to_run()
for (auto &n : m_nlstate.nets())
for (auto & term : n->core_terms())
{
- //core_device_t *dev = reinterpret_cast<core_device_t *>(term->m_delegate.object());
core_device_t *dev = &term->device();
dev->set_default_delegate(*term);
}
diff --git a/src/lib/netlist/nltypes.h b/src/lib/netlist/nltypes.h
index 91dc83547e5..3fb78d5e35b 100644
--- a/src/lib/netlist/nltypes.h
+++ b/src/lib/netlist/nltypes.h
@@ -99,7 +99,7 @@ namespace netlist
*
*/
template <typename T>
- using pool_owned_ptr = nlmempool::owned_pool_ptr<T>;
+ using owned_pool_ptr = nlmempool::owned_pool_ptr<T>;
/*! Unique pointer type for pooled allocations.
*
diff --git a/src/lib/netlist/plib/pmempool.h b/src/lib/netlist/plib/pmempool.h
index 7dff02cf573..7a59097afe3 100644
--- a/src/lib/netlist/plib/pmempool.h
+++ b/src/lib/netlist/plib/pmempool.h
@@ -189,7 +189,7 @@ namespace plib {
using unique_pool_ptr = std::unique_ptr<T, arena_deleter<mempool, T>>;
template<typename T, typename... Args>
- owned_pool_ptr<T> make_poolptr(Args&&... args)
+ owned_pool_ptr<T> make_owned(Args&&... args)
{
auto *mem = this->allocate(alignof(T), sizeof(T));
try
diff --git a/src/lib/netlist/prg/nltool.cpp b/src/lib/netlist/prg/nltool.cpp
index f7ff843801c..11ca83c9aa5 100644
--- a/src/lib/netlist/prg/nltool.cpp
+++ b/src/lib/netlist/prg/nltool.cpp
@@ -714,7 +714,7 @@ void tool_app_t::listdevices()
nt.setup().prepare_to_run();
- std::vector<netlist::pool_owned_ptr<netlist::core_device_t>> devs;
+ std::vector<netlist::unique_pool_ptr<netlist::core_device_t>> devs;
for (auto & f : list)
{
diff --git a/src/lib/netlist/solver/nld_matrix_solver.cpp b/src/lib/netlist/solver/nld_matrix_solver.cpp
index 2ad6cae7903..d081ad06464 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.cpp
+++ b/src/lib/netlist/solver/nld_matrix_solver.cpp
@@ -114,9 +114,9 @@ namespace devices
{
pstring nname(this->name() + "." + pstring(plib::pfmt("m{1}")(m_inps.size())));
nl_assert(p->net().is_analog());
- auto net_proxy_output_u = pool().make_poolptr<proxied_analog_output_t>(*this, nname, static_cast<analog_net_t *>(&p->net()));
+ auto net_proxy_output_u = pool().make_unique<proxied_analog_output_t>(*this, nname, static_cast<analog_net_t *>(&p->net()));
net_proxy_output = net_proxy_output_u.get();
- m_inps.push_back(std::move(net_proxy_output_u));
+ m_inps.emplace_back(std::move(net_proxy_output_u));
}
net_proxy_output->net().add_terminal(*p);
// FIXME: repeated calling - kind of brute force
diff --git a/src/lib/netlist/solver/nld_matrix_solver.h b/src/lib/netlist/solver/nld_matrix_solver.h
index c96163a7e54..1a452917f0f 100644
--- a/src/lib/netlist/solver/nld_matrix_solver.h
+++ b/src/lib/netlist/solver/nld_matrix_solver.h
@@ -370,7 +370,7 @@ namespace devices
std::vector<plib::unique_ptr<terms_for_net_t>> m_terms;
- std::vector<pool_owned_ptr<proxied_analog_output_t>> m_inps;
+ std::vector<unique_pool_ptr<proxied_analog_output_t>> m_inps;
std::vector<plib::unique_ptr<terms_for_net_t>> m_rails_temp;
diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp
index 397ef0ef4b0..c428a08ce25 100644
--- a/src/lib/netlist/solver/nld_solver.cpp
+++ b/src/lib/netlist/solver/nld_solver.cpp
@@ -227,13 +227,13 @@ namespace devices
switch (net_count)
{
- #if 0
case 1:
ms = plib::make_unique<matrix_solver_direct1_t<double>>(state(), sname, &m_params);
break;
case 2:
ms = plib::make_unique<matrix_solver_direct2_t<double>>(state(), sname, &m_params);
break;
+#if 1
case 3:
ms = create_solver<double, 3>(3, sname);
break;