35 #ifndef _BLAZE_MATH_EXPRESSIONS_SMATTRANSPOSER_H_
36 #define _BLAZE_MATH_EXPRESSIONS_SMATTRANSPOSER_H_
71 class SMatTransposer :
public SparseMatrix< SMatTransposer<MT,SO>, SO >
93 enum { smpAssignable = MT::smpAssignable };
113 inline ConstReference
operator()(
size_t i,
size_t j )
const {
147 inline ConstIterator
begin(
size_t i )
const {
148 return sm_.cbegin(i);
163 inline ConstIterator
cbegin(
size_t i )
const {
164 return sm_.cbegin(i);
179 inline Iterator
end(
size_t i ) {
195 inline ConstIterator
end(
size_t i )
const {
211 inline ConstIterator
cend(
size_t i )
const {
223 template<
typename Other >
240 template<
typename Other >
256 return sm_.columns();
276 return sm_.capacity();
287 return sm_.capacity( i );
297 return sm_.nonZeros();
308 return sm_.nonZeros( i );
335 inline Iterator
insert(
size_t i,
size_t j,
const ElementType& value ) {
336 return sm_.insert( j, i, value );
351 sm_.reserve( nonzeros );
369 inline void reserve(
size_t i,
size_t nonzeros ) {
370 sm_.reserve( i, nonzeros );
401 inline void append(
size_t i,
size_t j,
const ElementType& value,
bool check=
false ) {
402 sm_.append( j, i, value, check );
430 template<
typename Other >
433 return sm_.canAlias( alias );
443 template<
typename Other >
446 return sm_.isAliased( alias );
457 return sm_.canSMPAssign();
472 template<
typename MT2 >
483 const size_t m(
rows() );
485 for(
size_t i=0UL; i<m; ++i ) {
486 for( RhsIterator element=(~rhs).
begin(i); element!=(~rhs).
end(i); ++element )
487 sm_.append( element->index(), i, element->value() );
504 template<
typename MT2 >
515 const size_t m(
rows() );
519 std::vector<size_t> rowLengths( m, 0UL );
520 for(
size_t j=0UL; j<n; ++j ) {
521 for( RhsIterator element=(~rhs).
begin(j); element!=(~rhs).
end(j); ++element )
522 ++rowLengths[element->index()];
526 for(
size_t i=0UL; i<m; ++i ) {
527 sm_.reserve( i, rowLengths[i] );
531 for(
size_t j=0UL; j<n; ++j ) {
532 for( RhsIterator element=(~rhs).
begin(j); element!=(~rhs).
end(j); ++element ) {
533 sm_.append( j, element->index(), element->value() );
571 template<
typename MT >
594 enum { smpAssignable = MT::smpAssignable };
614 inline ConstReference
operator()(
size_t i,
size_t j )
const {
627 inline Iterator
begin(
size_t j ) {
638 inline ConstIterator
begin(
size_t j )
const {
639 return sm_.cbegin(j);
649 inline ConstIterator
cbegin(
size_t j )
const {
650 return sm_.cbegin(j);
660 inline Iterator
end(
size_t j ) {
671 inline ConstIterator
end(
size_t j )
const {
682 inline ConstIterator
cend(
size_t j )
const {
694 template<
typename Other >
711 template<
typename Other >
726 inline size_t rows()
const {
727 return sm_.columns();
736 inline size_t columns()
const {
747 return sm_.capacity();
757 inline size_t capacity(
size_t j )
const {
758 return sm_.capacity( j );
768 return sm_.nonZeros();
778 inline size_t nonZeros(
size_t j )
const {
779 return sm_.nonZeros( j );
788 inline void reset() {
806 inline Iterator
insert(
size_t i,
size_t j,
const ElementType& value ) {
807 return sm_.insert( j, i, value );
821 inline void reserve(
size_t nonzeros ) {
822 sm_.reserve( nonzeros );
837 inline void reserve(
size_t i,
size_t nonzeros ) {
838 sm_.reserve( i, nonzeros );
869 void append(
size_t i,
size_t j,
const ElementType& value,
bool check=
false ) {
870 sm_.append( j, i, value, check );
898 template<
typename Other >
899 inline bool canAlias(
const Other* alias )
const
901 return sm_.canAlias( alias );
911 template<
typename Other >
912 inline bool isAliased(
const Other* alias )
const
914 return sm_.isAliased( alias );
925 return sm_.canSMPAssign();
940 template<
typename MT2 >
941 inline void assign(
const SparseMatrix<MT2,false>& rhs )
951 const size_t m(
rows() );
955 std::vector<size_t> columnLengths( n, 0UL );
956 for(
size_t i=0UL; i<m; ++i ) {
957 for( RhsIterator element=(~rhs).
begin(i); element!=(~rhs).
end(i); ++element )
958 ++columnLengths[element->index()];
962 for(
size_t j=0UL; j<n; ++j ) {
963 sm_.reserve( j, columnLengths[j] );
967 for(
size_t i=0UL; i<m; ++i ) {
968 for( RhsIterator element=(~rhs).
begin(i); element!=(~rhs).
end(i); ++element ) {
969 sm_.append( element->index(), i, element->value() );
986 template<
typename MT2 >
987 inline void assign(
const SparseMatrix<MT2,true>& rhs )
999 for(
size_t j=0UL; j<n; ++j ) {
1000 for( RhsIterator element=(~rhs).
begin(j); element!=(~rhs).
end(j); ++element )
1001 sm_.append( j, element->index(), element->value() );
1040 template<
typename MT
1042 inline void reset( SMatTransposer<MT,SO>& m )
1060 template<
typename MT,
bool SO >
1061 struct SubmatrixTrait< SMatTransposer<MT,SO> >
Constraint on the data type.
#define BLAZE_USER_ASSERT(expr, msg)
Run time assertion macro for user checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_USER_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERT flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:117
ConstReference operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: SMatTransposer.h:113
Header file for basic type definitions.
EnableIf< IsNumeric< Other >, SMatTransposer >::Type & operator/=(Other rhs)
Division assignment operator for the division of a matrix by a scalar value ( ).
Definition: SMatTransposer.h:241
size_t rows() const
Returns the current number of rows of the matrix.
Definition: SMatTransposer.h:255
#define BLAZE_CONSTRAINT_MUST_NOT_BE_COMPUTATION_TYPE(T)
Constraint on the data type.In case the given data type T is a computational expression (i...
Definition: Computation.h:118
MT::Reference Reference
Reference to a non-constant matrix value.
Definition: SMatTransposer.h:82
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:821
EnableIf< IsNumeric< Other >, SMatTransposer >::Type & operator*=(Other rhs)
Multiplication assignment operator for the multiplication between a matrix and a scalar value ( )...
Definition: SMatTransposer.h:224
MT::ElementType ElementType
Resulting element type.
Definition: SMatTransposer.h:79
MT & sm_
The sparse matrix operand.
Definition: SMatTransposer.h:541
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:107
Header file for the SparseMatrix base class.
bool canSMPAssign() const
Returns whether the matrix can be used in SMP assignments.
Definition: SMatTransposer.h:455
void reserve(size_t i, size_t nonzeros)
Setting the minimum capacity of a specific row/column of the sparse matrix.
Definition: SMatTransposer.h:369
MT::ReturnType ReturnType
Return type for expression template evaluations.
Definition: SMatTransposer.h:80
size_t capacity(size_t i) const
Returns the current capacity of the specified row/column.
Definition: SMatTransposer.h:286
Constraint on the data type.
bool isAliased(const Other *alias) const
Returns whether the matrix is aliased with the given address alias.
Definition: SMatTransposer.h:444
MT OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: SMatTransposer.h:77
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
#define BLAZE_CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a column-major dense or sparse matri...
Definition: StorageOrder.h:161
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2511
Iterator begin(size_t i)
Returns an iterator to the first non-zero element of row/column i.
Definition: SMatTransposer.h:131
void reset()
Resets the matrix elements.
Definition: SMatTransposer.h:317
MT::ConstReference ConstReference
Reference to a constant matrix value.
Definition: SMatTransposer.h:83
MT::TransposeType ResultType
Result type for expression template evaluations.
Definition: SMatTransposer.h:76
CompressedMatrix< Type, false > TransposeType
Transpose type for expression template evaluations.
Definition: CompressedMatrix.h:2504
Constraints on the storage order of matrix types.
ConstIterator begin(size_t i) const
Returns an iterator to the first non-zero element of row/column i.
Definition: SMatTransposer.h:147
ConstIterator end(size_t i) const
Returns an iterator just past the last non-zero element of row/column i.
Definition: SMatTransposer.h:195
MT::ConstIterator ConstIterator
Iterator over constant elements.
Definition: SMatTransposer.h:85
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2505
const Type & ConstReference
Reference to a constant matrix value.
Definition: CompressedMatrix.h:2509
Header file for the EnableIf class template.
void reserve(size_t nonzeros)
Setting the minimum capacity of the sparse matrix.
Definition: SMatTransposer.h:350
bool canAlias(const Other *alias) const
Returns whether the matrix can alias with the given address alias.
Definition: SMatTransposer.h:431
size_t nonZeros() const
Returns the number of non-zero elements in the matrix.
Definition: SMatTransposer.h:296
void assign(const SparseMatrix< MT2, true > &rhs)
Implementation of the transpose assignment of a column-major sparse matrix.
Definition: SMatTransposer.h:505
Header file for the IsNumeric type trait.
MT::Iterator Iterator
Iterator over non-constant elements.
Definition: SMatTransposer.h:84
void assign(const SparseMatrix< MT2, false > &rhs)
Implementation of the transpose assignment of a row-major sparse matrix.
Definition: SMatTransposer.h:473
Expression object for the transposition of a sparse matrix.The SMatTransposer class is a wrapper obje...
Definition: Forward.h:103
ConstIterator cend(size_t i) const
Returns an iterator just past the last non-zero element of row/column i.
Definition: SMatTransposer.h:211
#define BLAZE_CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a row-major dense or sparse matrix t...
Definition: StorageOrder.h:81
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2506
ConstIterator cbegin(size_t i) const
Returns an iterator to the first non-zero element of row/column i.
Definition: SMatTransposer.h:163
size_t columns() const
Returns the current number of columns of the matrix.
Definition: SMatTransposer.h:265
Header file for run time assertion macros.
Header file for the submatrix trait.
SMatTransposer(MT &sm)
Constructor for the SMatTransposer class.
Definition: SMatTransposer.h:101
SMatTransposer< MT, SO > This
Type of this SMatTransposer instance.
Definition: SMatTransposer.h:75
Substitution Failure Is Not An Error (SFINAE) class.The EnableIf class template is an auxiliary tool ...
Definition: EnableIf.h:184
size_t nonZeros(size_t i) const
Returns the number of non-zero elements in the specified row/column.
Definition: SMatTransposer.h:307
void append(size_t i, size_t j, const ElementType &value, bool check=false)
Appending an element to the specified row/column of the sparse matrix.
Definition: SMatTransposer.h:401
Iterator end(size_t i)
Returns an iterator just past the last non-zero element of row/column i.
Definition: SMatTransposer.h:179
size_t capacity() const
Returns the maximum capacity of the matrix.
Definition: SMatTransposer.h:275
Element * Iterator
Iterator over non-constant elements.
Definition: CompressedMatrix.h:2510
Iterator insert(size_t i, size_t j, const ElementType &value)
Inserting an element into the sparse matrix.
Definition: SMatTransposer.h:335
void finalize(size_t i)
Finalizing the element insertion of a row/column.
Definition: SMatTransposer.h:419
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2502
MT::ResultType TransposeType
Transpose type for expression template evaluations.
Definition: SMatTransposer.h:78
MatrixAccessProxy< This > Reference
Reference to a non-constant matrix value.
Definition: CompressedMatrix.h:2508
const This & CompositeType
Data type for composite expression templates.
Definition: SMatTransposer.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
#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