35 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECTRANSEXPR_H_ 36 #define _BLAZE_MATH_EXPRESSIONS_DVECTRANSEXPR_H_ 91 :
public VecTransExpr< DenseVector< DVecTransExpr<VT,TF>, TF > >
92 ,
private If< IsComputation_v<VT>, Computation, Transformation >::Type
110 static constexpr
bool useAssign = RequiresEvaluation_v<VT>;
113 template<
typename VT2 >
115 static constexpr
bool UseAssign_v =
useAssign;
127 template<
typename VT2 >
128 static constexpr
bool UseSMPAssign_v = ( VT2::smpAssignable &&
useAssign );
194 if( index >=
dv_.size() ) {
197 return (*
this)[index];
210 return dv_.load( index );
249 inline size_t size() const noexcept {
270 template<
typename T >
271 inline bool canAlias(
const T* alias )
const noexcept {
272 return dv_.canAlias( alias );
282 template<
typename T >
283 inline bool isAliased(
const T* alias )
const noexcept {
284 return dv_.isAliased( alias );
294 return dv_.isAligned();
304 return dv_.canSMPAssign();
327 template<
typename VT2 >
336 assign( tmp, rhs.dv_ );
355 template<
typename VT2 >
364 assign( tmp, rhs.dv_ );
383 template<
typename VT2 >
384 friend inline auto addAssign( DenseVector<VT2,TF>& lhs,
const DVecTransExpr& rhs )
385 -> EnableIf_t< UseAssign_v<VT2> >
391 DVecTransposer<VT2,!TF> tmp( ~lhs );
392 addAssign( tmp, rhs.dv_ );
415 template<
typename VT2 >
416 friend inline auto subAssign( DenseVector<VT2,TF>& lhs,
const DVecTransExpr& rhs )
417 -> EnableIf_t< UseAssign_v<VT2> >
423 DVecTransposer<VT2,!TF> tmp( ~lhs );
424 subAssign( tmp, rhs.dv_ );
447 template<
typename VT2 >
448 friend inline auto multAssign( DenseVector<VT2,TF>& lhs,
const DVecTransExpr& rhs )
449 -> EnableIf_t< UseAssign_v<VT2> >
455 DVecTransposer<VT2,!TF> tmp( ~lhs );
456 multAssign( tmp, rhs.dv_ );
479 template<
typename VT2 >
480 friend inline auto divAssign( DenseVector<VT2,TF>& lhs,
const DVecTransExpr& rhs )
481 -> EnableIf_t< UseAssign_v<VT2> >
487 DVecTransposer<VT2,!TF> tmp( ~lhs );
488 divAssign( tmp, rhs.dv_ );
511 template<
typename VT2 >
513 -> EnableIf_t< UseSMPAssign_v<VT2> >
519 DVecTransposer<VT2,!TF> tmp( ~lhs );
539 template<
typename VT2 >
541 -> EnableIf_t< UseSMPAssign_v<VT2> >
547 SVecTransposer<VT2,!TF> tmp( ~lhs );
567 template<
typename VT2 >
569 -> EnableIf_t< UseSMPAssign_v<VT2> >
575 DVecTransposer<VT2,!TF> tmp( ~lhs );
599 template<
typename VT2 >
601 -> EnableIf_t< UseSMPAssign_v<VT2> >
607 DVecTransposer<VT2,!TF> tmp( ~lhs );
631 template<
typename VT2 >
633 -> EnableIf_t< UseSMPAssign_v<VT2> >
639 DVecTransposer<VT2,!TF> tmp( ~lhs );
663 template<
typename VT2 >
665 -> EnableIf_t< UseSMPAssign_v<VT2> >
671 DVecTransposer<VT2,!TF> tmp( ~lhs );
718 template<
typename VT
725 return ReturnType( ~dv );
738 template<
typename VT
740 inline decltype(
auto) transTo_backend( const DenseVector<VT,TF>& dv,
FalseType )
756 template<
typename VT
758 inline const VT& transTo_backend(
const DenseVector<VT,TF>& dv,
TrueType )
816 template<
typename VT
818 inline decltype(
auto)
trans( const DVecTransExpr<VT,TF>& dv )
840 template<
typename VT
843 inline decltype(
auto)
trans( const DVecScalarMultExpr<VT,ST,TF>& dv )
847 return trans( dv.leftOperand() ) * dv.rightOperand();
863 template<
typename VT,
bool TF >
864 struct HasConstDataAccess< DVecTransExpr<VT,TF> >
865 :
public HasConstDataAccess<VT>
881 template<
typename VT,
bool TF >
882 struct IsAligned< DVecTransExpr<VT,TF> >
883 :
public IsAligned<VT>
899 template<
typename VT,
bool TF >
900 struct IsPadded< DVecTransExpr<VT,TF> >
901 :
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: IntegralConstant.h:121
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: DVecTransExpr.h:283
Header file for auxiliary alias declarations.
const ElementType * data() const noexcept
Low-level data access to the vector elements.
Definition: DVecTransExpr.h:219
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:96
Header file for basic type definitions.
typename If< Condition, T1, T2 >::Type If_t
Auxiliary alias template for the If class template.The If_t alias template provides a convenient shor...
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
DVecTransExpr(const VT &dv) noexcept
Constructor for the DVecTransExpr class.
Definition: DVecTransExpr.h:169
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: DVecTransExpr.h:180
Generic wrapper for a compile time constant integral value.The IntegralConstant class template repres...
Definition: IntegralConstant.h:72
static constexpr bool useAssign
Compilation switch for the serial evaluation strategy of the transposition expression.
Definition: DVecTransExpr.h:110
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: IntegralConstant.h:132
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:259
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:78
static constexpr bool simdEnabled
Compilation switch for the expression template evaluation strategy.
Definition: DVecTransExpr.h:153
Operand dv_
Dense vector of the transposition expression.
Definition: DVecTransExpr.h:310
If_t< useAssign, const ResultType, const DVecTransExpr & > CompositeType
Data type for composite expression templates.
Definition: DVecTransExpr.h:142
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:156
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: DVecTransExpr.h:271
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:193
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:161
TransposeType_t< VT > ResultType
Result type for expression template evaluations.
Definition: DVecTransExpr.h:136
Expression object for the transposition of a sparse vector.The SVecTransposer class is a wrapper obje...
Definition: Forward.h:166
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:207
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:249
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:239
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:781
Constraint on the data type.
Header file for the exception macros of the math module.
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: DVecTransExpr.h:303
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:229
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:293
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:145
If_t< IsExpression_v< VT >, const VT, const VT & > Operand
Composite data type of the dense vector expression.
Definition: DVecTransExpr.h:148
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
Header file for all forward declarations for expression class templates.
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:139
#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:146
Header file for the IntegralConstant class template.
ResultType_t< VT > TransposeType
Transpose type for expression template evaluations.
Definition: DVecTransExpr.h:137
Expression object for dense vector transpositions.The DVecTransExpr class represents the compile time...
Definition: DVecTransExpr.h:90
ElementType_t< VT > ElementType
Resulting element type.
Definition: DVecTransExpr.h:138
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,...
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 IsExpression type trait class.
Header file for the function trace functionality.