diff options
Diffstat (limited to 'src/lib/netlist/nl_factory.cpp')
-rw-r--r-- | src/lib/netlist/nl_factory.cpp | 140 |
1 files changed, 61 insertions, 79 deletions
diff --git a/src/lib/netlist/nl_factory.cpp b/src/lib/netlist/nl_factory.cpp index 2bb49590c4b..1f0ac35c6c4 100644 --- a/src/lib/netlist/nl_factory.cpp +++ b/src/lib/netlist/nl_factory.cpp @@ -10,102 +10,84 @@ #include "nl_factory.h" #include "nl_base.h" +#include "nl_errstr.h" #include "nl_setup.h" #include "plib/putil.h" -#include "nl_errstr.h" namespace netlist { namespace factory { -class NETLIB_NAME(wrapper) : public device_t -{ -public: - NETLIB_NAME(wrapper)(netlist_t &anetlist, const pstring &name) - : device_t(anetlist, name) + class NETLIB_NAME(wrapper) : public device_t + { + public: + NETLIB_NAME(wrapper)(netlist_state_t &anetlist, const pstring &name) + : device_t(anetlist, name) + { + } + protected: + NETLIB_RESETI() { } + NETLIB_UPDATEI() { } + }; + + element_t::element_t(const pstring &name, const pstring &classname, + const pstring &def_param, const pstring &sourcefile) + : m_name(name), m_classname(classname), m_def_param(def_param), + m_sourcefile(sourcefile) { } -protected: - NETLIB_RESETI(); - NETLIB_UPDATEI(); -}; - + element_t::element_t(const pstring &name, const pstring &classname, + const pstring &def_param) + : m_name(name), m_classname(classname), m_def_param(def_param), + m_sourcefile("<unknown>") + { + } -element_t::element_t(const pstring &name, const pstring &classname, - const pstring &def_param, const pstring &sourcefile) - : m_name(name), m_classname(classname), m_def_param(def_param), - m_sourcefile(sourcefile) -{ -} - -element_t::element_t(const pstring &name, const pstring &classname, - const pstring &def_param) - : m_name(name), m_classname(classname), m_def_param(def_param), - m_sourcefile("<unknown>") -{ -} - -element_t::~element_t() -{ -} - -// ---------------------------------------------------------------------------------------- -// net_device_t_base_factory -// ---------------------------------------------------------------------------------------- - -list_t::list_t( setup_t &setup) -: m_setup(setup) -{ -} - -list_t::~list_t() -{ - clear(); -} - -void list_t::register_device(std::unique_ptr<element_t> &&factory) -{ - for (auto & e : *this) - if (e->name() == factory->name()) - m_setup.log().fatal(MF_1_FACTORY_ALREADY_CONTAINS_1, factory->name()); - push_back(std::move(factory)); -} + // ---------------------------------------------------------------------------------------- + // net_device_t_base_factory + // ---------------------------------------------------------------------------------------- -factory::element_t * list_t::factory_by_name(const pstring &devname) -{ - for (auto & e : *this) + list_t::list_t(log_type &alog) + : m_log(alog) { - if (e->name() == devname) - return e.get(); } - m_setup.log().fatal(MF_1_CLASS_1_NOT_FOUND, devname); - return nullptr; // appease code analysis -} - -// ----------------------------------------------------------------------------- -// factory_lib_entry_t: factory class to wrap macro based chips/elements -// ----------------------------------------------------------------------------- + void list_t::register_device(plib::unique_ptr<element_t> &&factory) + { + for (auto & e : *this) + if (e->name() == factory->name()) + m_log.fatal(MF_1_FACTORY_ALREADY_CONTAINS_1, factory->name()); + push_back(std::move(factory)); + } -plib::owned_ptr<device_t> library_element_t::Create(netlist_t &anetlist, const pstring &name) -{ - return plib::owned_ptr<device_t>::Create<NETLIB_NAME(wrapper)>(anetlist, name); -} + factory::element_t * list_t::factory_by_name(const pstring &devname) + { + for (auto & e : *this) + { + if (e->name() == devname) + return e.get(); + } + + m_log.fatal(MF_1_CLASS_1_NOT_FOUND, devname); + return nullptr; // appease code analysis + } -void library_element_t::macro_actions(netlist_t &anetlist, const pstring &name) -{ - anetlist.setup().namespace_push(name); - anetlist.setup().include(this->name()); - anetlist.setup().namespace_pop(); -} + // ----------------------------------------------------------------------------- + // factory_lib_entry_t: factory class to wrap macro based chips/elements + // ----------------------------------------------------------------------------- -NETLIB_RESET(wrapper) -{ -} + pool_owned_ptr<device_t> library_element_t::Create(netlist_state_t &anetlist, const pstring &name) + { + return pool().make_poolptr<NETLIB_NAME(wrapper)>(anetlist, name); + } -NETLIB_UPDATE(wrapper) -{ -} + void library_element_t::macro_actions(nlparse_t &nparser, const pstring &name) + { + nparser.namespace_push(name); + nparser.include(this->name()); + nparser.namespace_pop(); + } -} } +} // namespace factory + } // namespace netlist |