mirror of
https://github.com/holub/mame
synced 2025-04-23 17:00:53 +03:00
Fix factory code. (nw)
This commit is contained in:
parent
fe8476956a
commit
4c7bb29445
@ -61,9 +61,9 @@ NETLIST_END()
|
||||
#define ENTRY1(nic, name, defparam) factory.register_device<nic>( # 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
|
||||
|
@ -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
|
||||
|
@ -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<device_t> (*)(netlist_t &anetlist, const pstring &name);
|
||||
|
||||
template <typename T>
|
||||
plib::owned_ptr<device_t> device_creator_t(netlist_t &anetlist, const pstring &name)
|
||||
{
|
||||
return plib::owned_ptr<device_t>::Create<T>(anetlist, name);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// inline implementations
|
||||
|
@ -67,12 +67,6 @@ void factory_list_t::error(const pstring &s)
|
||||
m_setup.log().fatal("{1}", s);
|
||||
}
|
||||
|
||||
plib::owned_ptr<device_t> 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)
|
||||
|
@ -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 <class device_class>
|
||||
template <class C>
|
||||
class factory_t : public base_factory_t
|
||||
{
|
||||
P_PREVENT_COPYING(factory_t)
|
||||
@ -58,27 +60,10 @@ namespace netlist
|
||||
|
||||
plib::owned_ptr<device_t> Create(netlist_t &anetlist, const pstring &name) override
|
||||
{
|
||||
return plib::owned_ptr<device_t>::Create<device_class>(anetlist, name);
|
||||
return plib::owned_ptr<device_t>::Create<C>(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<device_t> 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<plib::owned_ptr<base_factory_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<base_factory_t>::Create<factoryx_t>(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<device_t> new_device_by_name(const pstring &devname, netlist_t &anetlist, const pstring &name);
|
||||
base_factory_t * factory_by_name(const pstring &devname);
|
||||
|
||||
template <class C>
|
||||
@ -123,6 +99,20 @@ namespace netlist
|
||||
setup_t &m_setup;
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// factory_creator_ptr_t
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
using factory_creator_ptr_t = plib::owned_ptr<base_factory_t> (*)(const pstring &name, const pstring &classname,
|
||||
const pstring &def_param);
|
||||
|
||||
template <typename T>
|
||||
plib::owned_ptr<base_factory_t> factory_creator_t(const pstring &name, const pstring &classname,
|
||||
const pstring &def_param)
|
||||
{
|
||||
return plib::owned_ptr<base_factory_t>::Create<factory_t<T>>(name, classname, def_param);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif /* NLFACTORY_H_ */
|
||||
|
@ -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));
|
||||
|
Loading…
Reference in New Issue
Block a user