35 #ifndef _BLAZE_MATH_EXPRESSIONS_SMATTRANSEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_SMATTRANSEXPR_H_
102 template<
typename MT
104 class SMatTransExpr :
public SparseMatrix< SMatTransExpr<MT,SO>, SO >
105 ,
private MatTransExpr
106 ,
private SelectType< IsComputation<MT>::value, Computation, EmptyType >::Type
125 template<
typename MT2 >
128 enum { value = useAssign };
140 template<
typename MT2 >
141 struct UseSMPAssign {
142 enum { value = MT2::smpAssignable && useAssign };
174 typedef typename std::iterator_traits<IteratorType>::value_type
ValueType;
175 typedef typename std::iterator_traits<IteratorType>::pointer
PointerType;
176 typedef typename std::iterator_traits<IteratorType>::reference
ReferenceType;
177 typedef typename std::iterator_traits<IteratorType>::difference_type
DifferenceType;
288 enum { smpAssignable = MT::smpAssignable };
323 inline ReturnType
at(
size_t i,
size_t j )
const {
324 if( i >=
sm_.columns() ) {
327 if( j >=
sm_.rows() ) {
362 return sm_.columns();
382 return sm_.nonZeros();
393 return sm_.nonZeros( i );
406 return sm_.find( j, i );
419 return sm_.lowerBound( j, i );
432 return sm_.upperBound( j, i );
452 template<
typename T >
454 return sm_.isAliased( alias );
464 template<
typename T >
466 return sm_.isAliased( alias );
476 return sm_.canSMPAssign();
499 template<
typename MT2
510 assign( tmp, rhs.sm_ );
529 template<
typename MT2
540 assign( tmp, rhs.sm_ );
559 template<
typename MT2
561 friend inline typename EnableIf< UseAssign<MT2> >::Type
562 addAssign( DenseMatrix<MT2,SO2>& lhs,
const SMatTransExpr& rhs )
569 DMatTransposer<MT2,!SO2> tmp( ~lhs );
570 addAssign( tmp, rhs.sm_ );
593 template<
typename MT2
595 friend inline typename EnableIf< UseAssign<MT2> >::Type
596 subAssign( DenseMatrix<MT2,SO2>& lhs,
const SMatTransExpr& rhs )
603 DMatTransposer<MT2,!SO2> tmp( ~lhs );
604 subAssign( tmp, rhs.sm_ );
635 template<
typename MT2
637 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
645 DMatTransposer<MT2,!SO2> tmp( ~lhs );
665 template<
typename MT2
667 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
675 SMatTransposer<MT2,!SO2> tmp( ~lhs );
695 template<
typename MT2
697 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
705 DMatTransposer<MT2,!SO2> tmp( ~lhs );
730 template<
typename MT2
732 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
740 DMatTransposer<MT2,!SO2> tmp( ~lhs );
795 template<
typename MT
834 template<
typename MT
836 inline typename SMatTransExpr<MT,SO>::Operand
trans(
const SMatTransExpr<MT,SO>& sm )
856 template<
typename MT,
bool SO >
857 struct Rows< SMatTransExpr<MT,SO> > :
public Columns<MT>
873 template<
typename MT,
bool SO >
874 struct Columns< SMatTransExpr<MT,SO> > :
public Rows<MT>
890 template<
typename MT,
bool SO >
891 struct IsSymmetric< SMatTransExpr<MT,SO> > :
public IsTrue< IsSymmetric<MT>::value >
907 template<
typename MT,
bool SO >
908 struct IsHermitian< SMatTransExpr<MT,SO> > :
public IsTrue< IsHermitian<MT>::value >
924 template<
typename MT,
bool SO >
925 struct IsLower< SMatTransExpr<MT,SO> > :
public IsTrue< IsUpper<MT>::value >
941 template<
typename MT,
bool SO >
942 struct IsUniLower< SMatTransExpr<MT,SO> > :
public IsTrue< IsUniUpper<MT>::value >
958 template<
typename MT,
bool SO >
959 struct IsStrictlyLower< SMatTransExpr<MT,SO> > :
public IsTrue< IsStrictlyUpper<MT>::value >
975 template<
typename MT,
bool SO >
976 struct IsUpper< SMatTransExpr<MT,SO> > :
public IsTrue< IsLower<MT>::value >
992 template<
typename MT,
bool SO >
993 struct IsUniUpper< SMatTransExpr<MT,SO> > :
public IsTrue< IsUniLower<MT>::value >
1009 template<
typename MT,
bool SO >
1010 struct IsStrictlyUpper< SMatTransExpr<MT,SO> > :
public IsTrue< IsStrictlyLower<MT>::value >
1026 template<
typename MT >
1027 struct SMatTransExprTrait< SMatTransExpr<MT,false> >
1031 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value
1032 ,
typename SMatTransExpr<MT,false>::Operand
1033 , INVALID_TYPE >::Type Type;
1042 template<
typename MT >
1043 struct TSMatTransExprTrait< SMatTransExpr<MT,true> >
1047 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value
1048 ,
typename SMatTransExpr<MT,true>::Operand
1049 , INVALID_TYPE >::Type Type;
1058 template<
typename MT,
bool SO,
bool AF >
1059 struct SubmatrixExprTrait< SMatTransExpr<MT,SO>, AF >
1063 typedef typename TransExprTrait< typename SubmatrixExprTrait<const MT,AF>::Type >::Type Type;
1072 template<
typename MT,
bool SO >
1073 struct RowExprTrait< SMatTransExpr<MT,SO> >
1077 typedef typename TransExprTrait< typename ColumnExprTrait<const MT>::Type >::Type Type;
1086 template<
typename MT,
bool SO >
1087 struct ColumnExprTrait< SMatTransExpr<MT,SO> >
1091 typedef typename TransExprTrait< typename RowExprTrait<const MT>::Type >::Type Type;
Operand operand() const
Returns the sparse matrix operand.
Definition: SMatTransExpr.h:441
ReturnType value() const
Access to the current value of the sparse element.
Definition: SMatTransExpr.h:231
size_t nonZeros() const
Returns the number of non-zero elements in the sparse matrix.
Definition: SMatTransExpr.h:381
Header file for the sparse matrix transposer.
Header file for the Rows type trait.
Header file for the IsUniUpper type trait.
ConstIterator(IteratorType it)
Constructor for the ConstIterator class.
Definition: SMatTransExpr.h:190
Header file for basic type definitions.
ConstIterator begin(size_t i) const
Returns an iterator to the first non-zero element of row/column i.
Definition: SMatTransExpr.h:340
#define BLAZE_CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER(T, SO)
Constraint on the data type.In case the given data type T is not a dense or sparse matrix type and in...
Definition: StorageOrder.h:81
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: SMatTransExpr.h:453
Header file for the MatTransExpr base class.
size_t rows() const
Returns the current number of rows of the matrix.
Definition: SMatTransExpr.h:361
Iterator over the elements of the sparse matrix transposition expression.
Definition: SMatTransExpr.h:166
Header file for the ColumnExprTrait class template.
MT::ResultType TransposeType
Transpose type for expression template evaluations.
Definition: SMatTransExpr.h:152
Header file for the IsColumnMajorMatrix type trait.
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2588
const ValueType operator*() const
Direct access to the sparse matrix element at the current iterator position.
Definition: SMatTransExpr.h:211
Header file for the Computation base class.
ConstIterator end(size_t i) const
Returns an iterator just past the last non-zero element of row/column i.
Definition: SMatTransExpr.h:351
Header file for the RequiresEvaluation type trait.
Header file for the IsUniLower type trait.
CompressedMatrix< Type, false > OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: CompressedMatrix.h:2584
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: SMatTransExpr.h:308
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:70
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:117
Constraint on the data type.
Header file for the SparseMatrix base class.
std::iterator_traits< IteratorType >::reference ReferenceType
Reference return type.
Definition: SMatTransExpr.h:176
SMatTransExpr(const MT &sm)
Constructor for the SMatTransExpr class.
Definition: SMatTransExpr.h:296
Constraint on the data type.
Compile time check to query the requirement to evaluate an expression.Via this type trait it is possi...
Definition: RequiresEvaluation.h:90
MT::ReturnType ReturnType
Return type for expression template evaluations.
Definition: SMatTransExpr.h:154
Compile time type selection.The SelectType class template selects one of the two given types T1 and T...
Definition: SelectType.h:59
const IteratorType operator->() const
Direct access to the sparse matrix element at the current iterator position.
Definition: SMatTransExpr.h:221
Operand sm_
Sparse matrix of the transposition expression.
Definition: SMatTransExpr.h:482
std::forward_iterator_tag IteratorCategory
The iterator category.
Definition: SMatTransExpr.h:173
Header file for the IsStrictlyUpper type trait.
Header file for the IsSymmetric type trait.
bool operator==(const ConstIterator &rhs) const
Equality comparison between two ConstIterator objects.
Definition: SMatTransExpr.h:252
ConstIterator lowerBound(size_t i, size_t j) const
Returns an iterator to the first index not less then the given index.
Definition: SMatTransExpr.h:417
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
IteratorType it_
Iterator over the elements of the sparse matrix expression.
Definition: SMatTransExpr.h:281
Header file for the SMatTransExprTrait class template.
ReturnType at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: SMatTransExpr.h:323
std::iterator_traits< IteratorType >::value_type ValueType
Type of the underlying pointers.
Definition: SMatTransExpr.h:174
#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
Header file for the Columns type trait.
SMatTransExpr< MT, SO > This
Type of this SMatTransExpr instance.
Definition: SMatTransExpr.h:149
Expression object for the transposition of a dense matrix.The DMatTransposer class is a wrapper objec...
Definition: DMatTransposer.h:79
Header file for the IsLower type trait.
std::iterator_traits< IteratorType >::difference_type DifferenceType
Difference between two iterators.
Definition: SMatTransExpr.h:177
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: SMatTransExpr.h:475
size_t nonZeros(size_t i) const
Returns the number of non-zero elements in the specified row/column.
Definition: SMatTransExpr.h:392
Header file for the TSMatTransExprTrait class template.
CompressedMatrix< Type, false > TransposeType
Transpose type for expression template evaluations.
Definition: CompressedMatrix.h:2585
Constraints on the storage order of matrix types.
ConstIterator upperBound(size_t i, size_t j) const
Returns an iterator to the first index greater then the given index.
Definition: SMatTransExpr.h:430
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: SMatTransExpr.h:465
Constraint on the data type.
Header file for the SelectType class template.
Header file for the RowExprTrait class template.
Header file for all forward declarations for expression class templates.
MT::ElementType ElementType
Resulting element type.
Definition: SMatTransExpr.h:153
Header file for the EnableIf class template.
Header file for the IsStrictlyLower type trait.
IteratorCategory iterator_category
The iterator category.
Definition: SMatTransExpr.h:180
Header file for the dense matrix transposer.
Expression object for the transposition of a sparse matrix.The SMatTransposer class is a wrapper obje...
Definition: Forward.h:113
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 SubmatrixExprTrait class template.
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
ConstIterator & operator++()
Pre-increment operator.
Definition: SMatTransExpr.h:200
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
DifferenceType difference_type
Difference between two iterators.
Definition: SMatTransExpr.h:184
Utility type for generic codes.
MT::CompositeType CT
Composite type of the sparse matrix expression.
Definition: SMatTransExpr.h:111
Substitution Failure Is Not An Error (SFINAE) class.The EnableIf class template is an auxiliary tool ...
Definition: EnableIf.h:184
SelectType< useAssign, const ResultType, const SMatTransExpr & >::Type CompositeType
Data type for composite expression templates.
Definition: SMatTransExpr.h:157
Header file for the TransExprTrait class template.
#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
DifferenceType operator-(const ConstIterator &rhs) const
Calculating the number of elements between two expression iterators.
Definition: SMatTransExpr.h:274
Header file for the RemoveReference type trait.
SelectType< IsExpression< MT >::value, const MT, const MT & >::Type Operand
Composite data type of the sparse matrix expression.
Definition: SMatTransExpr.h:160
size_t index() const
Access to the current index of the sparse element.
Definition: SMatTransExpr.h:241
PointerType pointer
Pointer return type.
Definition: SMatTransExpr.h:182
Header file for the IsRowMajorMatrix type trait.
ValueType value_type
Type of the underlying pointers.
Definition: SMatTransExpr.h:181
const DMatTransExpr< MT,!SO > trans(const DenseMatrix< MT, SO > &dm)
Calculation of the transpose of the given dense matrix.
Definition: DMatTransExpr.h:944
Header file for the IsComputation type trait class.
RemoveReference< Operand >::Type::ConstIterator IteratorType
Iterator type of the sparse matrix expression.
Definition: SMatTransExpr.h:171
MT::TransposeType ResultType
Result type for expression template evaluations.
Definition: SMatTransExpr.h:150
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
#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
Expression object for sparse matrix transpositions.The SMatTransExpr class represents the compile tim...
Definition: Forward.h:112
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2583
Header file for the IsTrue value trait.
ConstIterator find(size_t i, size_t j) const
Searches for a specific matrix element.
Definition: SMatTransExpr.h:404
MT::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: SMatTransExpr.h:151
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: SMatTransExpr.h:263
std::iterator_traits< IteratorType >::pointer PointerType
Pointer return type.
Definition: SMatTransExpr.h:175
Header file for the IsUpper type trait.
Header file for exception macros.
MT::ResultType RT
Result type of the sparse matrix expression.
Definition: SMatTransExpr.h:110
Header file for the empty type.
Header file for the IsHermitian 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
#define BLAZE_CONSTRAINT_MUST_BE_SPARSE_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a sparse, N-dimensional matrix type...
Definition: SparseMatrix.h:79
size_t columns() const
Returns the current number of columns of the matrix.
Definition: SMatTransExpr.h:371
ReferenceType reference
Reference return type.
Definition: SMatTransExpr.h:183
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.