35 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECEVALEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DVECEVALEXPR_H_
107 enum { vectorizable = 0 };
110 enum { smpAssignable = VT::smpAssignable };
142 inline ReturnType
at(
size_t index )
const {
143 if( index >=
dv_.size() ) {
146 return (*
this)[index];
176 template<
typename T >
178 return dv_.canAlias( alias );
188 template<
typename T >
190 return dv_.isAliased( alias );
200 return dv_.isAligned();
210 return dv_.canSMPAssign();
231 template<
typename VT2 >
238 assign( ~lhs, rhs.
dv_ );
255 template<
typename VT2 >
262 assign( ~lhs, rhs.
dv_ );
279 template<
typename VT2 >
280 friend inline void addAssign( DenseVector<VT2,TF>& lhs,
const DVecEvalExpr& rhs )
286 addAssign( ~lhs, rhs.dv_ );
303 template<
typename VT2 >
304 friend inline void addAssign( SparseVector<VT2,TF>& lhs,
const DVecEvalExpr& rhs )
310 addAssign( ~lhs, rhs.dv_ );
327 template<
typename VT2 >
328 friend inline void subAssign( DenseVector<VT2,TF>& lhs,
const DVecEvalExpr& rhs )
334 subAssign( ~lhs, rhs.dv_ );
351 template<
typename VT2 >
352 friend inline void subAssign( SparseVector<VT2,TF>& lhs,
const DVecEvalExpr& rhs )
358 subAssign( ~lhs, rhs.dv_ );
375 template<
typename VT2 >
376 friend inline void multAssign( DenseVector<VT2,TF>& lhs,
const DVecEvalExpr& rhs )
382 multAssign( ~lhs, rhs.dv_ );
399 template<
typename VT2 >
400 friend inline void multAssign( SparseVector<VT2,TF>& lhs,
const DVecEvalExpr& rhs )
406 multAssign( ~lhs, rhs.dv_ );
423 template<
typename VT2 >
447 template<
typename VT2 >
471 template<
typename VT2 >
495 template<
typename VT2 >
519 template<
typename VT2 >
543 template<
typename VT2 >
567 template<
typename VT2 >
591 template<
typename VT2 >
638 template<
typename VT
668 template<
typename VT
670 inline const DVecEvalExpr<VT,TF>
eval(
const DVecEvalExpr<VT,TF>& dv )
688 template<
typename VT,
bool TF >
689 struct Size< DVecEvalExpr<VT,TF> > :
public Size<VT>
705 template<
typename VT,
bool TF >
706 struct IsAligned< DVecEvalExpr<VT,TF> > :
public IsTrue< IsAligned<VT>::value >
722 template<
typename VT >
723 struct DVecEvalExprTrait< DVecEvalExpr<VT,false> >
727 typedef typename SelectType< IsDenseVector<VT>::value && IsColumnVector<VT>::value
728 , DVecEvalExpr<VT,false>
729 , INVALID_TYPE >::Type Type;
738 template<
typename VT >
739 struct TDVecEvalExprTrait< DVecEvalExpr<VT,true> >
743 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value
744 , DVecEvalExpr<VT,true>
745 , INVALID_TYPE >::Type Type;
754 template<
typename VT,
bool TF,
bool AF >
755 struct SubvectorExprTrait< DVecEvalExpr<VT,TF>, AF >
759 typedef typename EvalExprTrait< typename SubvectorExprTrait<const VT,AF>::Type >::Type Type;
const ResultType CompositeType
Data type for composite expression templates.
Definition: DVecEvalExpr.h:99
Operand operand() const
Returns the dense vector operand.
Definition: DVecEvalExpr.h:165
VT::ElementType ElementType
Resulting element type.
Definition: DVecEvalExpr.h:95
Header file for basic type definitions.
Base class for all vector evaluation expression templates.The VecEvalExpr class serves as a tag for a...
Definition: VecEvalExpr.h:65
SelectType< IsExpression< VT >::value, const VT, const VT & >::Type Operand
Composite data type of the dense vector expression.
Definition: DVecEvalExpr.h:102
Header file for the IsRowVector type trait.
Header file for the DenseVector base class.
Header file for the Computation base class.
Header file for the VecEvalExpr base class.
Constraint on the data type.
Operand dv_
Dense vector of the evaluation expression.
Definition: DVecEvalExpr.h:216
Expression object for the forced evaluation of dense vectors.The DVecEvalExpr class represents the co...
Definition: DVecEvalExpr.h:86
Compile time type selection.The SelectType class template selects one of the two given types T1 and T...
Definition: SelectType.h:59
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: DVecEvalExpr.h:129
#define BLAZE_THROW_OUT_OF_RANGE(MESSAGE)
Macro for the emission of a std::out_of_range exceptionThis macro encapsulates the default way of Bla...
Definition: Exception.h:331
size_t size() const
Returns the current size/dimension of the vector.
Definition: DVecEvalExpr.h:155
Header file for the TDVecEvalExprTrait class template.
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
Header file for the IsAligned type trait.
Constraint on the data type.
ReturnType at(size_t index) const
Checked access to the vector elements.
Definition: DVecEvalExpr.h:142
CompressedMatrix< Type, false > TransposeType
Transpose type for expression template evaluations.
Definition: CompressedMatrix.h:2585
Constraint on the data type.
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
Header file for the SelectType class template.
Header file for all forward declarations for expression class templates.
EnableIf< IsDenseMatrix< MT1 > >::Type 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
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: DVecEvalExpr.h:189
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2587
Header file for run time assertion macros.
EnableIf< IsDenseMatrix< MT1 > >::Type 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
Utility type for generic codes.
Header file for the DVecEvalExprTrait class template.
Header file for the EvalExprTrait class template.
VT::ReturnType ReturnType
Return type for expression template evaluations.
Definition: DVecEvalExpr.h:96
DVecEvalExpr(const VT &dv)
Constructor for the DVecEvalExpr class.
Definition: DVecEvalExpr.h:118
const DMatEvalExpr< MT, SO > eval(const DenseMatrix< MT, SO > &dm)
Forces the evaluation of the given dense matrix expression dm.
Definition: DMatEvalExpr.h:703
Header file for the IsDenseVector type trait.
#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:79
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: DVecEvalExpr.h:177
DVecEvalExpr< VT, TF > This
Type of this DVecEvalExpr instance.
Definition: DVecEvalExpr.h:92
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: DVecEvalExpr.h:209
Base class for all compute expression templates.The Computation class serves as a tag for all computa...
Definition: Computation.h:59
EnableIf< IsDenseMatrix< MT1 > >::Type 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 sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:118
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:157
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2583
Header file for the SubvectorExprTrait class template.
bool isAligned() const
Returns whether the operands of the expression are properly aligned in memory.
Definition: DVecEvalExpr.h:199
Header file for exception macros.
Header file for the IsColumnVector type trait.
VT::ResultType ResultType
Result type for expression template evaluations.
Definition: DVecEvalExpr.h:93
VT::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: DVecEvalExpr.h:94
EnableIf< IsDenseVector< VT1 > >::Type smpMultAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs)
Default implementation of the SMP multiplication assignment of a vector to a dense vector...
Definition: DenseVector.h:189
Header file for the Size type trait.
#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:81
#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
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.