libcamera: vector: Extend matrix multiplication operator to heterogenous types
It is useful to multiply matrices and vectors of heterogeneous types, for instance float and double. Extend the multiplication operator to support this, avoiding the need to convert one of the operations. The type of the returned vector is selected automatically to avoid loosing precision. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
This commit is contained in:
parent
754798b664
commit
1e67b96fb0
2 changed files with 8 additions and 6 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue