diff options
-rw-r--r-- | include/libcamera/internal/vector.h | 9 | ||||
-rw-r--r-- | src/libcamera/vector.cpp | 5 |
2 files changed, 8 insertions, 6 deletions
diff --git a/include/libcamera/internal/vector.h b/include/libcamera/internal/vector.h index 4e9ef1ee..16b6aef0 100644 --- a/include/libcamera/internal/vector.h +++ b/include/libcamera/internal/vector.h @@ -13,6 +13,7 @@ #include <numeric> #include <optional> #include <ostream> +#include <type_traits> #include <libcamera/base/log.h> #include <libcamera/base/span.h> @@ -295,13 +296,13 @@ private: template<typename T> using RGB = Vector<T, 3>; -template<typename T, unsigned int Rows, unsigned int Cols> -Vector<T, Rows> operator*(const Matrix<T, Rows, Cols> &m, const Vector<T, Cols> &v) +template<typename T, typename U, unsigned int Rows, unsigned int Cols> +Vector<std::common_type_t<T, U>, Rows> operator*(const Matrix<T, Rows, Cols> &m, const Vector<U, Cols> &v) { - Vector<T, Rows> result; + Vector<std::common_type_t<T, U>, Rows> result; for (unsigned int i = 0; i < Rows; i++) { - T sum = 0; + std::common_type_t<T, U> sum = 0; for (unsigned int j = 0; j < Cols; j++) sum += m[i][j] * v[j]; result[i] = sum; diff --git a/src/libcamera/vector.cpp b/src/libcamera/vector.cpp index 5567d5b8..4dad1b90 100644 --- a/src/libcamera/vector.cpp +++ b/src/libcamera/vector.cpp @@ -308,9 +308,10 @@ LOG_DEFINE_CATEGORY(Vector) */ /** - * \fn Vector<T, Rows> operator*(const Matrix<T, Rows, Cols> &m, const Vector<T, Cols> &v) + * \fn operator*(const Matrix<T, Rows, Cols> &m, const Vector<U, Cols> &v) * \brief Multiply a matrix by a vector - * \tparam T Numerical type of the contents of the matrix and vector + * \tparam T Numerical type of the contents of the matrix + * \tparam U Numerical type of the contents of the vector * \tparam Rows The number of rows in the matrix * \tparam Cols The number of columns in the matrix (= rows in the vector) * \param m The matrix |