summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/netlist/nl_factory.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/netlist/nl_factory.c')
-rw-r--r--src/emu/netlist/nl_factory.c102
1 files changed, 102 insertions, 0 deletions
diff --git a/src/emu/netlist/nl_factory.c b/src/emu/netlist/nl_factory.c
new file mode 100644
index 00000000000..dc097c53069
--- /dev/null
+++ b/src/emu/netlist/nl_factory.c
@@ -0,0 +1,102 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/***************************************************************************
+
+ nl_factory.c
+
+ Discrete netlist implementation.
+
+****************************************************************************
+
+ Couriersud reserves the right to license the code under a less restrictive
+ license going forward.
+
+ Copyright Nicola Salmoria and the MAME team
+ All rights reserved.
+
+ Redistribution and use of this code or any derivative works are permitted
+ provided that the following conditions are met:
+
+ * Redistributions may not be sold, nor may they be used in a commercial
+ product or activity.
+
+ * Redistributions that are modified from the original source must include the
+ complete source code, including the source code for all components used by a
+ binary built from the modified sources. However, as a special exception, the
+ source code distributed need not include anything that is normally distributed
+ (in either source or binary form) with the major components (compiler, kernel,
+ and so on) of the operating system on which the executable runs, unless that
+ component itself accompanies the executable.
+
+ * Redistributions must reproduce the above copyright notice, this list of
+ conditions and the following disclaimer in the documentation and/or other
+ materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+
+
+****************************************************************************/
+
+#include "nl_factory.h"
+#include "nl_setup.h"
+
+netlist_factory_t::netlist_factory_t()
+{
+}
+
+netlist_factory_t::~netlist_factory_t()
+{
+ for (net_device_t_base_factory * const *e = m_list.first(); e != NULL; e = m_list.next(e))
+ {
+ net_device_t_base_factory *p = *e;
+ global_free(p);
+ }
+ m_list.clear();
+}
+
+netlist_device_t *netlist_factory_t::new_device_by_classname(const pstring &classname, netlist_setup_t &setup) const
+{
+ for (net_device_t_base_factory * const *e = m_list.first(); e != NULL; e = m_list.next(e))
+ {
+ net_device_t_base_factory *p = *e;
+ if (strcmp(p->classname(), classname) == 0)
+ {
+ netlist_device_t *ret = p->Create();
+ return ret;
+ }
+ p++;
+ }
+ setup.netlist().error("Class %s not found!\n", classname.cstr());
+ return NULL; // appease code analysis
+}
+
+netlist_device_t *netlist_factory_t::new_device_by_name(const pstring &name, netlist_setup_t &setup) const
+{
+ net_device_t_base_factory *f = factory_by_name(name, setup);
+ return f->Create();
+}
+
+net_device_t_base_factory * netlist_factory_t::factory_by_name(const pstring &name, netlist_setup_t &setup) const
+{
+ for (net_device_t_base_factory * const *e = m_list.first(); e != NULL; e = m_list.next(e))
+ {
+ net_device_t_base_factory *p = *e;
+ if (strcmp(p->name(), name) == 0)
+ {
+ return p;
+ }
+ p++;
+ }
+ setup.netlist().error("Class %s not found!\n", name.cstr());
+ return NULL; // appease code analysis
+}