summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/nl_base.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/nl_base.h')
-rw-r--r--src/lib/netlist/nl_base.h32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h
index 62a5104a021..10df59029b8 100644
--- a/src/lib/netlist/nl_base.h
+++ b/src/lib/netlist/nl_base.h
@@ -22,6 +22,7 @@
#include "plib/ppmf.h"
#include "plib/pstate.h"
#include "plib/pstream.h"
+#include "plib/pmempool.h"
#include "netlist_types.h"
#include "nl_errstr.h"
@@ -138,7 +139,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) std::unique_ptr< ns :: nld_ ## chip >
+#define NETLIB_SUBXX(ns, chip) poolptr< ns :: nld_ ## chip >
#define NETLIB_HANDLER(chip, name) void NETLIB_NAME(chip) :: name() NL_NOEXCEPT
#define NETLIB_UPDATE(chip) NETLIB_HANDLER(chip, update)
@@ -242,9 +243,9 @@ namespace netlist
virtual ~logic_family_desc_t() noexcept = default;
- virtual plib::owned_ptr<devices::nld_base_d_to_a_proxy> create_d_a_proxy(netlist_state_t &anetlist, const pstring &name,
+ virtual poolptr<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 plib::owned_ptr<devices::nld_base_a_to_d_proxy> create_a_d_proxy(netlist_state_t &anetlist, const pstring &name,
+ virtual poolptr<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; }
@@ -419,7 +420,8 @@ namespace netlist
void * operator new (size_t size, void *ptr) { plib::unused_var(size); return ptr; }
void operator delete (void *ptr, void *) { plib::unused_var(ptr); }
- void * operator new (size_t size);
+
+ void * operator new (size_t size) = delete;
void operator delete (void * mem);
protected:
~object_t() noexcept = default; // only childs should be destructible
@@ -1186,9 +1188,10 @@ namespace netlist
const setup_t &setup() const;
template<class C, typename... Args>
- void register_sub(const pstring &name, std::unique_ptr<C> &dev, const Args&... args)
+ void register_sub(const pstring &name, poolptr<C> &dev, const Args&... args)
{
- dev.reset(plib::palloc<C>(*this, name, args...));
+ //dev.reset(plib::palloc<C>(*this, name, args...));
+ dev = pool().make_poolptr<C>(*this, name, args...);
}
void register_subalias(const pstring &name, detail::core_terminal_t &term);
@@ -1263,13 +1266,14 @@ namespace netlist
// netlist_state__t
// -----------------------------------------------------------------------------
- class netlist_state_t : private plib::nocopyassignmove
+ class netlist_state_t
{
public:
- using nets_collection_type = std::vector<plib::owned_ptr<detail::net_t>>;
+
+ using nets_collection_type = std::vector<poolptr<detail::net_t>>;
/* need to preserve order of device creation ... */
- using devices_collection_type = std::vector<std::pair<pstring, plib::owned_ptr<core_device_t>>>;
+ using devices_collection_type = std::vector<std::pair<pstring, poolptr<core_device_t>>>;
netlist_state_t(const pstring &aname,
std::unique_ptr<callbacks_t> &&callbacks,
std::unique_ptr<setup_t> &&setup);
@@ -1302,7 +1306,6 @@ namespace netlist
plib::dynlib &lib() { return *m_lib; }
/* state handling */
-
plib::state_manager_t &run_state_manager() { return m_state; }
template<typename O, typename C>
@@ -1322,7 +1325,7 @@ namespace netlist
std::size_t find_net_id(const detail::net_t *net) const;
template <typename T>
- void register_net(plib::owned_ptr<T> &&net) { m_nets.push_back(std::move(net)); }
+ void register_net(poolptr<T> &&net) { m_nets.push_back(std::move(net)); }
template<class device_class>
inline std::vector<device_class *> get_device_list()
@@ -1338,7 +1341,7 @@ namespace netlist
}
template <typename T>
- void add_dev(const pstring &name, plib::owned_ptr<T> &&dev)
+ void add_dev(const pstring &name, poolptr<T> &&dev)
{
for (auto & d : m_devices)
if (d.first == name)
@@ -1393,6 +1396,8 @@ namespace netlist
/* sole use is to manage lifetime of net objects */
devices_collection_type m_devices;
+
+
};
// -----------------------------------------------------------------------------
@@ -1451,7 +1456,10 @@ namespace netlist
/* mostly rw */
netlist_time m_time;
devices::NETLIB_NAME(mainclock) * m_mainclock;
+
+ PALIGNAS_CACHELINE()
std::unique_ptr<netlist_state_t> m_state;
+ PALIGNAS_CACHELINE()
detail::queue_t m_queue;
devices::NETLIB_NAME(solver) * m_solver;