35#ifndef _BLAZE_MATH_EXPRESSIONS_DVECNOALIASEXPR_H_
36#define _BLAZE_MATH_EXPRESSIONS_DVECNOALIASEXPR_H_
86 :
public VecNoAliasExpr< DenseVector< DVecNoAliasExpr<VT,TF>, TF > >
160 return dv_.at( index );
171 return dv_.load( index );
210 inline size_t size() const noexcept {
231 template<
typename T >
232 inline bool canAlias(
const T* alias )
const noexcept {
244 template<
typename T >
245 inline bool isAliased(
const T* alias )
const noexcept {
257 return dv_.isAligned();
267 return dv_.canSMPAssign();
290 template<
typename VT2 >
297 assign( *lhs, rhs.
dv_ );
316 template<
typename VT2 >
323 assign( *lhs, rhs.
dv_ );
342 template<
typename VT2 >
343 friend inline void addAssign( DenseVector<VT2,TF>& lhs,
const DVecNoAliasExpr& rhs )
349 addAssign( *lhs, rhs.dv_ );
372 template<
typename VT2 >
373 friend inline void subAssign( DenseVector<VT2,TF>& lhs,
const DVecNoAliasExpr& rhs )
379 subAssign( *lhs, rhs.dv_ );
402 template<
typename VT2 >
403 friend inline void multAssign( DenseVector<VT2,TF>& lhs,
const DVecNoAliasExpr& rhs )
409 multAssign( *lhs, rhs.dv_ );
432 template<
typename VT2 >
433 friend inline void divAssign( DenseVector<VT2,TF>& lhs,
const DVecNoAliasExpr& rhs )
439 divAssign( *lhs, rhs.dv_ );
462 template<
typename VT2 >
488 template<
typename VT2 >
514 template<
typename VT2 >
544 template<
typename VT2 >
574 template<
typename VT2 >
604 template<
typename VT2 >
662 return ReturnType( *dv );
677template<
typename VT,
bool TF >
678struct HasConstDataAccess< DVecNoAliasExpr<VT,TF> >
679 :
public HasConstDataAccess<VT>
695template<
typename VT,
bool TF >
696struct IsAligned< DVecNoAliasExpr<VT,TF> >
697 :
public IsAligned<VT>
713template<
typename VT,
bool TF >
714struct IsPadded< DVecNoAliasExpr<VT,TF> >
715 :
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 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.
Header file for the MAYBE_UNUSED function template.
Header file for the SIMD trait.
Expression object for the non-aliased evaluation of dense vectors.
Definition: DVecNoAliasExpr.h:88
ReturnType_t< VT > ReturnType
Return type for expression template evaluations.
Definition: DVecNoAliasExpr.h:106
static constexpr bool smpAssignable
Compilation switch for the expression template assignment strategy.
Definition: DVecNoAliasExpr.h:123
DVecNoAliasExpr(const VT &dv) noexcept
Constructor for the DVecNoAliasExpr class.
Definition: DVecNoAliasExpr.h:136
bool isAligned() const noexcept
Returns whether the operands of the expression are properly aligned in memory.
Definition: DVecNoAliasExpr.h:256
Operand operand() const noexcept
Returns the dense vector operand.
Definition: DVecNoAliasExpr.h:220
const ElementType * data() const noexcept
Low-level data access to the vector elements.
Definition: DVecNoAliasExpr.h:180
static constexpr size_t SIMDSIZE
The number of elements packed within a single SIMD element.
Definition: DVecNoAliasExpr.h:128
BLAZE_CREATE_GET_TYPE_MEMBER_TYPE_TRAIT(GetConstIterator, ConstIterator, INVALID_TYPE)
Definition of the GetConstIterator type trait.
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: DVecNoAliasExpr.h:266
TransposeType_t< VT > TransposeType
Transpose type for expression template evaluations.
Definition: DVecNoAliasExpr.h:104
ResultType_t< VT > ResultType
Result type for expression template evaluations.
Definition: DVecNoAliasExpr.h:103
ElementType_t< VT > ElementType
Resulting element type.
Definition: DVecNoAliasExpr.h:105
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: DVecNoAliasExpr.h:147
static constexpr bool simdEnabled
Compilation switch for the expression template evaluation strategy.
Definition: DVecNoAliasExpr.h:120
ConstIterator end() const
Returns an iterator just past the last non-zero element of the dense vector.
Definition: DVecNoAliasExpr.h:200
size_t size() const noexcept
Returns the current size/dimension of the vector.
Definition: DVecNoAliasExpr.h:210
GetConstIterator_t< VT > ConstIterator
Iterator over the elements of the dense vector.
Definition: DVecNoAliasExpr.h:112
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: DVecNoAliasExpr.h:245
ReturnType at(size_t index) const
Checked access to the vector elements.
Definition: DVecNoAliasExpr.h:159
If_t< IsExpression_v< VT >, const VT, const VT & > Operand
Composite data type of the dense vector expression.
Definition: DVecNoAliasExpr.h:115
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: DVecNoAliasExpr.h:232
If_t< RequiresEvaluation_v< VT >, const ResultType, const DVecNoAliasExpr & > CompositeType
Data type for composite expression templates.
Definition: DVecNoAliasExpr.h:109
BLAZE_ALWAYS_INLINE auto load(size_t index) const noexcept
Access to the SIMD elements of the vector.
Definition: DVecNoAliasExpr.h:170
ConstIterator begin() const
Returns an iterator to the first non-zero element of the dense vector.
Definition: DVecNoAliasExpr.h:190
Operand dv_
Dense vector of the no-alias expression.
Definition: DVecNoAliasExpr.h:273
Base class for N-dimensional dense vectors.
Definition: DenseVector.h:77
SIMD characteristics of data types.
Definition: SIMDTrait.h:297
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 VecNoAliasExpr base class.
decltype(auto) noalias(const DenseVector< VT, TF > &dv)
Forces the non-aliased evaluation of the given dense vector expression dv.
Definition: DVecNoAliasExpr.h:657
#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
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
constexpr void MAYBE_UNUSED(const Args &...)
Suppression of unused parameter warnings.
Definition: MaybeUnused.h:81
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-alias expression templates.
Definition: VecNoAliasExpr.h:68
System settings for the inline keywords.
Header file for the RequiresEvaluation type trait.
Header file for basic type definitions.