summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2019-02-09 00:21:14 +0100
committer couriersud <couriersud@gmx.org>2019-02-09 00:21:14 +0100
commit5ea6e079f31ec22a58d84a190f8d36b2492bace1 (patch)
tree7a637e5e3b52c1857093985732a8ae13b5f96bb0
parent8daa6e0a0db5a3b31fc58bbe74e7fe97d136de94 (diff)
netlist: constants are now constexpr functions. (nw)
-rw-r--r--src/lib/netlist/analog/nlid_fourterm.cpp24
-rw-r--r--src/lib/netlist/analog/nlid_fourterm.h4
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.cpp4
-rw-r--r--src/lib/netlist/analog/nlid_twoterm.h2
-rw-r--r--src/lib/netlist/devices/nld_4066.cpp6
-rw-r--r--src/lib/netlist/devices/nld_4316.cpp4
-rw-r--r--src/lib/netlist/devices/nld_mm5837.cpp4
-rw-r--r--src/lib/netlist/devices/nld_schmitt.cpp8
-rw-r--r--src/lib/netlist/devices/nlid_proxy.cpp4
-rw-r--r--src/lib/netlist/nl_setup.cpp4
-rw-r--r--src/lib/netlist/plib/gmres.h6
-rw-r--r--src/lib/netlist/plib/putil.h7
-rw-r--r--src/lib/netlist/solver/nld_ms_direct.h2
-rw-r--r--src/lib/netlist/solver/nld_ms_sor.h8
-rw-r--r--src/lib/netlist/solver/nld_ms_sor_mat.h4
-rw-r--r--src/mame/audio/nl_kidniki.cpp4
16 files changed, 48 insertions, 47 deletions
diff --git a/src/lib/netlist/analog/nlid_fourterm.cpp b/src/lib/netlist/analog/nlid_fourterm.cpp
index f4451c55023..9323e7fc649 100644
--- a/src/lib/netlist/analog/nlid_fourterm.cpp
+++ b/src/lib/netlist/analog/nlid_fourterm.cpp
@@ -24,16 +24,16 @@ namespace netlist
NETLIB_RESET(VCCS)
{
const nl_double m_mult = m_G() * m_gfac; // 1.0 ==> 1V ==> 1A
- const nl_double GI = plib::constants<nl_double>::one / m_RI();
+ const nl_double GI = plib::constants<nl_double>::one() / m_RI();
m_IP.set(GI);
m_IN.set(GI);
- m_OP.set(m_mult, plib::constants<nl_double>::zero);
- m_OP1.set(-m_mult, plib::constants<nl_double>::zero);
+ m_OP.set(m_mult, plib::constants<nl_double>::zero());
+ m_OP1.set(-m_mult, plib::constants<nl_double>::zero());
- m_ON.set(-m_mult, plib::constants<nl_double>::zero);
- m_ON1.set(m_mult, plib::constants<nl_double>::zero);
+ m_ON.set(-m_mult, plib::constants<nl_double>::zero());
+ m_ON1.set(m_mult, plib::constants<nl_double>::zero());
}
NETLIB_UPDATE(VCCS)
@@ -79,11 +79,11 @@ NETLIB_UPDATE_TERMINALS(LVCCS)
const nl_double beta = m_mult * (1.0 - X*X);
const nl_double I = m_cur_limit() * X - beta * m_vi;
- m_OP.set(beta, plib::constants<nl_double>::zero, I);
- m_OP1.set(-beta, plib::constants<nl_double>::zero);
+ m_OP.set(beta, plib::constants<nl_double>::zero(), I);
+ m_OP1.set(-beta, plib::constants<nl_double>::zero());
- m_ON.set(-beta, plib::constants<nl_double>::zero, -I);
- m_ON1.set(beta, plib::constants<nl_double>::zero);
+ m_ON.set(-beta, plib::constants<nl_double>::zero(), -I);
+ m_ON1.set(beta, plib::constants<nl_double>::zero());
}
// ----------------------------------------------------------------------------------------
@@ -106,11 +106,11 @@ NETLIB_UPDATE_PARAM(CCCS)
NETLIB_RESET(VCVS)
{
- m_gfac = plib::constants<nl_double>::one / m_RO();
+ m_gfac = plib::constants<nl_double>::one() / m_RO();
NETLIB_NAME(VCCS)::reset();
- m_OP2.set(plib::constants<nl_double>::one / m_RO());
- m_ON2.set(plib::constants<nl_double>::one / m_RO());
+ m_OP2.set(plib::constants<nl_double>::one() / m_RO());
+ m_ON2.set(plib::constants<nl_double>::one() / m_RO());
}
} //namespace analog
diff --git a/src/lib/netlist/analog/nlid_fourterm.h b/src/lib/netlist/analog/nlid_fourterm.h
index 800a9d1cfb8..016f5403c47 100644
--- a/src/lib/netlist/analog/nlid_fourterm.h
+++ b/src/lib/netlist/analog/nlid_fourterm.h
@@ -51,7 +51,7 @@ namespace netlist {
{
connect(m_OP, m_OP1);
connect(m_ON, m_ON1);
- m_gfac = plib::constants<nl_double>::one;
+ m_gfac = plib::constants<nl_double>::one();
}
param_double_t m_G;
@@ -129,7 +129,7 @@ namespace netlist {
public:
NETLIB_CONSTRUCTOR_DERIVED(CCCS, VCCS)
{
- m_gfac = plib::constants<nl_double>::one / m_RI();
+ m_gfac = plib::constants<nl_double>::one() / m_RI();
}
protected:
diff --git a/src/lib/netlist/analog/nlid_twoterm.cpp b/src/lib/netlist/analog/nlid_twoterm.cpp
index e1151083317..84cf5ed7b53 100644
--- a/src/lib/netlist/analog/nlid_twoterm.cpp
+++ b/src/lib/netlist/analog/nlid_twoterm.cpp
@@ -145,7 +145,7 @@ NETLIB_RESET(POT)
v = (std::exp(v) - 1.0) / (std::exp(1.0) - 1.0);
m_R1.set_R(std::max(m_R() * v, exec().gmin()));
- m_R2.set_R(std::max(m_R() * (plib::constants<nl_double>::one - v), exec().gmin()));
+ m_R2.set_R(std::max(m_R() * (plib::constants<nl_double>::one() - v), exec().gmin()));
}
NETLIB_UPDATE_PARAM(POT)
@@ -158,7 +158,7 @@ NETLIB_UPDATE_PARAM(POT)
v = (std::exp(v) - 1.0) / (std::exp(1.0) - 1.0);
m_R1.set_R(std::max(m_R() * v, exec().gmin()));
- m_R2.set_R(std::max(m_R() * (plib::constants<nl_double>::one - v), exec().gmin()));
+ m_R2.set_R(std::max(m_R() * (plib::constants<nl_double>::one() - v), exec().gmin()));
}
diff --git a/src/lib/netlist/analog/nlid_twoterm.h b/src/lib/netlist/analog/nlid_twoterm.h
index aa165d58a4e..73ea2b92aed 100644
--- a/src/lib/netlist/analog/nlid_twoterm.h
+++ b/src/lib/netlist/analog/nlid_twoterm.h
@@ -123,7 +123,7 @@ NETLIB_OBJECT_DERIVED(R_base, twoterm)
public:
void set_R(const nl_double R)
{
- const nl_double G = plib::constants<nl_double>::one / R;
+ const nl_double G = plib::constants<nl_double>::one() / R;
set_mat( G, -G, 0.0,
-G, G, 0.0);
}
diff --git a/src/lib/netlist/devices/nld_4066.cpp b/src/lib/netlist/devices/nld_4066.cpp
index cafd6c64476..9b7672e00c2 100644
--- a/src/lib/netlist/devices/nld_4066.cpp
+++ b/src/lib/netlist/devices/nld_4066.cpp
@@ -41,7 +41,7 @@ namespace netlist
{
// Start in off condition
// FIXME: is ROFF correct?
- m_R.set_R(plib::constants<nl_double>::one / exec().gmin());
+ m_R.set_R(plib::constants<nl_double>::one() / exec().gmin());
}
@@ -56,13 +56,13 @@ namespace netlist
if (in < low)
{
- R = plib::constants<nl_double>::one / exec().gmin();
+ R = plib::constants<nl_double>::one() / exec().gmin();
}
else if (in > high)
{
R = rON;
}
- if (R > plib::constants<nl_double>::zero)
+ if (R > plib::constants<nl_double>::zero())
{
m_R.update();
m_R.set_R(R);
diff --git a/src/lib/netlist/devices/nld_4316.cpp b/src/lib/netlist/devices/nld_4316.cpp
index c34a0602147..c8ee1a90643 100644
--- a/src/lib/netlist/devices/nld_4316.cpp
+++ b/src/lib/netlist/devices/nld_4316.cpp
@@ -38,7 +38,7 @@ namespace netlist { namespace devices {
NETLIB_RESET(CD4316_GATE)
{
- m_R.set_R(plib::constants<nl_double>::one / exec().gmin());
+ m_R.set_R(plib::constants<nl_double>::one() / exec().gmin());
}
NETLIB_UPDATE(CD4316_GATE)
@@ -47,7 +47,7 @@ namespace netlist { namespace devices {
if (m_S() && !m_E())
m_R.set_R(m_base_r());
else
- m_R.set_R(plib::constants<nl_double>::one / exec().gmin());
+ m_R.set_R(plib::constants<nl_double>::one() / exec().gmin());
m_R.solve_later(NLTIME_FROM_NS(1));
}
diff --git a/src/lib/netlist/devices/nld_mm5837.cpp b/src/lib/netlist/devices/nld_mm5837.cpp
index 93ba4683a0a..79f1f08dec6 100644
--- a/src/lib/netlist/devices/nld_mm5837.cpp
+++ b/src/lib/netlist/devices/nld_mm5837.cpp
@@ -69,7 +69,7 @@ namespace netlist
{
//m_V0.initial(0.0);
//m_RV.do_reset();
- m_RV.set(plib::constants<nl_double>::one / R_LOW, 0.0, 0.0);
+ m_RV.set(plib::constants<nl_double>::one() / R_LOW, 0.0, 0.0);
m_inc = netlist_time::from_double(1.0 / m_FREQ());
if (m_FREQ() < 24000 || m_FREQ() > 56000)
log().warning(MW_1_FREQUENCY_OUTSIDE_OF_SPECS_1, m_FREQ());
@@ -108,7 +108,7 @@ namespace netlist
// We only need to update the net first if this is a time stepping net
if (m_is_timestep)
m_RV.update();
- m_RV.set(plib::constants<nl_double>::one / R, V, plib::constants<nl_double>::zero);
+ m_RV.set(plib::constants<nl_double>::one() / R, V, plib::constants<nl_double>::zero());
m_RV.solve_later(NLTIME_FROM_NS(1));
}
diff --git a/src/lib/netlist/devices/nld_schmitt.cpp b/src/lib/netlist/devices/nld_schmitt.cpp
index ed3783535a0..1ca486ba9be 100644
--- a/src/lib/netlist/devices/nld_schmitt.cpp
+++ b/src/lib/netlist/devices/nld_schmitt.cpp
@@ -85,8 +85,8 @@ namespace netlist
m_RVI.reset();
m_RVO.reset();
m_is_timestep = m_RVO.m_P.net().solver()->has_timestep_devices();
- m_RVI.set(plib::constants<nl_double>::one / m_model.m_RI, m_model.m_VI, 0.0);
- m_RVO.set(plib::constants<nl_double>::one / m_model.m_ROL, m_model.m_VOL, 0.0);
+ m_RVI.set(plib::constants<nl_double>::one() / m_model.m_RI, m_model.m_VI, 0.0);
+ m_RVO.set(plib::constants<nl_double>::one() / m_model.m_ROL, m_model.m_VOL, 0.0);
}
NETLIB_UPDATEI()
@@ -98,7 +98,7 @@ namespace netlist
m_last_state = 0;
if (m_is_timestep)
m_RVO.update();
- m_RVO.set(plib::constants<nl_double>::one / m_model.m_ROH, m_model.m_VOH, 0.0);
+ m_RVO.set(plib::constants<nl_double>::one() / m_model.m_ROH, m_model.m_VOH, 0.0);
m_RVO.solve_later();
}
}
@@ -109,7 +109,7 @@ namespace netlist
m_last_state = 1;
if (m_is_timestep)
m_RVO.update();
- m_RVO.set(plib::constants<nl_double>::one / m_model.m_ROL, m_model.m_VOL, 0.0);
+ m_RVO.set(plib::constants<nl_double>::one() / m_model.m_ROL, m_model.m_VOL, 0.0);
m_RVO.solve_later();
}
}
diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp
index 44d3d3af9a5..6c4d553abdb 100644
--- a/src/lib/netlist/devices/nlid_proxy.cpp
+++ b/src/lib/netlist/devices/nlid_proxy.cpp
@@ -125,7 +125,7 @@ namespace netlist
m_last_state = -1;
m_RV.reset();
m_is_timestep = m_RV.m_P.net().solver()->has_timestep_devices();
- m_RV.set(plib::constants<nl_double>::one / logic_family()->R_low(),
+ m_RV.set(plib::constants<nl_double>::one() / logic_family()->R_low(),
logic_family()->low_V(0.0, supply_V), 0.0);
}
@@ -146,7 +146,7 @@ namespace netlist
{
m_RV.update();
}
- m_RV.set(plib::constants<nl_double>::one / R, V, 0.0);
+ m_RV.set(plib::constants<nl_double>::one() / R, V, 0.0);
m_RV.solve_later();
}
}
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index d60074c0e47..2268cb74753 100644
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -865,7 +865,7 @@ nl_double setup_t::model_value(detail::model_map_t &map, const pstring &entity)
{
pstring tmp = model_value_str(map, entity);
- nl_double factor = plib::constants<nl_double>::one;
+ nl_double factor = plib::constants<nl_double>::one();
auto p = std::next(tmp.begin(), static_cast<pstring::difference_type>(tmp.size() - 1));
switch (*p)
{
@@ -881,7 +881,7 @@ nl_double setup_t::model_value(detail::model_map_t &map, const pstring &entity)
if (*p < '0' || *p > '9')
log().fatal(MF_1_UNKNOWN_NUMBER_FACTOR_IN_1, entity);
}
- if (factor != plib::constants<nl_double>::one)
+ if (factor != plib::constants<nl_double>::one())
tmp = plib::left(tmp, tmp.size() - 1);
// FIXME: check for errors
return plib::pstonum<nl_double>(tmp) * factor;
diff --git a/src/lib/netlist/plib/gmres.h b/src/lib/netlist/plib/gmres.h
index 7ced2854b6d..4ab77c6dce1 100644
--- a/src/lib/netlist/plib/gmres.h
+++ b/src/lib/netlist/plib/gmres.h
@@ -250,13 +250,13 @@ namespace plib
* on some systems / compiler versions. Issue reported by
* AJR, no details known yet.
*/
- vec_set_scalar(RESTART+1, m_g, +constants<FT>::zero);
+ vec_set_scalar(RESTART+1, m_g, +constants<FT>::zero());
m_g[0] = rho;
//for (std::size_t i = 0; i < mr + 1; i++)
// vec_set_scalar(mr, m_ht[i], NL_FCONST(0.0));
- vec_mult_scalar(n, residual, constants<FT>::one / rho, m_v[0]);
+ vec_mult_scalar(n, residual, constants<FT>::one() / rho, m_v[0]);
for (std::size_t k = 0; k < RESTART; k++)
{
@@ -273,7 +273,7 @@ namespace plib
m_ht[kp1][k] = std::sqrt(vec_mult2<FT>(n, m_v[kp1]));
if (m_ht[kp1][k] != 0.0)
- vec_scale(n, m_v[kp1], constants<FT>::one / m_ht[kp1][k]);
+ vec_scale(n, m_v[kp1], constants<FT>::one() / m_ht[kp1][k]);
for (std::size_t j = 0; j < k; j++)
givens_mult(m_c[j], m_s[j], m_ht[j][k], m_ht[j+1][k]);
diff --git a/src/lib/netlist/plib/putil.h b/src/lib/netlist/plib/putil.h
index c402b0f455c..024648311e3 100644
--- a/src/lib/netlist/plib/putil.h
+++ b/src/lib/netlist/plib/putil.h
@@ -62,14 +62,15 @@ namespace plib
template <typename T>
struct constants
{
- static constexpr const T zero = static_cast<T>(0);
- static constexpr const T one = static_cast<T>(1);
- static constexpr const T two = static_cast<T>(2);
+ static constexpr T zero() { return static_cast<T>(0); }
+ static constexpr T one() { return static_cast<T>(1); }
+ static constexpr T two() { return static_cast<T>(2); }
template <typename V>
static constexpr const T cast(V &&v) noexcept { return static_cast<T>(v); }
};
+ static_assert(noexcept(constants<double>::one()) == true, "Not evaluated as constexpr");
template <class C>
diff --git a/src/lib/netlist/solver/nld_ms_direct.h b/src/lib/netlist/solver/nld_ms_direct.h
index 9a73cacaa10..4faeaee8597 100644
--- a/src/lib/netlist/solver/nld_ms_direct.h
+++ b/src/lib/netlist/solver/nld_ms_direct.h
@@ -137,7 +137,7 @@ void matrix_solver_direct_t<FT, SIZE>::LE_solve()
for (std::size_t j = i + 1; j < kN; j++)
{
const FT f1 = - A(j,i) * f;
- if (f1 != plib::constants<FT>::zero)
+ if (f1 != plib::constants<FT>::zero())
{
const FT * pi = &A(i,i+1);
FT * pj = &A(j,i+1);
diff --git a/src/lib/netlist/solver/nld_ms_sor.h b/src/lib/netlist/solver/nld_ms_sor.h
index 1f2a5044382..41db7d3e6eb 100644
--- a/src/lib/netlist/solver/nld_ms_sor.h
+++ b/src/lib/netlist/solver/nld_ms_sor.h
@@ -114,18 +114,18 @@ unsigned matrix_solver_SOR_t<FT, SIZE>::vsolve_non_dynamic(const bool newton_rap
if (gabs_t <= gtot_t)
{
w[k] = ws / gtot_t;
- one_m_w[k] = plib::constants<FT>::one - ws;
+ one_m_w[k] = plib::constants<FT>::one() - ws;
}
else
{
- w[k] = plib::constants<FT>::one / (gtot_t + gabs_t);
- one_m_w[k] = plib::constants<FT>::one - plib::constants<FT>::one * gtot_t / (gtot_t + gabs_t);
+ w[k] = plib::constants<FT>::one() / (gtot_t + gabs_t);
+ one_m_w[k] = plib::constants<FT>::one() - plib::constants<FT>::one() * gtot_t / (gtot_t + gabs_t);
}
}
else
{
w[k] = ws / gtot_t;
- one_m_w[k] = plib::constants<FT>::one - ws;
+ one_m_w[k] = plib::constants<FT>::one() - ws;
}
}
diff --git a/src/lib/netlist/solver/nld_ms_sor_mat.h b/src/lib/netlist/solver/nld_ms_sor_mat.h
index e5f2e736708..31db10c506f 100644
--- a/src/lib/netlist/solver/nld_ms_sor_mat.h
+++ b/src/lib/netlist/solver/nld_ms_sor_mat.h
@@ -192,10 +192,10 @@ unsigned matrix_solver_SOR_mat_t<FT, SIZE>::vsolve_non_dynamic(const bool newton
if (p[i] != k)
gabs_t = gabs_t + std::abs(this->A(k,p[i]));
- gabs_t *= plib::constants<FT>::one; // derived by try and error
+ gabs_t *= plib::constants<FT>::one(); // derived by try and error
if (gabs_t > this->A(k,k))
{
- w = plib::constants<FT>::one / (this->A(k,k) + gabs_t);
+ w = plib::constants<FT>::one() / (this->A(k,k) + gabs_t);
}
}
diff --git a/src/mame/audio/nl_kidniki.cpp b/src/mame/audio/nl_kidniki.cpp
index 9e8c47247af..5263e4b3f95 100644
--- a/src/mame/audio/nl_kidniki.cpp
+++ b/src/mame/audio/nl_kidniki.cpp
@@ -335,8 +335,8 @@ NETLIST_START(kidniki)
PARAM(Solver.ACCURACY, 1e-7)
PARAM(Solver.NR_LOOPS, 100)
PARAM(Solver.GS_LOOPS, 300)
- PARAM(Solver.METHOD, "MAT_CR")
- //PARAM(Solver.METHOD, "GMRES")
+ //PARAM(Solver.METHOD, "MAT_CR")
+ PARAM(Solver.METHOD, "GMRES")
//PARAM(Solver.SOR_FACTOR, 1.73)
//PARAM(Solver.METHOD, "SOR")
#endif