35 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECDVECOUTEREXPR_H_ 36 #define _BLAZE_MATH_EXPRESSIONS_DVECDVECOUTEREXPR_H_ 107 template<
typename VT1
156 enum :
bool { useAssign = ( evaluateLeft || evaluateRight ) };
159 template<
typename VT >
162 enum :
bool { value = useAssign };
173 template<
typename VT >
174 struct UseSMPAssign {
175 enum :
bool { value = evaluateRight };
185 template<
typename T1,
typename T2,
typename T3 >
186 struct UseVectorizedKernel {
188 T1::simdEnabled && T2::simdEnabled && T3::simdEnabled &&
202 template<
typename T1,
typename T2,
typename T3 >
203 struct UseDefaultKernel {
204 enum :
bool { value = !UseVectorizedKernel<T1,T2,T3>::value };
270 explicit inline ConstIterator( LeftIteratorType left, RightIteratorType right )
348 return (*left_) * (*right_);
357 inline auto load() const noexcept {
358 return set( *left_ ) * right_.load();
369 return right_ == rhs.
right_;
380 return right_ != rhs.
right_;
391 return right_ < rhs.
right_;
402 return right_ > rhs.
right_;
413 return right_ <= rhs.
right_;
424 return right_ >= rhs.
right_;
435 return right_ - rhs.
right_;
485 enum :
bool { simdEnabled = VT1::simdEnabled && VT2::simdEnabled &&
489 enum :
bool { smpAssignable = VT1::smpAssignable && !evaluateRight };
532 inline ReturnType
at(
size_t i,
size_t j )
const {
533 if( i >=
lhs_.size() ) {
536 if( j >=
rhs_.size() ) {
554 return set(
lhs_[i] ) *
rhs_.load( j );
587 inline size_t rows() const noexcept {
628 template<
typename T >
629 inline bool canAlias(
const T* alias )
const noexcept {
630 return (
lhs_.canAlias( alias ) ||
rhs_.canAlias( alias ) );
640 template<
typename T >
641 inline bool isAliased(
const T* alias )
const noexcept {
642 return (
lhs_.isAliased( alias ) ||
rhs_.isAliased( alias ) );
652 return lhs_.isAligned() &&
rhs_.isAligned();
662 return (
rows() *
columns() >= SMP_DVECDVECOUTER_THRESHOLD );
686 template<
typename MT >
703 DVecDVecOuterExpr::selectAssignKernel( ~lhs, x, y );
722 template<
typename MT
728 const size_t M( (~A).
rows() );
729 const size_t N( (~A).
columns() );
731 const size_t jpos( N &
size_t(-2) );
734 for(
size_t i=0UL; i<M; ++i ) {
735 for(
size_t j=0UL; j<jpos; j+=2UL ) {
736 (~A)(i,j ) = x[i] * y[j ];
737 (~A)(i,j+1UL) = x[i] * y[j+1];
740 (~A)(i,jpos) = x[i] * y[jpos];
761 template<
typename MT
769 const size_t M( (~A).
rows() );
770 const size_t N( (~A).
columns() );
772 const size_t jpos( remainder ? ( N &
size_t(-SIMDSIZE) ) : N );
775 for(
size_t i=0UL; i<M; ++i )
777 const SIMDType x1(
set( x[i] ) );
781 for( ; j<jpos; j+=SIMDSIZE ) {
782 (~A).store( i, j, x1 * y.load(j) );
784 for( ; remainder && j<N; ++j ) {
785 (~A)(i,j) = x[i] * y[j];
804 template<
typename MT >
822 DVecDVecOuterExpr::selectAssignKernel( ~lhs, x, y );
841 template<
typename MT
847 const size_t M( (~A).
rows() );
848 const size_t N( (~A).
columns() );
850 const size_t ipos( M &
size_t(-2) );
853 for(
size_t j=0UL; j<N; ++j ) {
854 for(
size_t i=0UL; i<ipos; i+=2UL ) {
855 (~A)(i ,j) = x[i ] * y[j];
856 (~A)(i+1UL,j) = x[i+1] * y[j];
859 (~A)(ipos,j) = x[ipos] * y[j];
880 template<
typename MT
888 const size_t M( (~A).
rows() );
889 const size_t N( (~A).
columns() );
891 const size_t ipos( remainder ? ( M &
size_t(-SIMDSIZE) ) : M );
894 for(
size_t j=0UL; j<N; ++j )
896 const SIMDType y1(
set( y[j] ) );
900 for( ; i<ipos; i+=SIMDSIZE ) {
901 (~A).store( i, j, x.load(i) * y1 );
903 for( ; remainder && i<M; ++i ) {
904 (~A)(i,j) = x[i] * y[j];
923 template<
typename MT
941 const TmpType tmp(
serial( rhs ) );
962 template<
typename MT >
979 DVecDVecOuterExpr::selectAddAssignKernel( ~lhs, x, y );
998 template<
typename MT
1004 const size_t M( (~A).
rows() );
1005 const size_t N( (~A).
columns() );
1007 const size_t jpos( N &
size_t(-2) );
1010 for(
size_t i=0UL; i<M; ++i ) {
1011 for(
size_t j=0UL; j<jpos; j+=2UL ) {
1012 (~A)(i,j ) += x[i] * y[j ];
1013 (~A)(i,j+1UL) += x[i] * y[j+1UL];
1016 (~A)(i,jpos) += x[i] * y[jpos];
1037 template<
typename MT
1045 const size_t M( (~A).
rows() );
1046 const size_t N( (~A).
columns() );
1048 const size_t jpos( remainder ? ( N &
size_t(-SIMDSIZE) ) : N );
1051 for(
size_t i=0UL; i<M; ++i )
1053 const SIMDType x1(
set( x[i] ) );
1057 for( ; j<jpos; j+=SIMDSIZE ) {
1058 (~A).store( i, j, (~A).load(i,j) + x1 * y.load(j) );
1060 for( ; remainder && j<N; ++j ) {
1061 (~A)(i,j) += x[i] * y[j];
1081 template<
typename MT >
1099 DVecDVecOuterExpr::selectAddAssignKernel( ~lhs, x, y );
1118 template<
typename MT
1124 const size_t M( (~A).
rows() );
1125 const size_t N( (~A).
columns() );
1127 const size_t ipos( M &
size_t(-2) );
1130 for(
size_t j=0UL; j<N; ++j ) {
1131 for(
size_t i=0UL; i<ipos; i+=2UL ) {
1132 (~A)(i ,j) += x[i ] * y[j];
1133 (~A)(i+1UL,j) += x[i+1UL] * y[j];
1136 (~A)(ipos,j) += x[ipos] * y[j];
1157 template<
typename MT
1165 const size_t M( (~A).
rows() );
1166 const size_t N( (~A).
columns() );
1168 const size_t ipos( remainder ? ( M &
size_t(-SIMDSIZE) ) : M );
1171 for(
size_t j=0UL; j<N; ++j )
1173 const SIMDType y1(
set( y[j] ) );
1177 for( ; i<ipos; i+=SIMDSIZE ) {
1178 (~A).store( i, j, (~A).load(i,j) + x.load(i) * y1 );
1180 for( ; remainder && i<M; ++i ) {
1181 (~A)(i,j) += x[i] * y[j];
1207 template<
typename MT >
1224 DVecDVecOuterExpr::selectSubAssignKernel( ~lhs, x, y );
1243 template<
typename MT
1249 const size_t M( (~A).
rows() );
1250 const size_t N( (~A).
columns() );
1252 const size_t jpos( N &
size_t(-2) );
1255 for(
size_t i=0UL; i<M; ++i ) {
1256 for(
size_t j=0UL; j<jpos; j+=2UL ) {
1257 (~A)(i,j ) -= x[i] * y[j ];
1258 (~A)(i,j+1UL) -= x[i] * y[j+1UL];
1261 (~A)(i,jpos) -= x[i] * y[jpos];
1282 template<
typename MT
1290 const size_t M( (~A).
rows() );
1291 const size_t N( (~A).
columns() );
1293 const size_t jpos( remainder ? ( N &
size_t(-SIMDSIZE) ) : N );
1296 for(
size_t i=0UL; i<M; ++i )
1298 const SIMDType x1(
set( x[i] ) );
1302 for( ; j<jpos; j+=SIMDSIZE ) {
1303 (~A).store( i, j, (~A).load(i,j) - x1 * y.load(j) );
1305 for( ; remainder && j<N; ++j ) {
1306 (~A)(i,j) -= x[i] * y[j];
1326 template<
typename MT >
1344 DVecDVecOuterExpr::selectSubAssignKernel( ~lhs, x, y );
1363 template<
typename MT
1369 const size_t M( (~A).
rows() );
1370 const size_t N( (~A).
columns() );
1372 const size_t ipos( M &
size_t(-2) );
1375 for(
size_t j=0UL; j<N; ++j ) {
1376 for(
size_t i=0UL; i<ipos; i+=2UL ) {
1377 (~A)(i ,j) -= x[i ] * y[j];
1378 (~A)(i+1UL,j) -= x[i+1UL] * y[j];
1381 (~A)(ipos,j) -= x[ipos] * y[j];
1402 template<
typename MT
1410 const size_t M( (~A).
rows() );
1411 const size_t N( (~A).
columns() );
1413 const size_t ipos( remainder ? ( M &
size_t(-SIMDSIZE) ) : M );
1416 for(
size_t j=0UL; j<N; ++j )
1418 const SIMDType y1(
set( y[j] ) );
1422 for( ; i<ipos; i+=SIMDSIZE ) {
1423 (~A).store( i, j, (~A).load(i,j) - x.load(i) * y1 );
1425 for( ; remainder && i<M; ++i ) {
1426 (~A)(i,j) -= x[i] * y[j];
1459 template<
typename MT
1496 template<
typename MT
1515 const TmpType tmp( rhs );
1535 template<
typename MT >
1576 template<
typename MT >
1658 template<
typename T1
1680 template<
typename VT1,
typename VT2 >
1681 struct Rows< DVecDVecOuterExpr<VT1,VT2> > :
public Size<VT1>
1697 template<
typename VT1,
typename VT2 >
1698 struct Columns< DVecDVecOuterExpr<VT1,VT2> > :
public Size<VT2>
1714 template<
typename VT1,
typename VT2 >
1715 struct IsAligned< DVecDVecOuterExpr<VT1,VT2> >
1716 :
public BoolConstant< And< IsAligned<VT1>, IsAligned<VT2> >::value >
1732 template<
typename VT1,
typename VT2 >
1733 struct IsPadded< DVecDVecOuterExpr<VT1,VT2> >
1750 template<
typename VT1,
typename VT2,
bool AF >
1765 template<
typename VT1,
typename VT2 >
1779 template<
typename VT1,
typename VT2 >
Pointer difference type of the Blaze library.
Header file for auxiliary alias declarations.
const ConstIterator operator--(int)
Post-decrement operator.
Definition: DVecDVecOuterExpr.h:337
Compile time check whether the given type is a computational expression template.This type trait clas...
Definition: IsComputation.h:72
constexpr bool useOptimizedKernels
Configuration switch for optimized kernels.This configuration switch enables/disables all optimized c...
Definition: Optimizations.h:84
Compile time check whether the given type is a temporary vector or matrix type.This type trait class ...
Definition: IsTemporary.h:70
Header file for the Rows type trait.
Header file for basic type definitions.
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: DVecDVecOuterExpr.h:379
size_t rows() const noexcept
Returns the current number of rows of the matrix.
Definition: DVecDVecOuterExpr.h:587
ElementType_< RT2 > ET2
Element type of the right-hand side dense vector expression.
Definition: DVecDVecOuterExpr.h:118
SIMDTrait_< ElementType > SIMDType
Resulting SIMD element type.
Definition: DVecDVecOuterExpr.h:216
#define BLAZE_CONSTRAINT_MUST_BE_COLUMN_VECTOR_TYPE(T)
Constraint on the data type.In case the given data type T is not a column dense or sparse vector type...
Definition: ColumnVector.h:61
EnableIf_< IsDenseMatrix< MT1 > > smpSubAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:160
Header file for the serial shim.
Generic wrapper for a compile time constant integral value.The IntegralConstant class template repres...
Definition: IntegralConstant.h:71
#define BLAZE_CONSTRAINT_MUST_BE_DENSE_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a dense, N-dimensional matrix type...
Definition: DenseMatrix.h:61
Header file for the ColumnExprTrait class template.
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: DVecDVecOuterExpr.h:516
ElementType_< ResultType > ElementType
Resulting element type.
Definition: DVecDVecOuterExpr.h:215
ConstIterator_< VT1 > LeftIteratorType
ConstIterator type of the left-hand side dense matrix expression.
Definition: DVecDVecOuterExpr.h:258
Availability of a SIMD multiplication for the given data types.Depending on the available instruction...
Definition: HasSIMDMult.h:162
typename SIMDTrait< T >::Type SIMDTrait_
Auxiliary alias declaration for the SIMDTrait class template.The SIMDTrait_ alias declaration provide...
Definition: SIMDTrait.h:315
ElementType & ReferenceType
Reference return type.
Definition: DVecDVecOuterExpr.h:247
ConstIterator & operator++()
Pre-increment operator.
Definition: DVecDVecOuterExpr.h:305
friend const ConstIterator operator+(size_t inc, const ConstIterator &it)
Addition between an integral value and a ConstIterator.
Definition: DVecDVecOuterExpr.h:458
LeftOperand leftOperand() const noexcept
Returns the left-hand side dense vector operand.
Definition: DVecDVecOuterExpr.h:607
Header file for the And class template.
ReferenceType reference
Reference return type.
Definition: DVecDVecOuterExpr.h:254
ResultType_< VT2 > RT2
Result type of the right-hand side dense vector expression.
Definition: DVecDVecOuterExpr.h:116
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:721
typename MultTrait< T1, T2 >::Type MultTrait_
Auxiliary alias declaration for the MultTrait class template.The MultTrait_ alias declaration provide...
Definition: MultTrait.h:245
Header file for the Computation base class.
CompositeType_< VT1 > CT1
Composite type of the left-hand side dense vector expression.
Definition: DVecDVecOuterExpr.h:121
Constraints on the storage order of matrix types.
BLAZE_ALWAYS_INLINE auto load(size_t i, size_t j) const noexcept
Access to the SIMD elements of the matrix.
Definition: DVecDVecOuterExpr.h:550
CompositeType_< VT2 > CT2
Composite type of the right-hand side dense vector expression.
Definition: DVecDVecOuterExpr.h:122
Header file for the RequiresEvaluation type trait.
System settings for performance optimizations.
Compile time check for data types.This type trait tests whether or not the given types can be combine...
Definition: IsSIMDCombinable.h:120
DVecDVecOuterExpr< VT1, VT2 > This
Type of this DVecDVecOuterExpr instance.
Definition: DVecDVecOuterExpr.h:211
typename T::ResultType ResultType_
Alias declaration for nested ResultType type definitions.The ResultType_ alias declaration provides a...
Definition: Aliases.h:323
EnableIf_< IsDenseMatrix< MT1 > > smpAddAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP addition assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:129
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:71
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:119
ConstIterator & operator--()
Pre-decrement operator.
Definition: DVecDVecOuterExpr.h:326
Constraint on the data type.
typename IfTrue< Condition, T1, T2 >::Type IfTrue_
Auxiliary alias declaration for the IfTrue class template.The IfTrue_ alias declaration provides a co...
Definition: If.h:109
size_t columns() const noexcept
Returns the current number of columns of the matrix.
Definition: DVecDVecOuterExpr.h:597
ConstIterator_< VT2 > RightIteratorType
ConstIterator type of the right-hand side dense matrix expression.
Definition: DVecDVecOuterExpr.h:261
typename T::ReturnType ReturnType_
Alias declaration for nested ReturnType type definitions.The ReturnType_ alias declaration provides a...
Definition: Aliases.h:343
Constraint on the transpose flag of vector types.
Compile time check for the alignment of data types.This type trait tests whether the given data type ...
Definition: IsAligned.h:87
RightOperand rightOperand() const noexcept
Returns the right-hand side dense vector operand.
Definition: DVecDVecOuterExpr.h:617
Constraint on the data type.
typename MultExprTrait< T1, T2 >::Type MultExprTrait_
Auxiliary alias declaration for the MultExprTrait class template.The MultExprTrait_ alias declaration...
Definition: MultExprTrait.h:344
Header file for the MultExprTrait class template.
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: DVecDVecOuterExpr.h:629
Compile time check to query the requirement to evaluate an expression.Via this type trait it is possi...
Definition: RequiresEvaluation.h:72
typename T::CompositeType CompositeType_
Alias declaration for nested CompositeType type definitions.The CompositeType_ alias declaration prov...
Definition: Aliases.h:83
ReturnType operator*() const
Direct access to the element at the current iterator position.
Definition: DVecDVecOuterExpr.h:347
Header file for the IsTemporary type trait class.
ConstIterator(LeftIteratorType left, RightIteratorType right)
Constructor for the ConstIterator class.
Definition: DVecDVecOuterExpr.h:270
Header file for the multiplication trait.
If_< IsExpression< VT1 >, const VT1, const VT1 &> LeftOperand
Composite type of the left-hand side dense vector expression.
Definition: DVecDVecOuterExpr.h:225
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
auto load() const noexcept
Access to the SIMD elements of the matrix.
Definition: DVecDVecOuterExpr.h:357
Header file for the If class template.
#define BLAZE_CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a column-major dense or sparse matri...
Definition: ColumnMajorMatrix.h:61
const ConstIterator operator++(int)
Post-increment operator.
Definition: DVecDVecOuterExpr.h:316
IfTrue_< evaluateLeft, const RT1, CT1 > LT
Type for the assignment of the left-hand side dense vector operand.
Definition: DVecDVecOuterExpr.h:231
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2939
#define BLAZE_CONSTRAINT_MUST_FORM_VALID_VECTVECMULTEXPR(T1, T2)
Constraint on the data type.In case the given data types T1 and T2 do not form a valid vector/vector ...
Definition: VecTVecMultExpr.h:105
Compile time check for data types with padding.This type trait tests whether the given data type empl...
Definition: IsPadded.h:76
EnableIf_< IsDenseMatrix< MT1 > > smpAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:98
ReturnType_< VT1 > RN1
Return type of the left-hand side dense vector expression.
Definition: DVecDVecOuterExpr.h:119
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: DVecDVecOuterExpr.h:641
LeftIteratorType left_
Iterator to the current left-hand side element.
Definition: DVecDVecOuterExpr.h:477
#define BLAZE_THROW_OUT_OF_RANGE(MESSAGE)
Macro for the emission of a std::out_of_range exception.This macro encapsulates the default way of Bl...
Definition: Exception.h:331
ValueType value_type
Type of the underlying elements.
Definition: DVecDVecOuterExpr.h:252
Header file for the DenseMatrix base class.
Header file for the Columns type trait.
typename SubvectorExprTrait< VT, AF >::Type SubvectorExprTrait_
Auxiliary alias declaration for the SubvectorExprTrait type trait.The SubvectorExprTrait_ alias decla...
Definition: SubvectorExprTrait.h:133
ElementType ValueType
Type of the underlying elements.
Definition: DVecDVecOuterExpr.h:245
typename T::ElementType ElementType_
Alias declaration for nested ElementType type definitions.The ElementType_ alias declaration provides...
Definition: Aliases.h:163
Header file for all SIMD functionality.
RightOperand rhs_
Right-hand side dense vector of the multiplication expression.
Definition: DVecDVecOuterExpr.h:669
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
Evaluation of the expression type type of a submatrix operation.Via this type trait it is possible to...
Definition: SubmatrixExprTrait.h:80
ConstIterator & operator-=(size_t dec)
Subtraction assignment operator.
Definition: DVecDVecOuterExpr.h:294
Header file for the IsAligned type trait.
bool operator==(const ConstIterator &rhs) const
Equality comparison between two ConstIterator objects.
Definition: DVecDVecOuterExpr.h:368
#define BLAZE_CONSTRAINT_MUST_BE_REFERENCE_TYPE(T)
Constraint on the data type.In case the given data type T is not a reference type, a compilation error is created.
Definition: Reference.h:60
bool operator<(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DVecDVecOuterExpr.h:390
IfTrue_< useAssign, const ResultType, const DVecDVecOuterExpr &> CompositeType
Data type for composite expression templates.
Definition: DVecDVecOuterExpr.h:222
Constraints on the storage order of matrix types.
Constraint on the data type.
MultTrait_< RT1, RT2 > ResultType
Result type for expression template evaluations.
Definition: DVecDVecOuterExpr.h:212
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: DVecDVecOuterExpr.h:661
ReturnType_< VT2 > RN2
Return type of the right-hand side dense vector expression.
Definition: DVecDVecOuterExpr.h:120
MultExprTrait_< RN1, RN2 > ExprReturnType
Expression return type for the subscript operator.
Definition: DVecDVecOuterExpr.h:145
Header file for the exception macros of the math module.
ConstIterator end(size_t i) const
Returns an iterator just past the last non-zero element of row i.
Definition: DVecDVecOuterExpr.h:576
Evaluation of the expression type type of a row operation.Via this type trait it is possible to evalu...
Definition: RowExprTrait.h:79
Header file for the RowExprTrait class template.
Header file for all forward declarations for expression class templates.
Header file for the VecTVecMultExpr base class.
Header file for the EnableIf class template.
DVecDVecOuterExpr(const VT1 &lhs, const VT2 &rhs) noexcept
Constructor for the DVecDVecOuterExpr class.
Definition: DVecDVecOuterExpr.h:503
const IfTrue_< returnExpr, ExprReturnType, ElementType > ReturnType
Return type for expression template evaluations.
Definition: DVecDVecOuterExpr.h:219
Header file for the IsPadded type trait.
ReturnType at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: DVecDVecOuterExpr.h:532
bool operator<=(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DVecDVecOuterExpr.h:412
ConstIterator & operator+=(size_t inc)
Addition assignment operator.
Definition: DVecDVecOuterExpr.h:282
Header file for the IsSIMDCombinable type trait.
#define BLAZE_CONSTRAINT_MUST_NOT_BE_SYMMETRIC_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a symmetric matrix type, a compilation error is created.
Definition: Symmetric.h:79
Header file for the SubmatrixExprTrait class template.
#define BLAZE_CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a row-major dense or sparse matrix t...
Definition: RowMajorMatrix.h:61
Header file for the HasSIMDMult type trait.
bool operator>=(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DVecDVecOuterExpr.h:423
DifferenceType operator-(const ConstIterator &rhs) const
Calculating the number of elements between two iterators.
Definition: DVecDVecOuterExpr.h:434
ElementType_< RT1 > ET1
Element type of the left-hand side dense vector expression.
Definition: DVecDVecOuterExpr.h:117
Header file for run time assertion macros.
typename If< T1, T2, T3 >::Type If_
Auxiliary alias declaration for the If class template.The If_ alias declaration provides a convenient...
Definition: If.h:160
Expression object for outer products between two dense vectors.The DVecDVecOuterExpr class represents...
Definition: DVecDVecOuterExpr.h:109
RightIteratorType right_
Iterator to the current right-hand side element.
Definition: DVecDVecOuterExpr.h:478
SIMD characteristics of data types.The SIMDTrait class template provides the SIMD characteristics of ...
Definition: SIMDTrait.h:296
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:93
ConstIterator begin(size_t i) const
Returns an iterator to the first non-zero element of row i.
Definition: DVecDVecOuterExpr.h:564
Constraint on the data type.
Constraints on the storage order of matrix types.
IteratorCategory iterator_category
The iterator category.
Definition: DVecDVecOuterExpr.h:251
IfTrue_< evaluateRight, const RT2, CT2 > RT
Type for the assignment of the right-hand side dense vector operand.
Definition: DVecDVecOuterExpr.h:234
Constraint on the data type.
Header file for the IsReference type trait.
typename EnableIf< Condition, T >::Type EnableIf_
Auxiliary alias declaration for the EnableIf class template.The EnableIf_ alias declaration provides ...
Definition: EnableIf.h:223
Base class for all outer product expression templates.The VecTVecMultExpr class serves as a tag for a...
Definition: VecTVecMultExpr.h:66
typename T::OppositeType OppositeType_
Alias declaration for nested OppositeType type definitions.The OppositeType_ alias declaration provid...
Definition: Aliases.h:243
#define BLAZE_CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER(T1, T2)
Constraint on the data type.In case either of the two given data types T1 or T2 is not a matrix type ...
Definition: StorageOrder.h:84
std::random_access_iterator_tag IteratorCategory
The iterator category.
Definition: DVecDVecOuterExpr.h:244
DifferenceType difference_type
Difference between two iterators.
Definition: DVecDVecOuterExpr.h:255
typename T::ConstIterator ConstIterator_
Alias declaration for nested ConstIterator type definitions.The ConstIterator_ alias declaration prov...
Definition: Aliases.h:103
#define BLAZE_CONSTRAINT_MUST_BE_DENSE_VECTOR_TYPE(T)
Constraint on the data type.In case the given data type T is not a dense, N-dimensional vector type...
Definition: DenseVector.h:61
ptrdiff_t DifferenceType
Difference between two iterators.
Definition: DVecDVecOuterExpr.h:248
ElementType * PointerType
Pointer return type.
Definition: DVecDVecOuterExpr.h:246
PointerType pointer
Pointer return type.
Definition: DVecDVecOuterExpr.h:253
Header file for the IsComputation type trait class.
bool operator>(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DVecDVecOuterExpr.h:401
Base class for all compute expression templates.The Computation class serves as a tag for all computa...
Definition: Computation.h:59
bool isAligned() const noexcept
Returns whether the operands of the expression are properly aligned in memory.
Definition: DVecDVecOuterExpr.h:651
Compile time evaluation of the size of a vector.The Size type trait evaluates the size of the given v...
Definition: Size.h:75
Header file for the IntegralConstant class template.
Compile time evaluation of the number of columns of a matrix.The Columns type trait evaluates the num...
Definition: Columns.h:76
friend const ConstIterator operator-(const ConstIterator &it, size_t dec)
Subtraction between a ConstIterator and an integral value.
Definition: DVecDVecOuterExpr.h:470
#define BLAZE_CONSTRAINT_MUST_BE_ROW_VECTOR_TYPE(T)
Constraint on the data type.In case the given data type T is not a row dense or sparse vector type (i...
Definition: RowVector.h:61
Compile time evaluation of the number of rows of a matrix.The Rows type trait evaluates the number of...
Definition: Rows.h:76
Header file for the SubvectorExprTrait class template.
typename T::TransposeType TransposeType_
Alias declaration for nested TransposeType type definitions.The TransposeType_ alias declaration prov...
Definition: Aliases.h:403
LeftOperand lhs_
Left-hand side dense vector of the multiplication expression.
Definition: DVecDVecOuterExpr.h:668
friend const ConstIterator operator+(const ConstIterator &it, size_t inc)
Addition between a ConstIterator and an integral value.
Definition: DVecDVecOuterExpr.h:446
Iterator over the elements of the dense matrix.
Definition: DVecDVecOuterExpr.h:240
const DMatDMatMultExpr< T1, T2, false, false, false, false > operator*(const DenseMatrix< T1, false > &lhs, const DenseMatrix< T2, false > &rhs)
Multiplication operator for the multiplication of two row-major dense matrices ( ).
Definition: DMatDMatMultExpr.h:7505
System settings for the inline keywords.
Header file for the Size type trait.
Header file for the thresholds for matrix/vector and matrix/matrix multiplications.
Evaluation of the expression type type of a column operation.Via this type trait it is possible to ev...
Definition: ColumnExprTrait.h:78
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101
If_< IsExpression< VT2 >, const VT2, const VT2 &> RightOperand
Composite type of the right-hand side dense vector expression.
Definition: DVecDVecOuterExpr.h:228
TransposeType_< ResultType > TransposeType
Transpose type for expression template evaluations.
Definition: DVecDVecOuterExpr.h:214
Constraint on the transpose flag of vector types.
Header file for the IsExpression type trait class.
Header file for the function trace functionality.
OppositeType_< ResultType > OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DVecDVecOuterExpr.h:213
ResultType_< VT1 > RT1
Result type of the left-hand side dense vector expression.
Definition: DVecDVecOuterExpr.h:115