summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/netlist/analog/nld_solver.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/netlist/analog/nld_solver.c')
-rw-r--r--src/emu/netlist/analog/nld_solver.c43
1 files changed, 21 insertions, 22 deletions
diff --git a/src/emu/netlist/analog/nld_solver.c b/src/emu/netlist/analog/nld_solver.c
index bef3dcbcd77..6b3d7dbeb18 100644
--- a/src/emu/netlist/analog/nld_solver.c
+++ b/src/emu/netlist/analog/nld_solver.c
@@ -44,31 +44,31 @@ vector_ops_t *vector_ops_t::create_ops(const int size)
switch (size)
{
case 1:
- return new vector_ops_impl_t<1>();
+ return nl_alloc(vector_ops_impl_t<1>);
case 2:
- return new vector_ops_impl_t<2>();
+ return nl_alloc(vector_ops_impl_t<2>);
case 3:
- return new vector_ops_impl_t<3>();
+ return nl_alloc(vector_ops_impl_t<3>);
case 4:
- return new vector_ops_impl_t<4>();
+ return nl_alloc(vector_ops_impl_t<4>);
case 5:
- return new vector_ops_impl_t<5>();
+ return nl_alloc(vector_ops_impl_t<5>);
case 6:
- return new vector_ops_impl_t<6>();
+ return nl_alloc(vector_ops_impl_t<6>);
case 7:
- return new vector_ops_impl_t<7>();
+ return nl_alloc(vector_ops_impl_t<7>);
case 8:
- return new vector_ops_impl_t<8>();
+ return nl_alloc(vector_ops_impl_t<8>);
case 9:
- return new vector_ops_impl_t<9>();
+ return nl_alloc(vector_ops_impl_t<9>);
case 10:
- return new vector_ops_impl_t<10>();
+ return nl_alloc(vector_ops_impl_t<10>);
case 11:
- return new vector_ops_impl_t<11>();
+ return nl_alloc(vector_ops_impl_t<11>);
case 12:
- return new vector_ops_impl_t<12>();
+ return nl_alloc(vector_ops_impl_t<12>);
default:
- return new vector_ops_impl_t<0>(size);
+ return nl_alloc(vector_ops_impl_t<0>, size);
}
}
@@ -91,8 +91,6 @@ ATTR_COLD void terms_t::set_pointers()
m_term[i]->m_Idr1 = &m_Idr[i];
m_other_curanalog[i] = &m_term[i]->m_otherterm->net().as_analog().m_cur_Analog;
}
-
- m_ops = vector_ops_t::create_ops(m_gt.count());
}
// ----------------------------------------------------------------------------------------
@@ -112,7 +110,7 @@ ATTR_COLD netlist_matrix_solver_t::netlist_matrix_solver_t(const eSolverType typ
ATTR_COLD netlist_matrix_solver_t::~netlist_matrix_solver_t()
{
for (int i = 0; i < m_inps.count(); i++)
- delete m_inps[i];
+ global_free(m_inps[i]);
}
ATTR_COLD void netlist_matrix_solver_t::setup(netlist_analog_net_t::list_t &nets)
@@ -176,7 +174,7 @@ ATTR_COLD void netlist_matrix_solver_t::setup(netlist_analog_net_t::list_t &nets
if (net_proxy_output == NULL)
{
- net_proxy_output = new netlist_analog_output_t();
+ net_proxy_output = nl_alloc(netlist_analog_output_t);
net_proxy_output->init_object(*this, this->name() + "." + pstring::sprintf("m%d", m_inps.count()));
m_inps.add(net_proxy_output);
net_proxy_output->m_proxied_net = &p->net().as_analog();
@@ -380,7 +378,7 @@ NETLIB_NAME(solver)::~NETLIB_NAME(solver)()
while (e != NULL)
{
netlist_matrix_solver_t * const *en = m_mat_solvers.next(e);
- delete *e;
+ global_free(*e);
e = en;
}
@@ -435,15 +433,16 @@ template <int m_N, int _storage_N>
netlist_matrix_solver_t * NETLIB_NAME(solver)::create_solver(int size, const int gs_threshold, const bool use_specific)
{
if (use_specific && m_N == 1)
- return new netlist_matrix_solver_direct1_t(m_params);
+ return nl_alloc(netlist_matrix_solver_direct1_t, m_params);
else if (use_specific && m_N == 2)
- return new netlist_matrix_solver_direct2_t(m_params);
+ return nl_alloc(netlist_matrix_solver_direct2_t, m_params);
else
{
+ typedef netlist_matrix_solver_gauss_seidel_t<m_N,_storage_N> solver_N;
if (size >= gs_threshold)
- return new netlist_matrix_solver_gauss_seidel_t<m_N,_storage_N>(m_params, size);
+ return nl_alloc(solver_N, m_params, size);
else
- return new netlist_matrix_solver_direct_t<m_N, _storage_N>(m_params, size);
+ return nl_alloc(solver_N, m_params, size);
}
}