35#ifndef _BLAZE_MATH_EXPRESSIONS_MATSCALARMULTEXPR_H_
36#define _BLAZE_MATH_EXPRESSIONS_MATSCALARMULTEXPR_H_
74template<
typename MT >
101template<
typename MT >
106 return (*mat).leftOperand() * ( -(*mat).rightOperand() );
135 , EnableIf_t< IsScalar_v<ST> >* =
nullptr >
136inline decltype(
auto)
operator*(
const MatScalarMultExpr<MT>& mat, ST scalar )
140 return (*mat).leftOperand() * ( (*mat).rightOperand() * scalar );
161 , EnableIf_t< IsScalar_v<ST> >* =
nullptr >
162inline decltype(
auto)
operator*( ST scalar,
const MatScalarMultExpr<MT>& mat )
166 return (*mat).leftOperand() * ( scalar * (*mat).rightOperand() );
187 , EnableIf_t< IsScalar_v<ST> &&
188 ( IsInvertible_v<ST> ||
189 IsInvertible_v< RightOperand_t< MatrixType_t<MT> > > ) >* =
nullptr >
190inline decltype(
auto) operator/( const MatScalarMultExpr<MT>& mat, ST scalar )
196 return (*mat).leftOperand() * ( (*mat).rightOperand() / scalar );
219 operator*(
const MatScalarMultExpr<MT>& mat,
const DenseVector<VT,false>& vec )
223 return ( (*mat).leftOperand() * (*vec) ) * (*mat).rightOperand();
246 operator*(
const DenseVector<VT,true>& vec,
const MatScalarMultExpr<MT>& mat )
250 return ( (*vec) * (*mat).leftOperand() ) * (*mat).rightOperand();
273 operator*(
const MatScalarMultExpr<MT>& mat,
const SparseVector<VT,false>& vec )
277 return ( (*mat).leftOperand() * (*vec) ) * (*mat).rightOperand();
300 operator*(
const SparseVector<VT,true>& vec,
const MatScalarMultExpr<MT>& mat )
304 return ( (*vec) * (*mat).leftOperand() ) * (*mat).rightOperand();
328 operator*(
const MatScalarMultExpr<MT>& mat,
const VecScalarMultExpr<VT>& vec )
332 return ( (*mat).leftOperand() * (*vec).leftOperand() ) * ( (*mat).rightOperand() * (*vec).rightOperand() );
356 operator*(
const VecScalarMultExpr<VT>& vec,
const MatScalarMultExpr<MT>& mat )
360 return ( (*vec).leftOperand() * (*mat).leftOperand() ) * ( (*vec).rightOperand() * (*mat).rightOperand() );
380template<
typename MT1
384 operator*(
const MatScalarMultExpr<MT1>& lhs,
const DenseMatrix<MT2,SO>& rhs )
388 return ( (*lhs).leftOperand() * (*rhs) ) * (*lhs).rightOperand();
408template<
typename MT1
412 operator*(
const DenseMatrix<MT1,SO>& lhs,
const MatScalarMultExpr<MT2>& rhs )
416 return ( (*lhs) * (*rhs).leftOperand() ) * (*rhs).rightOperand();
436template<
typename MT1
440 operator*(
const MatScalarMultExpr<MT1>& lhs,
const SparseMatrix<MT2,SO>& rhs )
444 return ( (*lhs).leftOperand() * (*rhs) ) * (*lhs).rightOperand();
464template<
typename MT1
468 operator*(
const SparseMatrix<MT1,SO>& lhs,
const MatScalarMultExpr<MT2>& rhs )
472 return ( (*lhs) * (*rhs).leftOperand() ) * (*rhs).rightOperand();
492template<
typename MT1
495 operator*(
const MatScalarMultExpr<MT1>& lhs,
const MatScalarMultExpr<MT2>& rhs )
499 return ( (*lhs).leftOperand() * (*rhs).leftOperand() ) * ( (*lhs).rightOperand() * (*rhs).rightOperand() );
525template<
typename MT >
526inline decltype(
auto)
trans(
const MatScalarMultExpr<MT>& matrix )
530 return trans( (*matrix).leftOperand() ) * (*matrix).rightOperand();
548template<
typename MT >
549inline decltype(
auto)
conj(
const MatScalarMultExpr<MT>& matrix )
553 return conj( (*matrix).leftOperand() ) * (*matrix).rightOperand();
Header file for auxiliary alias declarations.
Header file for run time assertion macros.
Header file for the EnableIf class template.
Header file for the function trace functionality.
Header file for the IsInvertible type trait.
Header file for the IsScalar type trait.
Header file for the MultExpr base class.
decltype(auto) conj(const DenseMatrix< MT, SO > &dm)
Returns a matrix containing the complex conjugate of each single element of dm.
Definition: DMatMapExpr.h:1464
decltype(auto) trans(const DenseMatrix< MT, SO > &dm)
Calculation of the transpose of the given dense matrix.
Definition: DMatTransExpr.h:766
#define BLAZE_USER_ASSERT(expr, msg)
Run time assertion macro for user checks.
Definition: Assert.h:117
#define BLAZE_FUNCTION_TRACE
Function trace macro.
Definition: FunctionTrace.h:94
Header file for the exception macros of the math module.
Header file for all forward declarations for expression class templates.
Base class for all matrix/scalar multiplication expression templates.
Definition: MatScalarMultExpr.h:77
Base class for all multiplication expression templates.
Definition: MultExpr.h:70