From 4c7bb29445332471a9cce0dbd268a36867221978 Mon Sep 17 00:00:00 2001 From: couriersud Date: Sun, 29 May 2016 19:10:38 +0200 Subject: [PATCH] Fix factory code. (nw) --- src/lib/netlist/devices/net_lib.cpp | 4 +-- src/lib/netlist/nl_base.cpp | 16 +++++----- src/lib/netlist/nl_base.h | 13 -------- src/lib/netlist/nl_factory.cpp | 6 ---- src/lib/netlist/nl_factory.h | 46 +++++++++++------------------ src/lib/netlist/nl_setup.cpp | 2 +- 6 files changed, 29 insertions(+), 58 deletions(-) diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index d8fed3d27c8..2a481daaf5d 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -61,9 +61,9 @@ NETLIST_END() #define ENTRY1(nic, name, defparam) factory.register_device( # name, xstr(nic), defparam ); #define ENTRY(nic, name, defparam) ENTRY1(NETLIB_NAME(nic), name, defparam) -#define NETLIB_DEVICE_DECL(chip) extern device_creator_ptr_t decl_ ## chip; +#define NETLIB_DEVICE_DECL(chip) extern factory_creator_ptr_t decl_ ## chip; -#define ENTRYX1(nic, name, defparam, decl) factory.register_device( # name, xstr(nic), defparam, decl ); +#define ENTRYX1(nic, name, defparam, decl) factory.register_device( decl (# name, xstr(nic), defparam) ); #define ENTRYX(nic, name, defparam) { NETLIB_DEVICE_DECL(nic) ENTRYX1(NETLIB_NAME(nic), name, defparam, decl_ ## nic) } namespace netlist diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index 970f04326ed..c4ce27a71e4 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -1071,15 +1071,15 @@ namespace netlist namespace devices { -// ---------------------------------------------------------------------------------------- -// mainclock -// ---------------------------------------------------------------------------------------- + // ---------------------------------------------------------------------------------------- + // mainclock + // ---------------------------------------------------------------------------------------- -ATTR_HOT /* inline */ void NETLIB_NAME(mainclock)::mc_update(logic_net_t &net) -{ - net.toggle_new_Q(); - net.update_devs(); -} + ATTR_HOT /* inline */ void NETLIB_NAME(mainclock)::mc_update(logic_net_t &net) + { + net.toggle_new_Q(); + net.update_devs(); + } } //namespace devices diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 62b5e3748f0..427fa100a22 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -236,8 +236,6 @@ class NETLIB_NAME(name) : public device_t #define NETLIB_UPDATE_TERMINALS(chip) ATTR_HOT void NETLIB_NAME(chip) :: update_terminals(void) -#define NETLIB_DEVICE_IMPL(chip) device_creator_ptr_t decl_ ## chip = device_creator_t< NETLIB_NAME(chip) >; - //============================================================ // Asserts //============================================================ @@ -1301,17 +1299,6 @@ protected: plib::dynlib *m_lib; // external lib needs to be loaded as long as netlist exists }; - // ----------------------------------------------------------------------------- - // base_device_creator_t - // ----------------------------------------------------------------------------- - - using device_creator_ptr_t = plib::owned_ptr (*)(netlist_t &anetlist, const pstring &name); - - template - plib::owned_ptr device_creator_t(netlist_t &anetlist, const pstring &name) - { - return plib::owned_ptr::Create(anetlist, name); - } // ----------------------------------------------------------------------------- // inline implementations diff --git a/src/lib/netlist/nl_factory.cpp b/src/lib/netlist/nl_factory.cpp index 7a9a61668bd..ca349e7dd67 100644 --- a/src/lib/netlist/nl_factory.cpp +++ b/src/lib/netlist/nl_factory.cpp @@ -67,12 +67,6 @@ void factory_list_t::error(const pstring &s) m_setup.log().fatal("{1}", s); } -plib::owned_ptr factory_list_t::new_device_by_name(const pstring &devname, netlist_t &anetlist, const pstring &name) -{ - base_factory_t *f = factory_by_name(devname); - return f->Create(anetlist, name); -} - base_factory_t * factory_list_t::factory_by_name(const pstring &devname) { for (auto & e : *this) diff --git a/src/lib/netlist/nl_factory.h b/src/lib/netlist/nl_factory.h index a27728e18ab..d1bd0b6f728 100644 --- a/src/lib/netlist/nl_factory.h +++ b/src/lib/netlist/nl_factory.h @@ -15,6 +15,8 @@ #include "plib/plists.h" #include "nl_base.h" +#define NETLIB_DEVICE_IMPL(chip) factory_creator_ptr_t decl_ ## chip = factory_creator_t< NETLIB_NAME(chip) >; + namespace netlist { @@ -47,7 +49,7 @@ namespace netlist pstring m_def_param; /* default parameter */ }; - template + template class factory_t : public base_factory_t { P_PREVENT_COPYING(factory_t) @@ -58,27 +60,10 @@ namespace netlist plib::owned_ptr Create(netlist_t &anetlist, const pstring &name) override { - return plib::owned_ptr::Create(anetlist, name); + return plib::owned_ptr::Create(anetlist, name); } }; - class factoryx_t : public base_factory_t - { - P_PREVENT_COPYING(factoryx_t) - public: - factoryx_t(const pstring &name, const pstring &classname, - const pstring &def_param, device_creator_ptr_t ptr) - : base_factory_t(name, classname, def_param) - , m_ptr(ptr) { } - - plib::owned_ptr Create(netlist_t &anetlist, const pstring &name) override - { - return m_ptr(anetlist, name); - } - private: - device_creator_ptr_t m_ptr; - }; - class factory_list_t : public plib::pvector_t> { public: @@ -100,15 +85,6 @@ namespace netlist push_back(std::move(factory)); } - void register_device(const pstring &name, const pstring &classname, - const pstring &def_param, device_creator_ptr_t ptr) - { - register_device(plib::owned_ptr::Create(name, classname, def_param, ptr)); - } - - //ATTR_COLD device_t *new_device_by_classname(const pstring &classname) const; - // FIXME: legacy, should use factory_by_name - plib::owned_ptr new_device_by_name(const pstring &devname, netlist_t &anetlist, const pstring &name); base_factory_t * factory_by_name(const pstring &devname); template @@ -123,6 +99,20 @@ namespace netlist setup_t &m_setup; }; + // ----------------------------------------------------------------------------- + // factory_creator_ptr_t + // ----------------------------------------------------------------------------- + + using factory_creator_ptr_t = plib::owned_ptr (*)(const pstring &name, const pstring &classname, + const pstring &def_param); + + template + plib::owned_ptr factory_creator_t(const pstring &name, const pstring &classname, + const pstring &def_param) + { + return plib::owned_ptr::Create>(name, classname, def_param); + } + } #endif /* NLFACTORY_H_ */ diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index 14d435e6b1a..8fda3d2f8f4 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -853,7 +853,7 @@ void setup_t::start_devices() for (pstring ll : loglist) { pstring name = "log_" + ll; - auto nc = factory().new_device_by_name("LOG", netlist(), name); + auto nc = factory().factory_by_name("LOG")->Create(netlist(), name); register_link(name + ".I", ll); log().debug(" dynamic link {1}: <{2}>\n",ll, name); register_dev_s(std::move(nc));