35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATTRANSPOSER_H_ 36 #define _BLAZE_MATH_EXPRESSIONS_DMATTRANSPOSER_H_ 107 enum :
bool { simdEnabled = MT::simdEnabled };
113 enum :
bool { smpAssignable = MT::smpAssignable };
163 if( i >=
dm_.columns() ) {
166 if( j >=
dm_.rows() ) {
182 if( i >=
dm_.columns() ) {
185 if( j >=
dm_.rows() ) {
224 return dm_.begin( i );
240 return dm_.cbegin( i );
256 return dm_.cbegin( i );
288 return dm_.cend( i );
304 return dm_.cend( i );
315 template<
typename Other >
332 template<
typename Other >
347 inline size_t rows() const noexcept {
348 return dm_.columns();
368 return dm_.spacing();
399 template<
typename Other >
400 inline bool canAlias(
const Other* alias )
const noexcept
402 return dm_.canAlias( alias );
412 template<
typename Other >
413 inline bool isAliased(
const Other* alias )
const noexcept
415 return dm_.isAliased( alias );
426 return dm_.isAligned();
437 return dm_.canSMPAssign();
454 return dm_.load( j, i );
471 return dm_.loada( j, i );
488 return dm_.loadu( j, i );
506 dm_.store( j, i, value );
524 dm_.storea( j, i, value );
542 dm_.storeu( j, i, value );
560 dm_.stream( j, i, value );
575 template<
typename MT2 >
583 const size_t m(
rows() );
586 const size_t jpos( n &
size_t(-2) );
589 for(
size_t i=0UL; i<m; ++i ) {
590 for(
size_t j=0UL; j<jpos; j+=2UL ) {
591 dm_(j ,i) = (~rhs)(i,j );
592 dm_(j+1UL,i) = (~rhs)(i,j+1UL);
595 dm_(jpos,i) = (~rhs)(i,jpos);
612 template<
typename MT2 >
620 constexpr
size_t block( BLOCK_SIZE );
622 const size_t m(
rows() );
625 for(
size_t ii=0UL; ii<m; ii+=block ) {
626 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
627 for(
size_t jj=0UL; jj<n; jj+=block ) {
628 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
629 for(
size_t i=ii; i<iend; ++i ) {
630 for(
size_t j=jj; j<jend; ++j ) {
631 dm_(j,i) = (~rhs)(i,j);
650 template<
typename MT2 >
660 for(
size_t i=0UL; i<(~rhs).
rows(); ++i )
661 for( RhsConstIterator element=(~rhs).begin(i); element!=(~rhs).
end(i); ++element )
662 dm_(element->index(),i) = element->value();
677 template<
typename MT2 >
687 for(
size_t j=0UL; j<(~rhs).
columns(); ++j )
688 for( RhsConstIterator element=(~rhs).begin(j); element!=(~rhs).
end(j); ++element )
689 dm_(j,element->index()) = element->value();
704 template<
typename MT2 >
712 const size_t m(
rows() );
715 const size_t jpos( n &
size_t(-2) );
718 for(
size_t i=0UL; i<m; ++i ) {
719 for(
size_t j=0UL; j<jpos; j+=2UL ) {
720 dm_(j ,i) += (~rhs)(i,j );
721 dm_(j+1UL,i) += (~rhs)(i,j+1UL);
725 dm_(jpos,i) += (~rhs)(i,jpos);
742 template<
typename MT2 >
750 constexpr
size_t block( BLOCK_SIZE );
752 const size_t m(
rows() );
755 for(
size_t ii=0UL; ii<m; ii+=block ) {
756 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
757 for(
size_t jj=0UL; jj<n; jj+=block ) {
758 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
759 for(
size_t i=ii; i<iend; ++i ) {
760 for(
size_t j=jj; j<jend; ++j ) {
761 dm_(j,i) += (~rhs)(i,j);
780 template<
typename MT2 >
790 for(
size_t i=0UL; i<(~rhs).
rows(); ++i )
791 for( RhsConstIterator element=(~rhs).begin(i); element!=(~rhs).
end(i); ++element )
792 dm_(element->index(),i) += element->value();
807 template<
typename MT2 >
817 for(
size_t j=0UL; j<(~rhs).
columns(); ++j )
818 for( RhsConstIterator element=(~rhs).begin(j); element!=(~rhs).
end(j); ++element )
819 dm_(j,element->index()) += element->value();
834 template<
typename MT2 >
842 const size_t m(
rows() );
845 const size_t jpos( n &
size_t(-2) );
848 for(
size_t i=0UL; i<m; ++i ) {
849 for(
size_t j=0UL; j<jpos; j+=2UL ) {
850 dm_(j ,i) -= (~rhs)(i,j );
851 dm_(j+1UL,i) -= (~rhs)(i,j+1UL);
855 dm_(jpos,i) -= (~rhs)(i,jpos);
872 template<
typename MT2 >
880 constexpr
size_t block( BLOCK_SIZE );
882 const size_t m(
rows() );
885 for(
size_t ii=0UL; ii<m; ii+=block ) {
886 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
887 for(
size_t jj=0UL; jj<n; jj+=block ) {
888 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
889 for(
size_t i=ii; i<iend; ++i ) {
890 for(
size_t j=jj; j<jend; ++j ) {
891 dm_(j,i) -= (~rhs)(i,j);
910 template<
typename MT2 >
920 for(
size_t i=0UL; i<(~rhs).
rows(); ++i )
921 for( RhsConstIterator element=(~rhs).begin(i); element!=(~rhs).
end(i); ++element )
922 dm_(element->index(),i) -= element->value();
937 template<
typename MT2 >
947 for(
size_t j=0UL; j<(~rhs).
columns(); ++j )
948 for( RhsConstIterator element=(~rhs).begin(j); element!=(~rhs).
end(j); ++element )
949 dm_(j,element->index()) -= element->value();
964 template<
typename MT2 >
972 const size_t m(
rows() );
975 const size_t jpos( n &
size_t(-2) );
978 for(
size_t i=0UL; i<m; ++i ) {
979 for(
size_t j=0UL; j<jpos; j+=2UL ) {
980 dm_(j ,i) *= (~rhs)(i,j );
981 dm_(j+1UL,i) *= (~rhs)(i,j+1UL);
985 dm_(jpos,i) *= (~rhs)(i,jpos);
1002 template<
typename MT2 >
1010 constexpr
size_t block( BLOCK_SIZE );
1012 const size_t m(
rows() );
1015 for(
size_t ii=0UL; ii<m; ii+=block ) {
1016 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
1017 for(
size_t jj=0UL; jj<n; jj+=block ) {
1018 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
1019 for(
size_t i=ii; i<iend; ++i ) {
1020 for(
size_t j=jj; j<jend; ++j ) {
1021 dm_(j,i) *= (~rhs)(i,j);
1040 template<
typename MT2 >
1052 for(
size_t i=0UL; i<(~rhs).
rows(); ++i )
1056 for( RhsConstIterator element=(~rhs).
begin(i); element!=(~rhs).
end(i); ++element ) {
1057 for( ; j<element->index(); ++j )
1059 dm_(j,i) *= element->value();
1063 for( ; j<(~rhs).
columns(); ++j ) {
1081 template<
typename MT2 >
1093 for(
size_t j=0UL; j<(~rhs).
columns(); ++j )
1097 for( RhsConstIterator element=(~rhs).
begin(j); element!=(~rhs).
end(j); ++element ) {
1098 for( ; i<element->index(); ++i )
1100 dm_(j,i) *= element->value();
1104 for( ; i<(~rhs).
rows(); ++i ) {
1151 template<
typename MT >
1153 :
public DenseMatrix< DMatTransposer<MT,true>, true >
1178 enum :
bool { simdEnabled = MT::simdEnabled };
1184 enum :
bool { smpAssignable = MT::smpAssignable };
1234 if( i >=
dm_.columns() ) {
1237 if( j >=
dm_.rows() ) {
1240 return (*
this)(i,j);
1253 if( i >=
dm_.columns() ) {
1256 if( j >=
dm_.rows() ) {
1259 return (*
this)(i,j);
1290 return dm_.begin(j);
1301 return dm_.cbegin(j);
1312 return dm_.cbegin(j);
1356 template<
typename Other >
1373 template<
typename Other >
1388 inline size_t rows() const noexcept {
1389 return dm_.columns();
1398 inline size_t columns() const noexcept {
1408 inline size_t spacing() const noexcept {
1409 return dm_.spacing();
1418 inline void reset() {
1428 inline bool isIntact() const noexcept {
1440 template<
typename Other >
1441 inline bool canAlias(
const Other* alias )
const noexcept
1443 return dm_.canAlias( alias );
1453 template<
typename Other >
1454 inline bool isAliased(
const Other* alias )
const noexcept
1456 return dm_.isAliased( alias );
1467 return dm_.isAligned();
1478 return dm_.canSMPAssign();
1495 return dm_.load( j, i );
1512 return dm_.loada( j, i );
1529 return dm_.loadu( j, i );
1547 dm_.store( j, i, value );
1565 dm_.storea( j, i, value );
1583 dm_.storeu( j, i, value );
1601 dm_.stream( j, i, value );
1616 template<
typename MT2 >
1624 const size_t m(
rows() );
1627 const size_t ipos( m &
size_t(-2) );
1630 for(
size_t j=0UL; j<n; ++j ) {
1631 for(
size_t i=0UL; i<ipos; i+=2UL ) {
1632 dm_(j,i ) = (~rhs)(i ,j);
1633 dm_(j,i+1UL) = (~rhs)(i+1UL,j);
1636 dm_(j,ipos) = (~rhs)(ipos,j);
1653 template<
typename MT2 >
1661 constexpr
size_t block( BLOCK_SIZE );
1663 const size_t m(
rows() );
1666 for(
size_t jj=0UL; jj<n; jj+=block ) {
1667 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
1668 for(
size_t ii=0UL; ii<m; ii+=block ) {
1669 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
1670 for(
size_t j=jj; j<jend; ++j ) {
1671 for(
size_t i=ii; i<iend; ++i ) {
1672 dm_(j,i) = (~rhs)(i,j);
1691 template<
typename MT2 >
1701 for(
size_t j=0UL; j<(~rhs).
columns(); ++j )
1702 for( RhsConstIterator element=(~rhs).begin(j); element!=(~rhs).
end(j); ++element )
1703 dm_(j,element->index()) = element->value();
1718 template<
typename MT2 >
1728 for(
size_t i=0UL; i<(~rhs).
rows(); ++i )
1729 for( RhsConstIterator element=(~rhs).begin(i); element!=(~rhs).
end(i); ++element )
1730 dm_(element->index(),i) = element->value();
1745 template<
typename MT2 >
1753 const size_t m(
rows() );
1756 const size_t ipos( m &
size_t(-2) );
1759 for(
size_t j=0UL; j<n; ++j ) {
1760 for(
size_t i=0UL; i<ipos; i+=2UL ) {
1761 dm_(j,i ) += (~rhs)(i ,j);
1762 dm_(j,i+1UL) += (~rhs)(i+1UL,j);
1765 dm_(j,ipos) += (~rhs)(ipos,j);
1782 template<
typename MT2 >
1790 constexpr
size_t block( BLOCK_SIZE );
1792 const size_t m(
rows() );
1795 for(
size_t jj=0UL; jj<n; jj+=block ) {
1796 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
1797 for(
size_t ii=0UL; ii<m; ii+=block ) {
1798 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
1799 for(
size_t j=jj; j<jend; ++j ) {
1800 for(
size_t i=ii; i<iend; ++i ) {
1801 dm_(j,i) += (~rhs)(i,j);
1820 template<
typename MT2 >
1830 for(
size_t j=0UL; j<(~rhs).
columns(); ++j )
1831 for( RhsConstIterator element=(~rhs).begin(j); element!=(~rhs).
end(j); ++element )
1832 dm_(j,element->index()) += element->value();
1847 template<
typename MT2 >
1857 for(
size_t i=0UL; i<(~rhs).
rows(); ++i )
1858 for( RhsConstIterator element=(~rhs).begin(i); element!=(~rhs).
end(i); ++element )
1859 dm_(element->index(),i) += element->value();
1874 template<
typename MT2 >
1882 const size_t m(
rows() );
1885 const size_t ipos( m &
size_t(-2) );
1888 for(
size_t j=0UL; j<n; ++j ) {
1889 for(
size_t i=0UL; i<ipos; i+=2UL ) {
1890 dm_(j,i ) -= (~rhs)(i ,j);
1891 dm_(j,i+1UL) -= (~rhs)(i+1UL,j);
1894 dm_(j,ipos) -= (~rhs)(ipos,j);
1911 template<
typename MT2 >
1919 constexpr
size_t block( BLOCK_SIZE );
1921 const size_t m(
rows() );
1924 for(
size_t jj=0UL; jj<n; jj+=block ) {
1925 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
1926 for(
size_t ii=0UL; ii<m; ii+=block ) {
1927 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
1928 for(
size_t j=jj; j<jend; ++j ) {
1929 for(
size_t i=ii; i<iend; ++i ) {
1930 dm_(j,i) -= (~rhs)(i,j);
1949 template<
typename MT2 >
1959 for(
size_t j=0UL; j<(~rhs).
columns(); ++j )
1960 for( RhsConstIterator element=(~rhs).begin(j); element!=(~rhs).
end(j); ++element )
1961 dm_(j,element->index()) -= element->value();
1976 template<
typename MT2 >
1986 for(
size_t i=0UL; i<(~rhs).
rows(); ++i )
1987 for( RhsConstIterator element=(~rhs).begin(i); element!=(~rhs).
end(i); ++element )
1988 dm_(element->index(),i) -= element->value();
2003 template<
typename MT2 >
2011 const size_t m(
rows() );
2014 const size_t ipos( m &
size_t(-2) );
2017 for(
size_t j=0UL; j<n; ++j ) {
2018 for(
size_t i=0UL; i<ipos; i+=2UL ) {
2019 dm_(j,i ) *= (~rhs)(i ,j);
2020 dm_(j,i+1UL) *= (~rhs)(i+1UL,j);
2023 dm_(j,ipos) *= (~rhs)(ipos,j);
2040 template<
typename MT2 >
2048 constexpr
size_t block( BLOCK_SIZE );
2050 const size_t m(
rows() );
2053 for(
size_t jj=0UL; jj<n; jj+=block ) {
2054 const size_t jend( ( n < jj+block )?( n ):( jj+block ) );
2055 for(
size_t ii=0UL; ii<m; ii+=block ) {
2056 const size_t iend( ( m < ii+block )?( m ):( ii+block ) );
2057 for(
size_t j=jj; j<jend; ++j ) {
2058 for(
size_t i=ii; i<iend; ++i ) {
2059 dm_(j,i) *= (~rhs)(i,j);
2078 template<
typename MT2 >
2090 for(
size_t j=0UL; j<(~rhs).
columns(); ++j )
2094 for( RhsConstIterator element=(~rhs).
begin(j); element!=(~rhs).
end(j); ++element ) {
2095 for( ; i<element->index(); ++i )
2097 dm_(j,i) *= element->value();
2101 for( ; i<(~rhs).
rows(); ++i ) {
2119 template<
typename MT2 >
2131 for(
size_t i=0UL; i<(~rhs).
rows(); ++i )
2135 for( RhsConstIterator element=(~rhs).
begin(i); element!=(~rhs).
end(i); ++element ) {
2136 for( ; j<element->index(); ++j )
2138 dm_(j,i) *= element->value();
2142 for( ; j<(~rhs).
columns(); ++j ) {
2190 template<
typename MT
2208 template<
typename MT
2228 template<
typename MT,
bool SO >
2230 :
public BoolConstant< HasMutableDataAccess<MT>::value >
2246 template<
typename MT,
bool SO >
2264 template<
typename MT,
bool SO >
2282 template<
typename MT,
bool SO >
void schurAssign(const SparseMatrix< MT2,!SO > &rhs)
Implementation of the transpose Schur product assignment of a column-major sparse matrix...
Definition: DMatTransposer.h:1082
Constraint on the data type.
BLAZE_ALWAYS_INLINE void storea(size_t i, size_t j, const SIMDType &value) noexcept
Aligned store of a SIMD element of the matrix.
Definition: DMatTransposer.h:522
Header file for auxiliary alias declarations.
void addAssign(const SparseMatrix< MT2, SO > &rhs)
Implementation of the transpose addition assignment of a row-major sparse matrix. ...
Definition: DMatTransposer.h:781
Header file for kernel specific block sizes.
#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
BLAZE_ALWAYS_INLINE void storeu(size_t i, size_t j, const SIMDType &value) noexcept
Unaligned store of a SIMD element of the matrix.
Definition: DMatTransposer.h:540
ConstIterator cend(size_t i) const
Returns an iterator just past the last non-zero element of row/column i.
Definition: DMatTransposer.h:303
Header file for basic type definitions.
DMatTransposer(MT &dm) noexcept
Constructor for the DMatTransposer class.
Definition: DMatTransposer.h:121
Base template for the SubmatrixTrait class.
Definition: SubmatrixTrait.h:128
#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:81
Generic wrapper for a compile time constant integral value.The IntegralConstant class template repres...
Definition: IntegralConstant.h:71
#define BLAZE_CONSTRAINT_MUST_BE_DENSE_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a dense, N-dimensional matrix type...
Definition: DenseMatrix.h:61
ConstPointer_< MT > ConstPointer
Pointer to a constant matrix value.
Definition: DMatTransposer.h:97
ConstIterator begin(size_t i) const
Returns an iterator to the first non-zero element of row/column i.
Definition: DMatTransposer.h:239
typename SIMDTrait< T >::Type SIMDTrait_
Auxiliary alias declaration for the SIMDTrait class template.The SIMDTrait_ alias declaration provide...
Definition: SIMDTrait.h:316
void subAssign(const SparseMatrix< MT2,!SO > &rhs)
Implementation of the transpose subtraction assignment of a column-major sparse matrix.
Definition: DMatTransposer.h:938
ResultType_< MT > TransposeType
Transpose type for expression template evaluations.
Definition: DMatTransposer.h:89
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:560
bool canAlias(const Other *alias) const noexcept
Returns whether the matrix can alias with the given address alias.
Definition: DMatTransposer.h:400
ReturnType_< MT > ReturnType
Return type for expression template evaluations.
Definition: DMatTransposer.h:92
Constraints on the storage order of matrix types.
void addAssign(const DenseMatrix< MT2, SO > &rhs)
Implementation of the transpose addition assignment of a row-major dense matrix.
Definition: DMatTransposer.h:705
Header file for the SIMD trait.
typename T::ResultType ResultType_
Alias declaration for nested ResultType type definitions.The ResultType_ alias declaration provides a...
Definition: Aliases.h:343
Pointer data() noexcept
Low-level data access to the matrix elements.
Definition: DMatTransposer.h:197
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:78
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:129
typename T::ReturnType ReturnType_
Alias declaration for nested ReturnType type definitions.The ReturnType_ alias declaration provides a...
Definition: Aliases.h:363
Compile time check for low-level access to mutable data.This type trait tests whether the given data ...
Definition: HasMutableDataAccess.h:75
ConstReference operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: DMatTransposer.h:147
ConstIterator end(size_t i) const
Returns an iterator just past the last non-zero element of row/column i.
Definition: DMatTransposer.h:287
Compile time check for the alignment of data types.This type trait tests whether the given data type ...
Definition: IsAligned.h:87
BLAZE_ALWAYS_INLINE SIMDType load(size_t i, size_t j) const noexcept
Load of a SIMD element of the matrix.
Definition: DMatTransposer.h:452
Constraint on the data type.
BLAZE_ALWAYS_INLINE SIMDType loada(size_t i, size_t j) const noexcept
Aligned load of a SIMD element of the matrix.
Definition: DMatTransposer.h:469
typename T::Pointer Pointer_
Alias declaration for nested Pointer type definitions.The Pointer_ alias declaration provides a conve...
Definition: Aliases.h:283
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
void subAssign(const DenseMatrix< MT2, SO > &rhs)
Implementation of the transpose subtraction assignment of a row-major dense matrix.
Definition: DMatTransposer.h:835
#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: ColumnMajorMatrix.h:61
ConstPointer data() const noexcept
Low-level data access to the matrix elements.
Definition: DMatTransposer.h:207
Reference operator()(size_t i, size_t j)
2D-access to the matrix elements.
Definition: DMatTransposer.h:133
Compile time check for data types with padding.This type trait tests whether the given data type empl...
Definition: IsPadded.h:76
#define BLAZE_THROW_OUT_OF_RANGE(MESSAGE)
Macro for the emission of a std::out_of_range exception.This macro encapsulates the default way of Bl...
Definition: Exception.h:331
Reference_< MT > Reference
Reference to a non-constant matrix value.
Definition: DMatTransposer.h:94
Header file for the DenseMatrix base class.
typename T::ElementType ElementType_
Alias declaration for nested ElementType type definitions.The ElementType_ alias declaration provides...
Definition: Aliases.h:163
size_t spacing() const noexcept
Returns the spacing between the beginning of two rows.
Definition: DMatTransposer.h:367
OppositeType_< MT > OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatTransposer.h:88
Expression object for the transposition of a dense matrix.The DMatTransposer class is a wrapper objec...
Definition: DMatTransposer.h:81
bool canSMPAssign() const noexcept
Returns whether the matrix can be used in SMP assignments.
Definition: DMatTransposer.h:435
size_t rows() const noexcept
Returns the current number of rows of the matrix.
Definition: DMatTransposer.h:347
MT & dm_
The dense matrix operand.
Definition: DMatTransposer.h:1121
Header file for the IsAligned type trait.
size_t columns() const noexcept
Returns the current number of columns of the matrix.
Definition: DMatTransposer.h:357
Pointer_< MT > Pointer
Pointer to a non-constant matrix value.
Definition: DMatTransposer.h:96
Header file for the exception macros of the math module.
EnableIf_< IsNumeric< Other >, DMatTransposer > & operator/=(Other rhs)
Division assignment operator for the division of a matrix by a scalar value ( ).
Definition: DMatTransposer.h:333
void assign(const SparseMatrix< MT2,!SO > &rhs)
Implementation of the transpose assignment of a column-major sparse matrix.
Definition: DMatTransposer.h:678
void reset()
Resets the matrix elements.
Definition: DMatTransposer.h:377
BLAZE_ALWAYS_INLINE void store(size_t i, size_t j, const SIMDType &value) noexcept
Store of a SIMD element of the matrix.
Definition: DMatTransposer.h:504
typename T::Reference Reference_
Alias declaration for nested Reference type definitions.The Reference_ alias declaration provides a c...
Definition: Aliases.h:303
BLAZE_ALWAYS_INLINE void stream(size_t i, size_t j, const SIMDType &value) noexcept
Aligned, non-temporal store of a SIMD element of the matrix.
Definition: DMatTransposer.h:558
Header file for the EnableIf class template.
void assign(const DenseMatrix< MT2,!SO > &rhs)
Implementation of the transpose assignment of a column-major dense matrix.
Definition: DMatTransposer.h:613
Header file for the IsPadded type trait.
void assign(const DenseMatrix< MT2, SO > &rhs)
Implementation of the transpose assignment of a row-major dense matrix.
Definition: DMatTransposer.h:576
Header file for the IsNumeric type trait.
void subAssign(const SparseMatrix< MT2, SO > &rhs)
Implementation of the transpose subtraction assignment of a row-major sparse matrix.
Definition: DMatTransposer.h:911
#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: RowMajorMatrix.h:61
ConstIterator cbegin(size_t i) const
Returns an iterator to the first non-zero element of row/column i.
Definition: DMatTransposer.h:255
Header file for run time assertion macros.
void subAssign(const DenseMatrix< MT2,!SO > &rhs)
Implementation of the transpose subtraction assignment of a column-major dense matrix.
Definition: DMatTransposer.h:873
Header file for the submatrix trait.
void addAssign(const DenseMatrix< MT2,!SO > &rhs)
Implementation of the transpose addition assignment of a column-major dense matrix.
Definition: DMatTransposer.h:743
Header file for the reset shim.
EnableIf_< IsNumeric< Other >, DMatTransposer > & operator*=(Other rhs)
Multiplication assignment operator for the multiplication between a matrix and a scalar value ( )...
Definition: DMatTransposer.h:316
Constraints on the storage order of matrix types.
Header file for the HasMutableDataAccess type trait.
typename SubmatrixTrait< MT >::Type SubmatrixTrait_
Auxiliary alias declaration for the SubmatrixTrait type trait.The SubmatrixTrait_ alias declaration p...
Definition: SubmatrixTrait.h:163
void schurAssign(const DenseMatrix< MT2, SO > &rhs)
Implementation of the transpose Schur product assignment of a row-major dense matrix.
Definition: DMatTransposer.h:965
TransposeType_< MT > ResultType
Result type for expression template evaluations.
Definition: DMatTransposer.h:87
typename EnableIf< Condition, T >::Type EnableIf_
Auxiliary alias declaration for the EnableIf class template.The EnableIf_ alias declaration provides ...
Definition: EnableIf.h:224
typename T::OppositeType OppositeType_
Alias declaration for nested OppositeType type definitions.The OppositeType_ alias declaration provid...
Definition: Aliases.h:263
typename T::Iterator Iterator_
Alias declaration for nested Iterator type definitions.The Iterator_ alias declaration provides a con...
Definition: Aliases.h:183
bool isAliased(const Other *alias) const noexcept
Returns whether the matrix is aliased with the given address alias.
Definition: DMatTransposer.h:413
typename T::ConstPointer ConstPointer_
Alias declaration for nested ConstPointer type definitions.The ConstPointer_ alias declaration provid...
Definition: Aliases.h:123
typename T::ConstReference ConstReference_
Alias declaration for nested ConstReference type definitions.The ConstReference_ alias declaration pr...
Definition: Aliases.h:143
typename T::ConstIterator ConstIterator_
Alias declaration for nested ConstIterator type definitions.The ConstIterator_ alias declaration prov...
Definition: Aliases.h:103
void addAssign(const SparseMatrix< MT2,!SO > &rhs)
Implementation of the transpose addition assignment of a column-major sparse matrix.
Definition: DMatTransposer.h:808
Reference at(size_t i, size_t j)
Checked access to the matrix elements.
Definition: DMatTransposer.h:162
void schurAssign(const SparseMatrix< MT2, SO > &rhs)
Implementation of the transpose Schur product assignment of a row-major sparse matrix.
Definition: DMatTransposer.h:1041
Iterator begin(size_t i)
Returns an iterator to the first non-zero element of row/column i.
Definition: DMatTransposer.h:223
ConstReference_< MT > ConstReference
Reference to a constant matrix value.
Definition: DMatTransposer.h:95
ElementType_< MT > ElementType
Type of the matrix elements.
Definition: DMatTransposer.h:90
SIMDTrait_< ElementType > SIMDType
SIMD type of the matrix elements.
Definition: DMatTransposer.h:91
void assign(const SparseMatrix< MT2, SO > &rhs)
Implementation of the transpose assignment of a row-major sparse matrix.
Definition: DMatTransposer.h:651
Header file for the IntegralConstant class template.
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:252
void schurAssign(const DenseMatrix< MT2,!SO > &rhs)
Implementation of the transpose Schur product assignment of a column-major dense matrix.
Definition: DMatTransposer.h:1003
typename T::TransposeType TransposeType_
Alias declaration for nested TransposeType type definitions.The TransposeType_ alias declaration prov...
Definition: Aliases.h:423
ConstReference at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: DMatTransposer.h:181
Iterator_< MT > Iterator
Iterator over non-constant elements.
Definition: DMatTransposer.h:98
ConstIterator_< MT > ConstIterator
Iterator over constant elements.
Definition: DMatTransposer.h:99
System settings for the inline keywords.
#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
bool isAligned() const noexcept
Returns whether the matrix is properly aligned in memory.
Definition: DMatTransposer.h:424
Iterator end(size_t i)
Returns an iterator just past the last non-zero element of row/column i.
Definition: DMatTransposer.h:271
bool isIntact() const noexcept
Returns whether the invariants of the matrix are intact.
Definition: DMatTransposer.h:387
BLAZE_ALWAYS_INLINE SIMDType loadu(size_t i, size_t j) const noexcept
Unaligned load of a SIMD element of the matrix.
Definition: DMatTransposer.h:486