diff options
Diffstat (limited to 'src/lib/netlist/nl_base.h')
-rw-r--r-- | src/lib/netlist/nl_base.h | 32 |
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; |