35#ifndef _BLAZE_MATH_EXPRESSIONS_DVECNOSIMDEXPR_H_
36#define _BLAZE_MATH_EXPRESSIONS_DVECNOSIMDEXPR_H_
85 :
public VecNoSIMDExpr< DenseVector< DVecNoSIMDExpr<VT,TF>, TF > >
102 static constexpr bool useAssign = RequiresEvaluation_v<VT>;
106 template<
typename VT2 >
107 static constexpr bool UseAssign_v =
useAssign;
119 template<
typename VT2 >
120 static constexpr bool UseSMPAssign_v = ( VT2::smpAssignable &&
useAssign );
184 return dv_.at( index );
223 inline size_t size() const noexcept {
244 template<
typename T >
245 inline bool canAlias(
const T* alias )
const noexcept {
246 return dv_.canAlias( alias );
256 template<
typename T >
257 inline bool isAliased(
const T* alias )
const noexcept {
258 return dv_.isAliased( alias );
268 return dv_.isAligned();
278 return dv_.canSMPAssign();
301 template<
typename VT2 >
309 assign( *lhs, rhs.dv_ );
328 template<
typename VT2 >
336 assign( *lhs, rhs.dv_ );
355 template<
typename VT2 >
356 friend inline auto addAssign( DenseVector<VT2,TF>& lhs,
const DVecNoSIMDExpr& rhs )
357 -> EnableIf_t< UseAssign_v<VT2> >
363 addAssign( *lhs, rhs.dv_ );
386 template<
typename VT2 >
387 friend inline auto subAssign( DenseVector<VT2,TF>& lhs,
const DVecNoSIMDExpr& rhs )
388 -> EnableIf_t< UseAssign_v<VT2> >
394 subAssign( *lhs, rhs.dv_ );
417 template<
typename VT2 >
418 friend inline auto multAssign( DenseVector<VT2,TF>& lhs,
const DVecNoSIMDExpr& rhs )
419 -> EnableIf_t< UseAssign_v<VT2> >
425 multAssign( *lhs, rhs.dv_ );
448 template<
typename VT2 >
449 friend inline auto divAssign( DenseVector<VT2,TF>& lhs,
const DVecNoSIMDExpr& rhs )
450 -> EnableIf_t< UseAssign_v<VT2> >
456 divAssign( *lhs, rhs.dv_ );
479 template<
typename VT2 >
481 -> EnableIf_t< UseSMPAssign_v<VT2> >
506 template<
typename VT2 >
508 -> EnableIf_t< UseSMPAssign_v<VT2> >
533 template<
typename VT2 >
535 -> EnableIf_t< UseSMPAssign_v<VT2> >
564 template<
typename VT2 >
566 -> EnableIf_t< UseSMPAssign_v<VT2> >
595 template<
typename VT2 >
597 -> EnableIf_t< UseSMPAssign_v<VT2> >
626 template<
typename VT2 >
628 -> EnableIf_t< UseSMPAssign_v<VT2> >
685 return ReturnType( *dv );
700template<
typename VT,
bool TF >
701struct HasConstDataAccess< DVecNoSIMDExpr<VT,TF> >
702 :
public HasConstDataAccess<VT>
718template<
typename VT,
bool TF >
719struct IsAligned< DVecNoSIMDExpr<VT,TF> >
720 :
public IsAligned<VT>
736template<
typename VT,
bool TF >
737struct IsPadded< DVecNoSIMDExpr<VT,TF> >
738 :
public IsPadded<VT>
Header file for auxiliary alias declarations.
typename T::ReturnType ReturnType_t
Alias declaration for nested ReturnType type definitions.
Definition: Aliases.h:470
typename T::ResultType ResultType_t
Alias declaration for nested ResultType type definitions.
Definition: Aliases.h:450
typename T::ElementType ElementType_t
Alias declaration for nested ElementType type definitions.
Definition: Aliases.h:190
typename T::TransposeType TransposeType_t
Alias declaration for nested TransposeType type definitions.
Definition: Aliases.h:550
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 GetMemberType type trait.
Header file for the HasConstDataAccess type trait.
Header file for the If class template.
Utility type for generic codes.
Header file for the IsAligned type trait.
Header file for the IsExpression type trait class.
Header file for the IsPadded type trait.
Deactivation of problematic macros.
Expression object for the non-SIMD evaluation of dense vectors.
Definition: DVecNoSIMDExpr.h:87
If_t< IsExpression_v< VT >, const VT, const VT & > Operand
Composite data type of the dense vector expression.
Definition: DVecNoSIMDExpr.h:144
GetConstIterator_t< VT > ConstIterator
Iterator over the elements of the dense vector.
Definition: DVecNoSIMDExpr.h:141
ElementType_t< VT > ElementType
Resulting element type.
Definition: DVecNoSIMDExpr.h:134
const ElementType * data() const noexcept
Low-level data access to the vector elements.
Definition: DVecNoSIMDExpr.h:193
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: DVecNoSIMDExpr.h:257
bool isAligned() const noexcept
Returns whether the operands of the expression are properly aligned in memory.
Definition: DVecNoSIMDExpr.h:267
ReturnType_t< VT > ReturnType
Return type for expression template evaluations.
Definition: DVecNoSIMDExpr.h:135
TransposeType_t< VT > TransposeType
Transpose type for expression template evaluations.
Definition: DVecNoSIMDExpr.h:133
ConstIterator end() const
Returns an iterator just past the last non-zero element of the dense vector.
Definition: DVecNoSIMDExpr.h:213
ResultType_t< VT > ResultType
Result type for expression template evaluations.
Definition: DVecNoSIMDExpr.h:132
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: DVecNoSIMDExpr.h:245
size_t size() const noexcept
Returns the current size/dimension of the vector.
Definition: DVecNoSIMDExpr.h:223
static constexpr bool simdEnabled
Compilation switch for the expression template evaluation strategy.
Definition: DVecNoSIMDExpr.h:149
DVecNoSIMDExpr(const VT &dv) noexcept
Constructor for the DVecNoSIMDExpr class.
Definition: DVecNoSIMDExpr.h:160
BLAZE_CREATE_GET_TYPE_MEMBER_TYPE_TRAIT(GetConstIterator, ConstIterator, INVALID_TYPE)
Definition of the GetConstIterator type trait.
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: DVecNoSIMDExpr.h:171
static constexpr bool useAssign
Compilation switch for the serial evaluation strategy of the no-SIMD expression.
Definition: DVecNoSIMDExpr.h:102
Operand dv_
Dense vector of the no-SIMD expression.
Definition: DVecNoSIMDExpr.h:284
static constexpr bool smpAssignable
Compilation switch for the expression template assignment strategy.
Definition: DVecNoSIMDExpr.h:152
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: DVecNoSIMDExpr.h:277
If_t< useAssign, const ResultType, const DVecNoSIMDExpr & > CompositeType
Data type for composite expression templates.
Definition: DVecNoSIMDExpr.h:138
ReturnType at(size_t index) const
Checked access to the vector elements.
Definition: DVecNoSIMDExpr.h:183
Operand operand() const noexcept
Returns the dense vector operand.
Definition: DVecNoSIMDExpr.h:233
ConstIterator begin() const
Returns an iterator to the first non-zero element of the dense vector.
Definition: DVecNoSIMDExpr.h:203
Base class for N-dimensional dense vectors.
Definition: DenseVector.h:77
Base class for sparse vectors.
Definition: SparseVector.h:72
Constraint on the data type.
Header file for the DenseVector base class.
Header file for the Modification base class.
Header file for the VecNoSIMDExpr base class.
decltype(auto) nosimd(const DenseVector< VT, TF > &dv)
Disables the SIMD evaluation of the given dense vector expression dv.
Definition: DVecNoSIMDExpr.h:680
#define BLAZE_CONSTRAINT_MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG(T, TF)
Constraint on the data type.
Definition: TransposeFlag.h:63
#define BLAZE_CONSTRAINT_MUST_BE_DENSE_VECTOR_TYPE(T)
Constraint on the data type.
Definition: DenseVector.h:61
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.
Definition: Assert.h:101
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:221
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
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
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:192
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
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.
Definition: EnableIf.h:138
typename If< Condition >::template Type< T1, T2 > If_t
Auxiliary alias template for the If class template.
Definition: If.h:108
#define BLAZE_FUNCTION_TRACE
Function trace macro.
Definition: FunctionTrace.h:94
Header file for the exception macros of the math module.
Constraint on the data type.
Header file for all forward declarations for expression class templates.
Base class for all modification expression templates.
Definition: Modification.h:76
Base class for all vector no-SIMD expression templates.
Definition: VecNoSIMDExpr.h:88
System settings for the inline keywords.
Header file for the RequiresEvaluation type trait.
Header file for basic type definitions.