35#ifndef _BLAZE_MATH_EXPRESSIONS_VECSCALARMULTEXPR_H_
36#define _BLAZE_MATH_EXPRESSIONS_VECSCALARMULTEXPR_H_
73template<
typename VT >
100template<
typename VT >
105 return (*vec).leftOperand() * ( -(*vec).rightOperand() );
134 , EnableIf_t< IsScalar_v<ST> >* =
nullptr >
135inline decltype(
auto)
operator*(
const VecScalarMultExpr<VT>& vec, ST scalar )
139 return (*vec).leftOperand() * ( (*vec).rightOperand() * scalar );
160 , EnableIf_t< IsScalar_v<ST> >* =
nullptr >
161inline decltype(
auto)
operator*( ST scalar,
const VecScalarMultExpr<VT>& vec )
165 return (*vec).leftOperand() * ( scalar * (*vec).rightOperand() );
186 , EnableIf_t< IsScalar_v<ST> &&
187 ( IsInvertible_v<ST> ||
188 IsInvertible_v< RightOperand_t< VectorType_t<VT> > > ) >* =
nullptr >
189inline decltype(
auto) operator/( const VecScalarMultExpr<VT>& vec, ST scalar )
195 return (*vec).leftOperand() * ( (*vec).rightOperand() / scalar );
215template<
typename VT1
219 operator*(
const VecScalarMultExpr<VT1>& lhs,
const DenseVector<VT2,TF>& rhs )
223 return ( (*lhs).leftOperand() * (*rhs) ) * (*lhs).rightOperand();
243template<
typename VT1
247 operator*(
const DenseVector<VT1,TF>& lhs,
const VecScalarMultExpr<VT2>& rhs )
251 return ( (*lhs) * (*rhs).leftOperand() ) * (*rhs).rightOperand();
271template<
typename VT1
275 operator*(
const VecScalarMultExpr<VT1>& lhs,
const SparseVector<VT2,TF>& rhs )
279 return ( (*lhs).leftOperand() * (*rhs) ) * (*lhs).rightOperand();
299template<
typename VT1
303 operator*(
const SparseVector<VT1,TF>& lhs,
const VecScalarMultExpr<VT2>& rhs )
307 return ( (*lhs) * (*rhs).leftOperand() ) * (*rhs).rightOperand();
327template<
typename VT1
330 operator*(
const VecScalarMultExpr<VT1>& lhs,
const VecScalarMultExpr<VT2>& rhs )
334 return ( (*lhs).leftOperand() * (*rhs).leftOperand() ) * ( (*lhs).rightOperand() * (*rhs).rightOperand() );
358 operator*(
const DenseMatrix<MT,SO>& mat,
const VecScalarMultExpr<VT>& vec )
362 return ( (*mat) * (*vec).leftOperand() ) * (*vec).rightOperand();
386 operator*(
const VecScalarMultExpr<VT>& vec,
const DenseMatrix<MT,SO>& mat )
390 return ( (*vec).leftOperand() * (*mat) ) * (*vec).rightOperand();
414 operator*(
const SparseMatrix<MT,SO>& mat,
const VecScalarMultExpr<VT>& vec )
418 return ( (*mat) * (*vec).leftOperand() ) * (*vec).rightOperand();
442 operator*(
const VecScalarMultExpr<VT>& vec,
const SparseMatrix<MT,SO>& mat )
446 return ( (*vec).leftOperand() * (*mat) ) * (*vec).rightOperand();
472template<
typename VT >
473inline decltype(
auto)
trans(
const VecScalarMultExpr<VT>& vector )
477 return trans( (*vector).leftOperand() ) * (*vector).rightOperand();
495template<
typename VT >
496inline decltype(
auto)
conj(
const VecScalarMultExpr<VT>& vector )
500 return conj( (*vector).leftOperand() ) * (*vector).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 all forward declarations for expression class templates.
Base class for all multiplication expression templates.
Definition: MultExpr.h:70
Base class for all vector/scalar multiplication expression templates.
Definition: VecScalarMultExpr.h:76