35 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECTRANSEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DVECTRANSEXPR_H_
97 ,
private SelectType< IsComputation<VT>::value, Computation, EmptyType >::Type
115 template<
typename VT2 >
118 enum { value = useAssign };
130 template<
typename VT2 >
131 struct UseSMPAssign {
132 enum { value = VT2::smpAssignable && useAssign };
270 inline IntrinsicType
load()
const {
397 enum { vectorizable = VT::vectorizable };
400 enum { smpAssignable = VT::smpAssignable };
432 inline ReturnType
at(
size_t index )
const {
433 if( index >=
dv_.size() ) {
436 return (*
this)[index];
450 return dv_.load( index );
459 inline const ElementType*
data()
const {
510 template<
typename T >
512 return dv_.canAlias( alias );
522 template<
typename T >
524 return dv_.isAliased( alias );
534 return dv_.isAligned();
544 return dv_.canSMPAssign();
567 template<
typename VT2 >
576 assign( tmp, rhs.
dv_ );
595 template<
typename VT2 >
604 assign( tmp, rhs.
dv_ );
623 template<
typename VT2 >
624 friend inline typename EnableIf< UseAssign<VT2> >::Type
625 addAssign( DenseVector<VT2,TF>& lhs,
const DVecTransExpr& rhs )
631 DVecTransposer<VT2,!TF> tmp( ~lhs );
632 addAssign( tmp, rhs.dv_ );
655 template<
typename VT2 >
656 friend inline typename EnableIf< UseAssign<VT2> >::Type
657 subAssign( DenseVector<VT2,TF>& lhs,
const DVecTransExpr& rhs )
663 DVecTransposer<VT2,!TF> tmp( ~lhs );
664 subAssign( tmp, rhs.dv_ );
687 template<
typename VT2 >
688 friend inline typename EnableIf< UseAssign<VT2> >::Type
689 multAssign( DenseVector<VT2,TF>& lhs,
const DVecTransExpr& rhs )
695 DVecTransposer<VT2,!TF> tmp( ~lhs );
696 multAssign( tmp, rhs.dv_ );
719 template<
typename VT2 >
720 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
727 DVecTransposer<VT2,!TF> tmp( ~lhs );
747 template<
typename VT2 >
748 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
755 SVecTransposer<VT2,!TF> tmp( ~lhs );
775 template<
typename VT2 >
776 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
783 DVecTransposer<VT2,!TF> tmp( ~lhs );
807 template<
typename VT2 >
808 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
815 DVecTransposer<VT2,!TF> tmp( ~lhs );
839 template<
typename VT2 >
840 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
847 DVecTransposer<VT2,!TF> tmp( ~lhs );
894 template<
typename VT
933 template<
typename VT
935 inline typename DVecTransExpr<VT,TF>::Operand
trans(
const DVecTransExpr<VT,TF>& dv )
955 template<
typename VT,
bool TF >
956 struct Size< DVecTransExpr<VT,TF> > :
public Size<VT>
972 template<
typename VT,
bool TF >
973 struct IsAligned< DVecTransExpr<VT,TF> > :
public IsTrue< IsAligned<VT>::value >
989 template<
typename VT,
bool TF >
990 struct IsPadded< DVecTransExpr<VT,TF> > :
public IsTrue< IsPadded<VT>::value >
1006 template<
typename VT >
1007 struct DVecTransExprTrait< DVecTransExpr<VT,false> >
1011 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value
1012 ,
typename DVecTransExpr<VT,false>::Operand
1013 , INVALID_TYPE >::Type Type;
1022 template<
typename VT >
1023 struct TDVecTransExprTrait< DVecTransExpr<VT,true> >
1027 typedef typename SelectType< IsDenseVector<VT>::value && IsColumnVector<VT>::value
1028 ,
typename DVecTransExpr<VT,true>::Operand
1029 , INVALID_TYPE >::Type Type;
1038 template<
typename VT,
bool TF,
bool AF >
1039 struct SubvectorExprTrait< DVecTransExpr<VT,TF>, AF >
1043 typedef typename TransExprTrait< typename SubvectorExprTrait<const VT,AF>::Type >::Type Type;
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: DVecTransExpr.h:523
Pointer difference type of the Blaze library.
VT::TransposeType ResultType
Result type for expression template evaluations.
Definition: DVecTransExpr.h:140
ElementType & ReferenceType
Reference return type.
Definition: DVecTransExpr.h:165
const ElementType * data() const
Low-level data access to the vector elements.
Definition: DVecTransExpr.h:459
Base class for all vector transposition expression templates.The VecTransExpr class serves as a tag f...
Definition: VecTransExpr.h:65
Header file for basic type definitions.
const ConstIterator operator++(int)
Post-increment operator.
Definition: DVecTransExpr.h:229
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector)
Returns the current size/dimension of the vector.
Definition: Vector.h:252
VT::ConstIterator IteratorType
ConstIterator type of the dense vector expression.
Definition: DVecTransExpr.h:176
std::random_access_iterator_tag IteratorCategory
The iterator category.
Definition: DVecTransExpr.h:162
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2588
Header file for the IsRowVector type trait.
ConstIterator end() const
Returns an iterator just past the last non-zero element of the dense vector.
Definition: DVecTransExpr.h:479
ConstIterator & operator--()
Pre-decrement operator.
Definition: DVecTransExpr.h:239
ConstIterator & operator+=(size_t inc)
Addition assignment operator.
Definition: DVecTransExpr.h:195
Header file for the DenseVector base class.
friend const ConstIterator operator+(size_t inc, const ConstIterator &it)
Addition between an integral value and a ConstIterator.
Definition: DVecTransExpr.h:371
Header file for the Computation base class.
Iterator over the elements of the dense vector.
Definition: DVecTransExpr.h:158
IntrinsicTrait< ElementType >::Type IntrinsicType
Resulting intrinsic element type.
Definition: DVecTransExpr.h:146
Header file for the RequiresEvaluation type trait.
SelectType< useAssign, const ResultType, const DVecTransExpr & >::Type CompositeType
Data type for composite expression templates.
Definition: DVecTransExpr.h:149
ConstIterator(IteratorType iterator)
Constructor for the ConstIterator class.
Definition: DVecTransExpr.h:184
Expression object for the transposition of a dense vector.The DVecTransposer class is a wrapper objec...
Definition: DVecTransposer.h:76
BLAZE_ALWAYS_INLINE IntrinsicType load(size_t index) const
Access to the intrinsic elements of the vector.
Definition: DVecTransExpr.h:446
Operand dv_
Dense vector of the transposition expression.
Definition: DVecTransExpr.h:550
VT::ReturnType ReturnType
Return type for expression template evaluations.
Definition: DVecTransExpr.h:143
Compile time check to query the requirement to evaluate an expression.Via this type trait it is possi...
Definition: RequiresEvaluation.h:90
SelectType< IsExpression< VT >::value, const VT, const VT & >::Type Operand
Composite data type of the dense vector expression.
Definition: DVecTransExpr.h:152
ReferenceType reference
Reference return type.
Definition: DVecTransExpr.h:172
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
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
IntrinsicType load() const
Access to the intrinsic elements of the vector.
Definition: DVecTransExpr.h:270
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: DVecTransExpr.h:292
ElementType ValueType
Type of the underlying elements.
Definition: DVecTransExpr.h:163
Header file for the dense vector transposer.
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: DVecTransExpr.h:543
ConstIterator & operator-=(size_t dec)
Subtraction assignment operator.
Definition: DVecTransExpr.h:207
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2592
#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
VT::ResultType TransposeType
Transpose type for expression template evaluations.
Definition: DVecTransExpr.h:141
Expression object for the transposition of a sparse vector.The SVecTransposer class is a wrapper obje...
Definition: Forward.h:136
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: DVecTransExpr.h:511
Header file for the IsAligned type trait.
bool operator>(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DVecTransExpr.h:314
ptrdiff_t DifferenceType
Difference between two iterators.
Definition: DVecTransExpr.h:166
Constraint on the data type.
bool operator>=(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DVecTransExpr.h:336
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
ReturnType operator*() const
Direct access to the element at the current iterator position.
Definition: DVecTransExpr.h:260
bool operator==(const ConstIterator &rhs) const
Equality comparison between two ConstIterator objects.
Definition: DVecTransExpr.h:281
Header file for the SelectType class template.
Header file for all forward declarations for expression class templates.
Header file for the EnableIf class template.
Header file for the IsPadded type trait.
DifferenceType operator-(const ConstIterator &rhs) const
Calculating the number of elements between two iterators.
Definition: DVecTransExpr.h:347
bool operator<=(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DVecTransExpr.h:325
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
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2587
Header file for the VecTransExpr base class.
Intrinsic characteristics of data types.The IntrinsicTrait class template provides the intrinsic char...
Definition: IntrinsicTrait.h:1232
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.
VT::ElementType ElementType
Resulting element type.
Definition: DVecTransExpr.h:142
friend const ConstIterator operator+(const ConstIterator &it, size_t inc)
Addition between a ConstIterator and an integral value.
Definition: DVecTransExpr.h:359
Substitution Failure Is Not An Error (SFINAE) class.The EnableIf class template is an auxiliary tool ...
Definition: EnableIf.h:184
PointerType pointer
Pointer return type.
Definition: DVecTransExpr.h:171
Header file for the TransExprTrait class template.
Header file for the DVecTransExprTrait class template.
VT::CompositeType CT
Composite type of the dense vector expression.
Definition: DVecTransExpr.h:101
DVecTransExpr(const VT &dv)
Constructor for the DVecTransExpr class.
Definition: DVecTransExpr.h:408
DifferenceType difference_type
Difference between two iterators.
Definition: DVecTransExpr.h:173
ElementType * PointerType
Pointer return type.
Definition: DVecTransExpr.h:164
const ConstIterator operator--(int)
Post-decrement operator.
Definition: DVecTransExpr.h:250
Header file for the IsDenseVector type trait.
Header file for all intrinsic functionality.
#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
Header file for the sparse vector transposer.
ConstIterator & operator++()
Pre-increment operator.
Definition: DVecTransExpr.h:218
const DMatTransExpr< MT,!SO > trans(const DenseMatrix< MT, SO > &dm)
Calculation of the transpose of the given dense matrix.
Definition: DMatTransExpr.h:944
bool isAligned() const
Returns whether the operands of the expression are properly aligned in memory.
Definition: DVecTransExpr.h:533
Header file for the IsComputation type trait class.
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
Header file for the TDVecTransExprTrait class template.
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 IsTrue value trait.
bool operator<(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DVecTransExpr.h:303
IteratorCategory iterator_category
The iterator category.
Definition: DVecTransExpr.h:169
size_t size() const
Returns the current size/dimension of the vector.
Definition: DVecTransExpr.h:489
Header file for the SubvectorExprTrait class template.
Expression object for dense vector transpositions.The DVecTransExpr class represents the compile time...
Definition: DVecTransExpr.h:95
IteratorType iterator_
Iterator to the current element.
Definition: DVecTransExpr.h:390
ReturnType at(size_t index) const
Checked access to the vector elements.
Definition: DVecTransExpr.h:432
Header file for exception macros.
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: DVecTransExpr.h:419
Header file for the IsColumnVector type trait.
ConstIterator begin() const
Returns an iterator to the first non-zero element of the dense vector.
Definition: DVecTransExpr.h:469
Header file for the empty type.
ValueType value_type
Type of the underlying elements.
Definition: DVecTransExpr.h:170
friend const ConstIterator operator-(const ConstIterator &it, size_t dec)
Subtraction between a ConstIterator and an integral value.
Definition: DVecTransExpr.h:383
System settings for the inline keywords.
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
Operand operand() const
Returns the dense vector operand.
Definition: DVecTransExpr.h:499
#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
DVecTransExpr< VT, TF > This
Type of this DVecTransExpr instance.
Definition: DVecTransExpr.h:139
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.