diff options
Diffstat (limited to 'src/emu/netlist/solver/vector_base.h')
| -rw-r--r-- | src/emu/netlist/solver/vector_base.h | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/src/emu/netlist/solver/vector_base.h b/src/emu/netlist/solver/vector_base.h index be0d59692a3..c1449aad595 100644 --- a/src/emu/netlist/solver/vector_base.h +++ b/src/emu/netlist/solver/vector_base.h @@ -35,32 +35,36 @@ private: #pragma GCC diagnostic ignored "-Wmaybe-uninitialized" #endif -inline void vec_set (const std::size_t n, const double &scalar, double * RESTRICT result) +template<typename T> +inline void vec_set (const std::size_t n, const T &scalar, T * RESTRICT result) { for ( std::size_t i = 0; i < n; i++ ) result[i] = scalar; } -inline double vecmult (const std::size_t n, const double * RESTRICT a1, const double * RESTRICT a2 ) + +template<typename T> +inline T vecmult (const std::size_t n, const T * RESTRICT a1, const T * RESTRICT a2 ) { - double value = 0.0; + T value = 0.0; for ( std::size_t i = 0; i < n; i++ ) value = value + a1[i] * a2[i]; return value; } - -inline double vecmult2 (const std::size_t n, const double *a1) +template<typename T> +inline T vecmult2 (const std::size_t n, const T *a1) { - double value = 0.0; + T value = 0.0; for ( std::size_t i = 0; i < n; i++ ) { - const double temp = a1[i]; + const T temp = a1[i]; value = value + temp * temp; } return value; } -inline void vec_mult_scalar (const std::size_t n, const double * RESTRICT v, const double scalar, double * RESTRICT result) +template<typename T> +inline void vec_mult_scalar (const std::size_t n, const T * RESTRICT v, const T scalar, T * RESTRICT result) { for ( std::size_t i = 0; i < n; i++ ) { @@ -68,7 +72,8 @@ inline void vec_mult_scalar (const std::size_t n, const double * RESTRICT v, con } } -inline void vec_add_mult_scalar (const std::size_t n, const double * RESTRICT v, const double scalar, double * RESTRICT result) +template<typename T> +inline void vec_add_mult_scalar (const std::size_t n, const T * RESTRICT v, const T scalar, T * RESTRICT result) { for ( std::size_t i = 0; i < n; i++ ) result[i] += scalar * v[i]; @@ -80,13 +85,15 @@ inline void vec_add_ip(const std::size_t n, const double * RESTRICT v, double * result[i] += v[i]; } -inline void vec_sub(const std::size_t n, const double * RESTRICT v1, const double * RESTRICT v2, double * RESTRICT result) +template<typename T> +inline void vec_sub(const std::size_t n, const T * RESTRICT v1, const T * RESTRICT v2, T * RESTRICT result) { for ( std::size_t i = 0; i < n; i++ ) result[i] = v1[i] - v2[i]; } -inline void vec_scale (const std::size_t n, double * RESTRICT v, const double scalar) +template<typename T> +inline void vec_scale (const std::size_t n, T * RESTRICT v, const T scalar) { for ( std::size_t i = 0; i < n; i++ ) v[i] = scalar * v[i]; |
