35 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECTRANSEXPR_H_ 36 #define _BLAZE_MATH_EXPRESSIONS_DVECTRANSEXPR_H_ 93 :
public VecTransExpr< DenseVector< DVecTransExpr<VT,TF>, TF > >
94 ,
private If< IsComputation_v<VT>, Computation, Transformation >::Type
112 static constexpr
bool useAssign = RequiresEvaluation_v<VT>;
115 template<
typename VT2 >
117 static constexpr
bool UseAssign_v =
useAssign;
129 template<
typename VT2 >
196 if( index >=
dv_.size() ) {
199 return (*
this)[index];
212 return dv_.load( index );
251 inline size_t size() const noexcept {
272 template<
typename T >
273 inline bool canAlias(
const T* alias )
const noexcept {
274 return dv_.canAlias( alias );
284 template<
typename T >
285 inline bool isAliased(
const T* alias )
const noexcept {
286 return dv_.isAliased( alias );
296 return dv_.isAligned();
306 return dv_.canSMPAssign();
329 template<
typename VT2 >
338 assign( tmp, rhs.dv_ );
357 template<
typename VT2 >
366 assign( tmp, rhs.dv_ );
385 template<
typename VT2 >
386 friend inline auto addAssign( DenseVector<VT2,TF>& lhs,
const DVecTransExpr& rhs )
387 -> EnableIf_t< UseAssign_v<VT2> >
393 DVecTransposer<VT2,!TF> tmp( ~lhs );
394 addAssign( tmp, rhs.dv_ );
417 template<
typename VT2 >
418 friend inline auto subAssign( DenseVector<VT2,TF>& lhs,
const DVecTransExpr& rhs )
419 -> EnableIf_t< UseAssign_v<VT2> >
425 DVecTransposer<VT2,!TF> tmp( ~lhs );
426 subAssign( tmp, rhs.dv_ );
449 template<
typename VT2 >
450 friend inline auto multAssign( DenseVector<VT2,TF>& lhs,
const DVecTransExpr& rhs )
451 -> EnableIf_t< UseAssign_v<VT2> >
457 DVecTransposer<VT2,!TF> tmp( ~lhs );
458 multAssign( tmp, rhs.dv_ );
481 template<
typename VT2 >
482 friend inline auto divAssign( DenseVector<VT2,TF>& lhs,
const DVecTransExpr& rhs )
483 -> EnableIf_t< UseAssign_v<VT2> >
489 DVecTransposer<VT2,!TF> tmp( ~lhs );
490 divAssign( tmp, rhs.dv_ );
513 template<
typename VT2 >
515 -> EnableIf_t< UseSMPAssign_v<VT2> >
521 DVecTransposer<VT2,!TF> tmp( ~lhs );
541 template<
typename VT2 >
543 -> EnableIf_t< UseSMPAssign_v<VT2> >
549 SVecTransposer<VT2,!TF> tmp( ~lhs );
569 template<
typename VT2 >
571 -> EnableIf_t< UseSMPAssign_v<VT2> >
577 DVecTransposer<VT2,!TF> tmp( ~lhs );
601 template<
typename VT2 >
603 -> EnableIf_t< UseSMPAssign_v<VT2> >
609 DVecTransposer<VT2,!TF> tmp( ~lhs );
633 template<
typename VT2 >
635 -> EnableIf_t< UseSMPAssign_v<VT2> >
641 DVecTransposer<VT2,!TF> tmp( ~lhs );
665 template<
typename VT2 >
667 -> EnableIf_t< UseSMPAssign_v<VT2> >
673 DVecTransposer<VT2,!TF> tmp( ~lhs );
720 template<
typename VT
740 template<
typename VT
742 inline decltype(
auto) transTo_backend( const DenseVector<VT,TF>& dv,
FalseType )
758 template<
typename VT
760 inline const VT& transTo_backend(
const DenseVector<VT,TF>& dv,
TrueType )
818 template<
typename VT
820 inline decltype(
auto)
trans( const DVecTransExpr<VT,TF>& dv )
842 template<
typename VT
845 inline decltype(
auto)
trans( const DVecScalarMultExpr<VT,ST,TF>& dv )
849 return trans( dv.leftOperand() ) * dv.rightOperand();
865 template<
typename VT,
bool TF >
866 struct HasConstDataAccess< DVecTransExpr<VT,TF> >
867 :
public HasConstDataAccess<VT>
883 template<
typename VT,
bool TF >
884 struct IsAligned< DVecTransExpr<VT,TF> >
885 :
public IsAligned<VT>
901 template<
typename VT,
bool TF >
902 struct IsPadded< DVecTransExpr<VT,TF> >
903 :
public IsPadded<VT>
BoolConstant< false > FalseType
Type/value traits base class.The FalseType class is used as base class for type traits and value trai...
Definition: FalseType.h:61
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: DVecTransExpr.h:285
Header file for auxiliary alias declarations.
const ElementType * data() const noexcept
Low-level data access to the vector elements.
Definition: DVecTransExpr.h:221
Base class for all vector transposition expression templates.The VecTransExpr class serves as a tag f...
Definition: VecTransExpr.h:66
Compile time type selection.The If class template selects one of the two given types T1 and T2 depend...
Definition: If.h:59
CompositeType_t< VT > CT
Composite type of the dense vector expression.
Definition: DVecTransExpr.h:98
Header file for basic type definitions.
typename If< Condition, T1, T2 >::Type If_t
Auxiliary alias declaration for the If class template.The If_t alias declaration provides a convenien...
Definition: If.h:109
typename T::ResultType ResultType_t
Alias declaration for nested ResultType type definitions.The ResultType_t alias declaration provides ...
Definition: Aliases.h:390
Header file for the FalseType type/value trait base class.
DVecTransExpr(const VT &dv) noexcept
Constructor for the DVecTransExpr class.
Definition: DVecTransExpr.h:171
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: DVecTransExpr.h:182
Generic wrapper for a compile time constant integral value.The IntegralConstant class template repres...
Definition: IntegralConstant.h:71
static constexpr bool smpAssignable
Compilation flag for SMP assignments.
Definition: CompressedMatrix.h:3113
static constexpr bool useAssign
Compilation switch for the serial evaluation strategy of the transposition expression.
Definition: DVecTransExpr.h:112
Header file for the DenseVector base class.
Header file for the Computation base class.
BoolConstant< true > TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: TrueType.h:61
Header file for the RequiresEvaluation type trait.
BLAZE_CREATE_GET_TYPE_MEMBER_TYPE_TRAIT(GetConstIterator, ConstIterator, INVALID_TYPE)
Definition of the GetConstIterator type trait.
typename T::ReturnType ReturnType_t
Alias declaration for nested ReturnType type definitions.The ReturnType_t alias declaration provides ...
Definition: Aliases.h:410
Operand operand() const noexcept
Returns the dense vector operand.
Definition: DVecTransExpr.h:261
typename T::ElementType ElementType_t
Alias declaration for nested ElementType type definitions.The ElementType_t alias declaration provide...
Definition: Aliases.h:170
auto smpDivAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs) -> EnableIf_t< IsDenseVector_v< VT1 > >
Default implementation of the SMP division assignment of a vector to a dense vector.
Definition: DenseVector.h:220
Expression object for the transposition of a dense vector.The DVecTransposer class is a wrapper objec...
Definition: DVecTransposer.h:77
static constexpr bool simdEnabled
Compilation switch for the expression template evaluation strategy.
Definition: DVecTransExpr.h:155
Operand dv_
Dense vector of the transposition expression.
Definition: DVecTransExpr.h:312
If_t< useAssign, const ResultType, const DVecTransExpr &> CompositeType
Data type for composite expression templates.
Definition: DVecTransExpr.h:144
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.The EnableIf_t alias declaration provides a convenient...
Definition: EnableIf.h:138
static constexpr bool smpAssignable
Compilation switch for the expression template assignment strategy.
Definition: DVecTransExpr.h:158
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: DVecTransExpr.h:273
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
Header file for the If class template.
ReturnType at(size_t index) const
Checked access to the vector elements.
Definition: DVecTransExpr.h:195
Header file for the dense vector transposer.
#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
static constexpr size_t SIMDSIZE
The number of elements packed within a single SIMD element.
Definition: DVecTransExpr.h:163
TransposeType_t< VT > ResultType
Result type for expression template evaluations.
Definition: DVecTransExpr.h:138
Expression object for the transposition of a sparse vector.The SVecTransposer class is a wrapper obje...
Definition: Forward.h:156
Header file for all SIMD functionality.
BLAZE_ALWAYS_INLINE auto load(size_t index) const noexcept
Access to the SIMD elements of the vector.
Definition: DVecTransExpr.h:209
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:76
Header file for the GetMemberType type trait.
size_t size() const noexcept
Returns the current size/dimension of the vector.
Definition: DVecTransExpr.h:251
Header file for the IsAligned type trait.
ConstIterator end() const
Returns an iterator just past the last non-zero element of the dense vector.
Definition: DVecTransExpr.h:241
Constraint on the data type.
decltype(auto) transTo(const DenseVector< VT, TF > &dv)
Conditional calculation of the transpose of the given dense vector.
Definition: DVecTransExpr.h:783
Constraint on the data type.
Header file for the exception macros of the math module.
Header file for all forward declarations for expression class templates.
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: DVecTransExpr.h:305
Header file for the EnableIf class template.
Header file for the IsPadded type trait.
ConstIterator begin() const
Returns an iterator to the first non-zero element of the dense vector.
Definition: DVecTransExpr.h:231
Header file for the HasConstDataAccess type trait.
Header file for the VecTransExpr base class.
bool isAligned() const noexcept
Returns whether the operands of the expression are properly aligned in memory.
Definition: DVecTransExpr.h:295
typename T::TransposeType TransposeType_t
Alias declaration for nested TransposeType type definitions.The TransposeType_t alias declaration pro...
Definition: Aliases.h:470
Header file for run time assertion macros.
typename T::CompositeType CompositeType_t
Alias declaration for nested CompositeType type definitions.The CompositeType_t alias declaration pro...
Definition: Aliases.h:90
Utility type for generic codes.
auto smpAddAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP addition assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:131
GetConstIterator_t< VT > ConstIterator
Iterator over the elements of the dense vector.
Definition: DVecTransExpr.h:147
If_t< IsExpression_v< VT >, const VT, const VT &> Operand
Composite data type of the dense vector expression.
Definition: DVecTransExpr.h:150
SIMD characteristics of data types.The SIMDTrait class template provides the SIMD characteristics of ...
Definition: SIMDTrait.h:295
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:94
auto smpAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:100
ReturnType_t< VT > ReturnType
Return type for expression template evaluations.
Definition: DVecTransExpr.h:141
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:3081
#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
decltype(auto) trans(const DenseMatrix< MT, SO > &dm)
Calculation of the transpose of the given dense matrix.
Definition: DMatTransExpr.h:765
Header file for the sparse vector transposer.
Header file for the IsComputation type trait class.
auto smpSubAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:162
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:138
Header file for the IntegralConstant class template.
ResultType_t< VT > TransposeType
Transpose type for expression template evaluations.
Definition: DVecTransExpr.h:139
Expression object for dense vector transpositions.The DVecTransExpr class represents the compile time...
Definition: DVecTransExpr.h:92
ElementType_t< VT > ElementType
Resulting element type.
Definition: DVecTransExpr.h:140
System settings for the inline keywords.
#define BLAZE_CONSTRAINT_MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG(T, TF)
Constraint on the data type.In case the given data type T is not a dense or sparse vector type and in...
Definition: TransposeFlag.h:63
#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
auto smpMultAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs) -> EnableIf_t< IsDenseVector_v< VT1 > >
Default implementation of the SMP multiplication assignment of a vector to a dense vector...
Definition: DenseVector.h:191
Header file for the TrueType type/value trait base class.
Header file for the IsExpression type trait class.
Header file for the function trace functionality.