summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libcamera/internal/vector.h9
-rw-r--r--src/libcamera/vector.cpp5
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