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::one / m_RI(); + const nl_double GI = plib::constants::one() / m_RI(); m_IP.set(GI); m_IN.set(GI); - m_OP.set(m_mult, plib::constants::zero); - m_OP1.set(-m_mult, plib::constants::zero); + m_OP.set(m_mult, plib::constants::zero()); + m_OP1.set(-m_mult, plib::constants::zero()); - m_ON.set(-m_mult, plib::constants::zero); - m_ON1.set(m_mult, plib::constants::zero); + m_ON.set(-m_mult, plib::constants::zero()); + m_ON1.set(m_mult, plib::constants::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::zero, I); - m_OP1.set(-beta, plib::constants::zero); + m_OP.set(beta, plib::constants::zero(), I); + m_OP1.set(-beta, plib::constants::zero()); - m_ON.set(-beta, plib::constants::zero, -I); - m_ON1.set(beta, plib::constants::zero); + m_ON.set(-beta, plib::constants::zero(), -I); + m_ON1.set(beta, plib::constants::zero()); } // ---------------------------------------------------------------------------------------- @@ -106,11 +106,11 @@ NETLIB_UPDATE_PARAM(CCCS) NETLIB_RESET(VCVS) { - m_gfac = plib::constants::one / m_RO(); + m_gfac = plib::constants::one() / m_RO(); NETLIB_NAME(VCCS)::reset(); - m_OP2.set(plib::constants::one / m_RO()); - m_ON2.set(plib::constants::one / m_RO()); + m_OP2.set(plib::constants::one() / m_RO()); + m_ON2.set(plib::constants::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::one; + m_gfac = plib::constants::one(); } param_double_t m_G; @@ -129,7 +129,7 @@ namespace netlist { public: NETLIB_CONSTRUCTOR_DERIVED(CCCS, VCCS) { - m_gfac = plib::constants::one / m_RI(); + m_gfac = plib::constants::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::one - v), exec().gmin())); + m_R2.set_R(std::max(m_R() * (plib::constants::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::one - v), exec().gmin())); + m_R2.set_R(std::max(m_R() * (plib::constants::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::one / R; + const nl_double G = plib::constants::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::one / exec().gmin()); + m_R.set_R(plib::constants::one() / exec().gmin()); } @@ -56,13 +56,13 @@ namespace netlist if (in < low) { - R = plib::constants::one / exec().gmin(); + R = plib::constants::one() / exec().gmin(); } else if (in > high) { R = rON; } - if (R > plib::constants::zero) + if (R > plib::constants::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::one / exec().gmin()); + m_R.set_R(plib::constants::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::one / exec().gmin()); + m_R.set_R(plib::constants::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::one / R_LOW, 0.0, 0.0); + m_RV.set(plib::constants::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::one / R, V, plib::constants::zero); + m_RV.set(plib::constants::one() / R, V, plib::constants::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::one / m_model.m_RI, m_model.m_VI, 0.0); - m_RVO.set(plib::constants::one / m_model.m_ROL, m_model.m_VOL, 0.0); + m_RVI.set(plib::constants::one() / m_model.m_RI, m_model.m_VI, 0.0); + m_RVO.set(plib::constants::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::one / m_model.m_ROH, m_model.m_VOH, 0.0); + m_RVO.set(plib::constants::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::one / m_model.m_ROL, m_model.m_VOL, 0.0); + m_RVO.set(plib::constants::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::one / logic_family()->R_low(), + m_RV.set(plib::constants::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::one / R, V, 0.0); + m_RV.set(plib::constants::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::one; + nl_double factor = plib::constants::one(); auto p = std::next(tmp.begin(), static_cast(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::one) + if (factor != plib::constants::one()) tmp = plib::left(tmp, tmp.size() - 1); // FIXME: check for errors return plib::pstonum(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::zero); + vec_set_scalar(RESTART+1, m_g, +constants::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::one / rho, m_v[0]); + vec_mult_scalar(n, residual, constants::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(n, m_v[kp1])); if (m_ht[kp1][k] != 0.0) - vec_scale(n, m_v[kp1], constants::one / m_ht[kp1][k]); + vec_scale(n, m_v[kp1], constants::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 struct constants { - static constexpr const T zero = static_cast(0); - static constexpr const T one = static_cast(1); - static constexpr const T two = static_cast(2); + static constexpr T zero() { return static_cast(0); } + static constexpr T one() { return static_cast(1); } + static constexpr T two() { return static_cast(2); } template static constexpr const T cast(V &&v) noexcept { return static_cast(v); } }; + static_assert(noexcept(constants::one()) == true, "Not evaluated as constexpr"); template 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::LE_solve() for (std::size_t j = i + 1; j < kN; j++) { const FT f1 = - A(j,i) * f; - if (f1 != plib::constants::zero) + if (f1 != plib::constants::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::vsolve_non_dynamic(const bool newton_rap if (gabs_t <= gtot_t) { w[k] = ws / gtot_t; - one_m_w[k] = plib::constants::one - ws; + one_m_w[k] = plib::constants::one() - ws; } else { - w[k] = plib::constants::one / (gtot_t + gabs_t); - one_m_w[k] = plib::constants::one - plib::constants::one * gtot_t / (gtot_t + gabs_t); + w[k] = plib::constants::one() / (gtot_t + gabs_t); + one_m_w[k] = plib::constants::one() - plib::constants::one() * gtot_t / (gtot_t + gabs_t); } } else { w[k] = ws / gtot_t; - one_m_w[k] = plib::constants::one - ws; + one_m_w[k] = plib::constants::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::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::one; // derived by try and error + gabs_t *= plib::constants::one(); // derived by try and error if (gabs_t > this->A(k,k)) { - w = plib::constants::one / (this->A(k,k) + gabs_t); + w = plib::constants::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