summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/netlist/solver/vector_base.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/netlist/solver/vector_base.h')
-rw-r--r--src/emu/netlist/solver/vector_base.h29
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];