35 #ifndef _BLAZE_MATH_EXPRESSIONS_SVECTRANSEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_SVECTRANSEXPR_H_
90 class SVecTransExpr :
public SparseVector< SVecTransExpr<VT,TF>, TF >
91 ,
private VecTransExpr
92 ,
private SelectType< IsComputation<VT>::value, Computation, EmptyType >::Type
110 template<
typename VT2 >
113 enum { value = useAssign };
125 template<
typename VT2 >
126 struct UseSMPAssign {
127 enum { value = VT2::smpAssignable && useAssign };
149 enum { smpAssignable = VT::smpAssignable };
163 typedef typename std::iterator_traits<IteratorType>::value_type
ValueType;
164 typedef typename std::iterator_traits<IteratorType>::pointer
PointerType;
165 typedef typename std::iterator_traits<IteratorType>::reference
ReferenceType;
166 typedef typename std::iterator_traits<IteratorType>::difference_type
DifferenceType;
304 inline ReturnType
at(
size_t index )
const {
305 if( index >=
sv_.size() ) {
308 return (*
this)[index];
348 return sv_.nonZeros();
404 template<
typename T >
406 return sv_.canAlias( alias );
416 template<
typename T >
418 return sv_.isAliased( alias );
428 return sv_.canSMPAssign();
451 template<
typename VT2 >
460 assign( tmp, rhs.sv_ );
479 template<
typename VT2 >
488 assign( tmp, rhs.sv_ );
507 template<
typename VT2 >
508 friend inline typename EnableIf< UseAssign<VT2> >::Type
509 addAssign( DenseVector<VT2,TF>& lhs,
const SVecTransExpr& rhs )
515 DVecTransposer<VT2,!TF> tmp( ~lhs );
516 addAssign( tmp, rhs.sv_ );
539 template<
typename VT2 >
540 friend inline typename EnableIf< UseAssign<VT2> >::Type
541 subAssign( DenseVector<VT2,TF>& lhs,
const SVecTransExpr& rhs )
547 DVecTransposer<VT2,!TF> tmp( ~lhs );
548 subAssign( tmp, rhs.sv_ );
571 template<
typename VT2 >
572 friend inline typename EnableIf< UseAssign<VT2> >::Type
573 multAssign( DenseVector<VT2,TF>& lhs,
const SVecTransExpr& rhs )
579 DVecTransposer<VT2,!TF> tmp( ~lhs );
580 multAssign( tmp, rhs.sv_ );
603 template<
typename VT2 >
604 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
611 DVecTransposer<VT2,!TF> tmp( ~lhs );
631 template<
typename VT2 >
632 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
639 SVecTransposer<VT2,!TF> tmp( ~lhs );
659 template<
typename VT2 >
660 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
667 DVecTransposer<VT2,!TF> tmp( ~lhs );
691 template<
typename VT2 >
692 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
699 DVecTransposer<VT2,!TF> tmp( ~lhs );
724 template<
typename VT2 >
725 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
732 DVecTransposer<VT2,!TF> tmp( ~lhs );
778 template<
typename VT
817 template<
typename VT
819 inline typename SVecTransExpr<VT,TF>::Operand
trans(
const SVecTransExpr<VT,TF>& sv )
839 template<
typename VT,
bool TF >
840 struct Size< SVecTransExpr<VT,TF> > :
public Size<VT>
856 template<
typename VT >
857 struct SVecTransExprTrait< SVecTransExpr<VT,false> >
861 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value
862 ,
typename SVecTransExpr<VT,false>::Operand
863 , INVALID_TYPE >::Type Type;
872 template<
typename VT >
873 struct TSVecTransExprTrait< SVecTransExpr<VT,true> >
877 typedef typename SelectType< IsSparseVector<VT>::value && IsColumnVector<VT>::value
878 ,
typename SVecTransExpr<VT,true>::Operand
879 , INVALID_TYPE >::Type Type;
888 template<
typename VT,
bool TF,
bool AF >
889 struct SubvectorExprTrait< SVecTransExpr<VT,TF>, AF >
893 typedef typename TransExprTrait< typename SubvectorExprTrait<const VT,AF>::Type >::Type Type;
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: SVecTransExpr.h:427
Operand sv_
Sparse vector of the transposition expression.
Definition: SVecTransExpr.h:434
PointerType pointer
Pointer return type.
Definition: SVecTransExpr.h:171
Header file for basic type definitions.
Header file for the SparseVector base class.
ConstIterator & operator++()
Pre-increment operator.
Definition: SVecTransExpr.h:189
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: SVecTransExpr.h:417
ConstIterator begin() const
Returns an iterator to the first non-zero element of the sparse vector.
Definition: SVecTransExpr.h:317
std::iterator_traits< IteratorType >::pointer PointerType
Pointer return type.
Definition: SVecTransExpr.h:164
SelectType< IsExpression< VT >::value, const VT, const VT & >::Type Operand
Composite data type of the sparse vector expression.
Definition: SVecTransExpr.h:144
ValueType value_type
Type of the underlying pointers.
Definition: SVecTransExpr.h:170
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2588
Header file for the IsRowVector type trait.
VT::TransposeType ResultType
Result type for expression template evaluations.
Definition: SVecTransExpr.h:135
Expression object for sparse vector transpositions.The SVecTransExpr class represents the compile tim...
Definition: Forward.h:135
Header file for the Computation base class.
Header file for the RequiresEvaluation type trait.
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: SVecTransExpr.h:252
VT::ReturnType ReturnType
Return type for expression template evaluations.
Definition: SVecTransExpr.h:138
std::forward_iterator_tag IteratorCategory
The iterator category.
Definition: SVecTransExpr.h:162
Expression object for the transposition of a dense vector.The DVecTransposer class is a wrapper objec...
Definition: DVecTransposer.h:76
ConstIterator lowerBound(size_t index) const
Returns an iterator to the first index not less then the given index.
Definition: SVecTransExpr.h:370
VT::ResultType TransposeType
Transpose type for expression template evaluations.
Definition: SVecTransExpr.h:136
SVecTransExpr(const VT &sv)
Constructor for the SVecTransExpr class.
Definition: SVecTransExpr.h:280
Compile time check to query the requirement to evaluate an expression.Via this type trait it is possi...
Definition: RequiresEvaluation.h:90
bool operator==(const ConstIterator &rhs) const
Equality comparison between two ConstIterator objects.
Definition: SVecTransExpr.h:241
const ConstIterator * operator->() const
Direct access to the sparse vector element at the current iterator position.
Definition: SVecTransExpr.h:210
Compile time type selection.The SelectType class template selects one of the two given types T1 and T...
Definition: SelectType.h:59
size_t index() const
Access to the current index of the sparse element.
Definition: SVecTransExpr.h:230
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for the dense vector transposer.
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2592
std::iterator_traits< IteratorType >::value_type ValueType
Type of the underlying pointers.
Definition: SVecTransExpr.h:163
IteratorCategory iterator_category
The iterator category.
Definition: SVecTransExpr.h:169
#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
Iterator over the elements of the sparse vector absolute value expression.
Definition: SVecTransExpr.h:155
std::iterator_traits< IteratorType >::reference ReferenceType
Reference return type.
Definition: SVecTransExpr.h:165
Expression object for the transposition of a sparse vector.The SVecTransposer class is a wrapper obje...
Definition: Forward.h:136
SelectType< useAssign, const ResultType, const SVecTransExpr & >::Type CompositeType
Data type for composite expression templates.
Definition: SVecTransExpr.h:141
Operand operand() const
Returns the sparse vector operand.
Definition: SVecTransExpr.h:393
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
#define BLAZE_CONSTRAINT_MUST_BE_SPARSE_VECTOR_TYPE(T)
Constraint on the data type.In case the given data type T is not a sparse, N-dimensional vector type...
Definition: SparseVector.h:79
ConstIterator find(size_t index) const
Searches for a specific vector element.
Definition: SVecTransExpr.h:358
DifferenceType difference_type
Difference between two iterators.
Definition: SVecTransExpr.h:173
CompressedMatrix< Type, false > TransposeType
Transpose type for expression template evaluations.
Definition: CompressedMatrix.h:2585
DifferenceType operator-(const ConstIterator &rhs) const
Calculating the number of elements between two expression iterators.
Definition: SVecTransExpr.h:263
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
Constraint on the data type.
Header file for the SelectType class template.
Header file for all forward declarations for expression class templates.
Constraint on the data type.
Header file for the EnableIf class template.
ReturnType value() const
Access to the current value of the sparse element.
Definition: SVecTransExpr.h:220
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
Header file for the IsSparseVector type trait.
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2587
Removal of reference modifiers.The RemoveCV type trait removes any reference modifiers from the given...
Definition: RemoveReference.h:69
VT::CompositeType CT
Composite type of the sparse vector expression.
Definition: SVecTransExpr.h:96
Header file for the VecTransExpr base class.
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.
std::iterator_traits< IteratorType >::difference_type DifferenceType
Difference between two iterators.
Definition: SVecTransExpr.h:166
Substitution Failure Is Not An Error (SFINAE) class.The EnableIf class template is an auxiliary tool ...
Definition: EnableIf.h:184
size_t nonZeros() const
Returns the number of non-zero elements in the sparse vector.
Definition: SVecTransExpr.h:347
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: SVecTransExpr.h:405
RemoveReference< Operand >::Type::ConstIterator IteratorType
Iterator type of the sparse vector expression.
Definition: SVecTransExpr.h:160
Header file for the TransExprTrait class template.
ReturnType at(size_t index) const
Checked access to the vector elements.
Definition: SVecTransExpr.h:304
ConstIterator(IteratorType it)
Constructor for the ConstIterator class.
Definition: SVecTransExpr.h:179
#define BLAZE_CONSTRAINT_MUST_NOT_REQUIRE_EVALUATION(T)
Constraint on the data type.In case the given data type T requires an intermediate evaluation within ...
Definition: RequiresEvaluation.h:118
ConstIterator end() const
Returns an iterator just past the last non-zero element of the sparse vector.
Definition: SVecTransExpr.h:327
Header file for the RemoveReference type trait.
VT::ElementType ElementType
Resulting element type.
Definition: SVecTransExpr.h:137
Header file for the SVecTransExprTrait class template.
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: SVecTransExpr.h:291
Header file for the sparse vector transposer.
const DMatTransExpr< MT,!SO > trans(const DenseMatrix< MT, SO > &dm)
Calculation of the transpose of the given dense matrix.
Definition: DMatTransExpr.h:944
ConstIterator upperBound(size_t index) const
Returns an iterator to the first index greater then the given index.
Definition: SVecTransExpr.h:382
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.
size_t size() const
Returns the current size/dimension of the vector.
Definition: SVecTransExpr.h:337
Header file for the TSVecTransExprTrait class template.
SVecTransExpr< VT, TF > This
Type of this SVecTransExpr instance.
Definition: SVecTransExpr.h:134
Header file for exception macros.
ReferenceType reference
Reference return type.
Definition: SVecTransExpr.h:172
const ValueType operator*() const
Direct access to the sparse vector element at the current iterator position.
Definition: SVecTransExpr.h:200
Header file for the IsColumnVector type trait.
Header file for the empty type.
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_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
IteratorType it_
Iterator over the elements of the sparse vector expression.
Definition: SVecTransExpr.h:270
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.