35 #ifndef _BLAZE_MATH_ADAPTORS_UNIUPPERMATRIX_H_ 36 #define _BLAZE_MATH_ADAPTORS_UNIUPPERMATRIX_H_ 102 template<
typename MT,
bool SO,
bool DF >
103 inline void reset( UniUpperMatrix<MT,SO,DF>& m );
105 template<
typename MT,
bool SO,
bool DF >
106 inline void reset( UniUpperMatrix<MT,SO,DF>& m,
size_t i );
108 template<
typename MT,
bool SO,
bool DF >
109 inline void clear( UniUpperMatrix<MT,SO,DF>& m );
111 template<
bool RF,
typename MT,
bool SO,
bool DF >
112 inline bool isDefault(
const UniUpperMatrix<MT,SO,DF>& m );
114 template<
typename MT,
bool SO,
bool DF >
115 inline bool isIntact(
const UniUpperMatrix<MT,SO,DF>& m );
117 template<
typename MT,
bool SO,
bool DF >
118 inline void swap( UniUpperMatrix<MT,SO,DF>& a, UniUpperMatrix<MT,SO,DF>& b ) noexcept;
130 template<
typename MT
153 template<
typename MT
170 template<
typename MT
196 return ( m.rows() == 0UL );
218 return isIdentity<RF>( m );
283 template<
typename MT
301 template<
typename MT
350 invert<flag>( derestrict( m ) );
377 template<
typename MT1,
bool SO1,
typename MT2,
typename MT3,
typename MT4,
bool SO2 >
396 const size_t n( (~A).
rows() );
408 for(
size_t i=0UL; i<n; ++i ) {
433 template<
typename MT
448 if( column >= row + (~rhs).
size() )
451 const bool containsDiagonal( column >= row );
452 const size_t ibegin( ( !containsDiagonal )?( 0UL ):( column - row + 1UL ) );
454 if( containsDiagonal && !
isOne( (~rhs)[column-row] ) )
457 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
484 template<
typename MT
502 const bool containsDiagonal( row < column + (~rhs).
size() );
503 const size_t iend(
min( row - column, (~rhs).
size() ) );
505 for(
size_t i=0UL; i<iend; ++i ) {
510 if( containsDiagonal && !
isOne( (~rhs)[iend] ) )
535 template<
typename MT
552 if( column >= row + (~rhs).
size() )
555 const bool containsDiagonal( column >= row );
556 const size_t index( ( containsDiagonal )?( column - row ):( 0UL ) );
557 const RhsIterator last( (~rhs).
end() );
558 RhsIterator element( (~rhs).lowerBound( index ) );
560 if( containsDiagonal ) {
561 if( element == last || element->index() != index || !
isOne( element->value() ) )
566 for( ; element!=last; ++element ) {
593 template<
typename MT
613 const bool containsDiagonal( row < column + (~rhs).
size() );
614 const size_t index( row - column );
615 const RhsIterator last( (~rhs).lowerBound( index ) );
617 if( containsDiagonal ) {
618 if( last == (~rhs).
end() || last->index() != index || !
isOne( last->value() ) )
622 for( RhsIterator element=(~rhs).begin(); element!=last; ++element ) {
649 template<
typename MT1
665 const size_t M( (~rhs).
rows() );
666 const size_t N( (~rhs).
columns() );
668 if( column + 1UL >= row + M )
671 const size_t ibegin( ( column < row )?( 0UL ):( column - row ) );
673 for(
size_t i=ibegin; i<M; ++i )
675 const size_t jend(
min( row + i - column, N ) );
677 for(
size_t j=0UL; j<jend; ++j ) {
682 const bool containsDiagonal( row + i < column + N );
684 if( containsDiagonal && !
isOne( (~rhs)(i,jend) ) )
710 template<
typename MT1
726 const size_t M( (~rhs).
rows() );
727 const size_t N( (~rhs).
columns() );
729 if( column + 1UL >= row + M )
732 const size_t jend(
min( row + M - column, N ) );
734 for(
size_t j=0UL; j<jend; ++j )
736 const bool containsDiagonal( column + j >= row );
738 if( containsDiagonal && !
isOne( (~rhs)(column+j-row,j) ) )
741 const size_t ibegin( ( containsDiagonal )?( column + j - row + 1UL ):( 0UL ) );
743 for(
size_t i=ibegin; i<M; ++i ) {
771 template<
typename MT1
789 const size_t M( (~rhs).
rows() );
790 const size_t N( (~rhs).
columns() );
792 if( column + 1UL >= row + M )
795 const size_t ibegin( ( column < row )?( 0UL ):( column - row ) );
797 for(
size_t i=ibegin; i<M; ++i )
799 const bool containsDiagonal( row + i < column + N );
801 const size_t index( row + i - column );
802 const RhsIterator last( (~rhs).lowerBound( i,
min( index, N ) ) );
804 if( containsDiagonal ) {
805 if( last == (~rhs).
end(i) || ( last->index() != index ) || !
isOne( last->value() ) )
809 for( RhsIterator element=(~rhs).begin(i); element!=last; ++element ) {
837 template<
typename MT1
855 const size_t M( (~rhs).
rows() );
856 const size_t N( (~rhs).
columns() );
858 if( column + 1UL >= row + M )
861 const size_t jend(
min( row + M - column, N ) );
863 for(
size_t j=0UL; j<jend; ++j )
865 const bool containsDiagonal( column + j >= row );
866 const size_t index( ( containsDiagonal )?( column + j - row ):( 0UL ) );
868 const RhsIterator last( (~rhs).
end(j) );
869 RhsIterator element( (~rhs).lowerBound( index, j ) );
871 if( containsDiagonal ) {
872 if( element == last || ( element->index() != index ) || !
isOne( element->value() ) )
877 for( ; element!=last; ++element ) {
906 template<
typename MT
921 const size_t ibegin( ( column <= row )?( 0UL ):( column - row ) );
923 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
951 template<
typename MT
969 const size_t iend(
min( row - column + 1UL, (~rhs).
size() ) );
971 for(
size_t i=0UL; i<iend; ++i ) {
999 template<
typename MT
1016 const RhsIterator last( (~rhs).
end() );
1017 RhsIterator element( (~rhs).lowerBound( ( column <= row )?( 0UL ):( column - row ) ) );
1019 for( ; element!=last; ++element ) {
1047 template<
typename MT
1067 const RhsIterator last( (~rhs).lowerBound( row - column + 1UL ) );
1069 for( RhsIterator element=(~rhs).
begin(); element!=last; ++element ) {
1097 template<
typename MT1
1113 const size_t M( (~rhs).
rows() );
1114 const size_t N( (~rhs).
columns() );
1116 if( column + 1UL >= row + M )
1119 const size_t ibegin( ( column <= row )?( 0UL ):( column - row ) );
1121 for(
size_t i=ibegin; i<M; ++i )
1123 const size_t jend(
min( row + i - column + 1UL, N ) );
1125 for(
size_t j=0UL; j<jend; ++j ) {
1154 template<
typename MT1
1170 const size_t M( (~rhs).
rows() );
1171 const size_t N( (~rhs).
columns() );
1173 if( column + 1UL >= row + M )
1176 const size_t jend(
min( row + M - column, N ) );
1178 for(
size_t j=0UL; j<jend; ++j )
1180 const bool containsDiagonal( column + j >= row );
1181 const size_t ibegin( ( containsDiagonal )?( column + j - row ):( 0UL ) );
1183 for(
size_t i=ibegin; i<M; ++i ) {
1212 template<
typename MT1
1230 const size_t M( (~rhs).
rows() );
1231 const size_t N( (~rhs).
columns() );
1233 if( column + 1UL >= row + M )
1236 const size_t ibegin( ( column < row )?( 0UL ):( column - row ) );
1238 for(
size_t i=ibegin; i<M; ++i )
1240 const size_t index( row + i - column + 1UL );
1241 const RhsIterator last( (~rhs).lowerBound( i,
min( index, N ) ) );
1243 for( RhsIterator element=(~rhs).
begin(i); element!=last; ++element ) {
1272 template<
typename MT1
1290 const size_t M( (~rhs).
rows() );
1291 const size_t N( (~rhs).
columns() );
1293 if( column + 1UL >= row + M )
1296 const size_t jend(
min( row + M - column, N ) );
1298 for(
size_t j=0UL; j<jend; ++j )
1300 const bool containsDiagonal( column + j >= row );
1301 const size_t index( ( containsDiagonal )?( column + j - row ):( 0UL ) );
1303 const RhsIterator last( (~rhs).
end(j) );
1304 RhsIterator element( (~rhs).lowerBound( index, j ) );
1306 for( ; element!=last; ++element ) {
1335 template<
typename MT
1343 return tryAddAssign( lhs, ~rhs, row, column );
1366 template<
typename MT1
1374 return tryAddAssign( lhs, ~rhs, row, column );
1397 template<
typename MT
1412 return ( column < row || (~rhs).
size() <= column - row ||
isOne( (~rhs)[column-row] ) );
1435 template<
typename MT
1450 return ( row < column || (~rhs).
size() <= row - column ||
isOne( (~rhs)[row-column] ) );
1472 template<
typename MT
1480 return tryMultAssign( lhs, ~rhs, row, column );
1500 template<
typename MT
1521 template<
typename MT,
bool SO,
bool DF >
1522 struct Rows< UniUpperMatrix<MT,SO,DF> > :
public Rows<MT>
1538 template<
typename MT,
bool SO,
bool DF >
1555 template<
typename MT,
bool SO,
bool DF >
1572 template<
typename MT,
bool SO,
bool DF >
1589 template<
typename MT,
bool SO,
bool DF >
1606 template<
typename MT,
bool SO,
bool DF >
1623 template<
typename MT,
bool SO >
1640 template<
typename MT,
bool SO,
bool DF >
1657 template<
typename MT,
bool SO,
bool DF >
1674 template<
typename MT,
bool SO,
bool DF >
1691 template<
typename MT,
bool SO,
bool DF >
1710 template<
typename MT,
bool SO,
bool DF >
1729 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1730 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1735 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1736 struct AddTrait< StaticMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
1741 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1742 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1747 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1748 struct AddTrait< HybridMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
1753 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1754 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1759 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1760 struct AddTrait< DynamicMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
1765 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1766 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1771 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1772 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, UniUpperMatrix<MT,SO2,DF> >
1777 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1778 struct AddTrait< UniUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1783 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1784 struct AddTrait< CompressedMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
1789 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1790 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1795 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1796 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniUpperMatrix<MT2,SO2,DF2> >
1801 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1802 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1807 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1808 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1813 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1814 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1819 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1820 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1825 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1826 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1831 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1832 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1837 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1838 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1843 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1844 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1849 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1850 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
1855 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1856 struct AddTrait< UpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1861 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1862 struct AddTrait< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1880 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1881 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1886 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1887 struct SubTrait< StaticMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
1892 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1893 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1898 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1899 struct SubTrait< HybridMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
1904 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1905 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1910 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1911 struct SubTrait< DynamicMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
1916 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1917 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1922 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1923 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, UniUpperMatrix<MT,SO2,DF> >
1928 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1929 struct SubTrait< UniUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1934 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1935 struct SubTrait< CompressedMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
1940 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1941 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1946 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1947 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniUpperMatrix<MT2,SO2,DF2> >
1952 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1953 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1958 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1959 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1964 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1965 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1970 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1971 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1976 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1977 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1982 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1983 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
1988 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1989 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1994 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1995 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2000 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2001 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2006 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2007 struct SubTrait< UpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2012 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2013 struct SubTrait< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2031 template<
typename MT,
bool SO,
bool DF,
typename T >
2032 struct MultTrait< UniUpperMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
2037 template<
typename T,
typename MT,
bool SO,
bool DF >
2038 struct MultTrait< T, UniUpperMatrix<MT,SO,DF>, EnableIf_< IsNumeric<T> > >
2043 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
2044 struct MultTrait< UniUpperMatrix<MT,SO,DF>, StaticVector<T,N,false> >
2049 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
2050 struct MultTrait< StaticVector<T,N,true>, UniUpperMatrix<MT,SO,DF> >
2055 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
2056 struct MultTrait< UniUpperMatrix<MT,SO,DF>, HybridVector<T,N,false> >
2061 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
2062 struct MultTrait< HybridVector<T,N,true>, UniUpperMatrix<MT,SO,DF> >
2067 template<
typename MT,
bool SO,
bool DF,
typename T >
2068 struct MultTrait< UniUpperMatrix<MT,SO,DF>, DynamicVector<T,false> >
2073 template<
typename T,
typename MT,
bool SO,
bool DF >
2074 struct MultTrait< DynamicVector<T,true>, UniUpperMatrix<MT,SO,DF> >
2079 template<
typename MT,
bool SO,
bool DF,
typename T,
bool AF,
bool PF >
2080 struct MultTrait< UniUpperMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
2085 template<
typename T,
bool AF,
bool PF,
typename MT,
bool SO,
bool DF >
2086 struct MultTrait< CustomVector<T,AF,PF,true>, UniUpperMatrix<MT,SO,DF> >
2091 template<
typename MT,
bool SO,
bool DF,
typename T >
2092 struct MultTrait< UniUpperMatrix<MT,SO,DF>, CompressedVector<T,false> >
2097 template<
typename T,
typename MT,
bool SO,
bool DF >
2098 struct MultTrait< CompressedVector<T,true>, UniUpperMatrix<MT,SO,DF> >
2103 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2104 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
2109 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2110 struct MultTrait< StaticMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
2115 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2116 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
2121 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2122 struct MultTrait< HybridMatrix<T,M,N,SO1>, UniUpperMatrix<MT,SO2,DF> >
2127 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2128 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
2133 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2134 struct MultTrait< DynamicMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
2139 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
2140 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
2145 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
2146 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, UniUpperMatrix<MT,SO2,DF> >
2151 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2152 struct MultTrait< UniUpperMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
2157 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2158 struct MultTrait< CompressedMatrix<T,SO1>, UniUpperMatrix<MT,SO2,DF> >
2163 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
2164 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
2169 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
2170 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniUpperMatrix<MT2,SO2,DF2> >
2175 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2176 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2181 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2182 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2187 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2188 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2193 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2194 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2199 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2200 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2205 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2206 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2211 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2212 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2217 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2218 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2223 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2224 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, UpperMatrix<MT2,SO2,DF2> >
2229 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2230 struct MultTrait< UpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2235 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2236 struct MultTrait< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2254 template<
typename MT,
bool SO,
bool DF,
typename T >
2255 struct DivTrait< UniUpperMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
2273 template<
typename MT,
bool SO,
bool DF,
typename ET >
2274 struct ForEachTrait< UniUpperMatrix<MT,SO,DF>, Pow<ET> >
2292 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2293 struct HighType< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2311 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2312 struct LowType< UniUpperMatrix<MT1,SO1,DF1>, UniUpperMatrix<MT2,SO2,DF2> >
2330 template<
typename MT,
bool SO,
bool DF >
2349 template<
typename MT,
bool SO,
bool DF >
2350 struct RowTrait< UniUpperMatrix<MT,SO,DF> >
2368 template<
typename MT,
bool SO,
bool DF >
Header file for auxiliary alias declarations.
Header file for mathematical functions.
typename DerestrictTrait< T >::Type DerestrictTrait_
Auxiliary alias declaration for the DerestrictTrait type trait.The DerestrictTrait_ alias declaration...
Definition: DerestrictTrait.h:110
Compile time check for low-level access to constant data.This type trait tests whether the given data...
Definition: HasConstDataAccess.h:75
Header file for the Rows type trait.
Header file for the UNUSED_PARAMETER function template.
Header file for the IsUniUpper type trait.
Header file for the subtraction trait.
Flag for the inversion of a diagonal matrix.
Definition: InversionFlag.h:115
Flag for the inversion of a general matrix (same as byLU).
Definition: InversionFlag.h:108
Header file for the row trait.
Base template for the SubmatrixTrait class.
Definition: SubmatrixTrait.h:118
Flag for the inversion of a upper unitriangular matrix.
Definition: InversionFlag.h:114
Base template for the ColumnTrait class.
Definition: ColumnTrait.h:117
Flag for the inversion of a lower unitriangular matrix.
Definition: InversionFlag.h:112
typename RowTrait< MT >::Type RowTrait_
Auxiliary alias declaration for the RowTrait type trait.The RowTrait_ alias declaration provides a co...
Definition: RowTrait.h:152
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector) noexcept
Returns the current size/dimension of the vector.
Definition: Vector.h:261
Generic wrapper for a compile time constant integral value.The IntegralConstant class template repres...
Definition: IntegralConstant.h:71
Header file for the dense matrix inversion flags.
UniUpperMatrix specialization for sparse matrices.
BLAZE_ALWAYS_INLINE MT::Iterator begin(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator to the first element of row/column i.
Definition: Matrix.h:194
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:533
const ElementType_< MT > min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1755
#define BLAZE_CONSTRAINT_MUST_NOT_BE_UNITRIANGULAR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a lower or upper unitriangular matrix ty...
Definition: UniTriangular.h:81
typename MultTrait< T1, T2 >::Type MultTrait_
Auxiliary alias declaration for the MultTrait class template.The MultTrait_ alias declaration provide...
Definition: MultTrait.h:245
Constraint on the data type.
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:71
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:119
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is an identity matrix.
Definition: DenseMatrix.h:1679
Constraint on the data type.
Compile time check for data types with restricted data access.This type trait tests whether the given...
Definition: IsRestricted.h:82
Header file for the IsSquare type trait.
Compile time check for the alignment of data types.This type trait tests whether the given data type ...
Definition: IsAligned.h:87
void invert(const HermitianProxy< MT > &proxy)
In-place inversion of the represented element.
Definition: HermitianProxy.h:741
Base template for the RowTrait class.
Definition: RowTrait.h:117
Compile time check for upper unitriangular matrices.This type trait tests whether or not the given te...
Definition: IsUniUpper.h:86
Flag for the inversion of a upper triangular matrix.
Definition: InversionFlag.h:113
Constraint on the data type.
Header file for the LowType type trait.
Flag for the inversion of a lower triangular matrix.
Definition: InversionFlag.h:111
Base template for the HighType type trait.
Definition: HighType.h:133
Header file for the multiplication trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Flag for the LU-based matrix inversion.
Definition: InversionFlag.h:103
Base template for the ForEachTrait class.The ForEachTrait class template offers the possibility to se...
Definition: ForEachTrait.h:79
Header file for all forward declarations of the math module.
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2939
Compile time check for data types with padding.This type trait tests whether the given data type empl...
Definition: IsPadded.h:76
void lu(const DenseMatrix< MT1, SO1 > &A, DenseMatrix< MT2, SO1 > &L, DenseMatrix< MT3, SO1 > &U, Matrix< MT4, SO2 > &P)
LU decomposition of the given dense matrix.
Definition: LU.h:219
Header file for the Columns type trait.
Header file for the implementation of a fixed-size matrix.
typename T::ElementType ElementType_
Alias declaration for nested ElementType type definitions.The ElementType_ alias declaration provides...
Definition: Aliases.h:163
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
Compile time check for square matrices.This type trait tests whether or not the given template parame...
Definition: IsSquare.h:88
Header file for the IsAligned type trait.
BLAZE_ALWAYS_INLINE size_t columns(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of columns of the matrix.
Definition: Matrix.h:336
DisableIf_< Or< IsComputation< MT >, IsTransExpr< MT >, IsDeclExpr< MT > >, RowExprTrait_< MT > > row(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific row of the given matrix.
Definition: Row.h:128
#define BLAZE_CONSTRAINT_MUST_NOT_BE_UPPER_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a upper triangular matrix type...
Definition: Upper.h:81
BLAZE_ALWAYS_INLINE void resize(Matrix< MT, SO > &matrix, size_t rows, size_t columns, bool preserve=true)
Changing the size of the matrix.
Definition: Matrix.h:544
BLAZE_ALWAYS_INLINE MT::Iterator end(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator just past the last element of row/column i.
Definition: Matrix.h:260
Header file for the RemoveAdaptor type trait.
Constraint on the data type.
Matrix adapter for upper triangular matrices.
Definition: Forward.h:55
Compile time check for adaptors.This type trait tests whether the given template parameter is an adap...
Definition: IsAdaptor.h:88
DisableIf_< Or< IsComputation< MT >, IsTransExpr< MT >, IsDeclExpr< MT > >, ColumnExprTrait_< MT > > column(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific column of the given matrix.
Definition: Column.h:128
Header file for the EnableIf class template.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:553
Header file for the IsPadded type trait.
Header file for the IsAdaptor type trait.
Header file for the isOne shim.
Header file for the DerestrictTrait class template.
Constraint on the data type.
Header file for the IsNumeric type trait.
Base template for the LowType type trait.
Definition: LowType.h:133
Header file for the HasConstDataAccess type trait.
Compile time check for resizable data types.This type trait tests whether the given data type is a re...
Definition: IsResizable.h:75
Matrix adapter for upper unitriangular matrices.
Definition: Forward.h:54
#define BLAZE_CONSTRAINT_MUST_NOT_BE_SYMMETRIC_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a symmetric matrix type, a compilation error is created.
Definition: Symmetric.h:79
Header file for run time assertion macros.
Base template for the AddTrait class.
Definition: AddTrait.h:143
Base template for the MultTrait class.
Definition: MultTrait.h:143
Header file for the addition trait.
Header file for the division trait.
Header file for the submatrix trait.
Constraint on the data type.
#define BLAZE_CONSTRAINT_MUST_NOT_BE_LOWER_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a lower triangular matrix type...
Definition: Lower.h:81
bool isOne(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is 1.
Definition: DiagonalProxy.h:635
Header file for the column trait.
Header file for the isDefault shim.
void swap(DiagonalMatrix< MT, SO, DF > &a, DiagonalMatrix< MT, SO, DF > &b) noexcept
Swapping the contents of two matrices.
Definition: DiagonalMatrix.h:267
Base class for matrices.The Matrix class is a base class for all dense and sparse matrix classes with...
Definition: Forward.h:94
#define BLAZE_CONSTRAINT_MUST_BE_BLAS_COMPATIBLE_TYPE(T)
Constraint on the data type.In case the given data type T is not a BLAS compatible data type (i...
Definition: BLASCompatible.h:61
Constraint on the data type.
#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:81
typename SubmatrixTrait< MT >::Type SubmatrixTrait_
Auxiliary alias declaration for the SubmatrixTrait type trait.The SubmatrixTrait_ alias declaration p...
Definition: SubmatrixTrait.h:153
Evaluation of the return type of the derestrict function.Via this type trait it is possible to evalua...
Definition: DerestrictTrait.h:73
Base template for the DivTrait class.
Definition: DivTrait.h:143
typename ColumnTrait< MT >::Type ColumnTrait_
Auxiliary alias declaration for the ColumnTrait type trait.The ColumnTrait_ alias declaration provide...
Definition: ColumnTrait.h:152
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:320
Removal of top level adaptor types.In case the given type is an adaptor type (SymmetricMatrix, LowerMatrix, UpperMatrix, ...), the RemoveAdaptor type trait removes the adaptor and extracts the contained general matrix type. Else the given type is returned as is. Note that cv-qualifiers are preserved.
Definition: RemoveAdaptor.h:76
Base class for N-dimensional vectors.The Vector class is a base class for all arbitrarily sized (N-di...
Definition: Forward.h:164
typename SubTrait< T1, T2 >::Type SubTrait_
Auxiliary alias declaration for the SubTrait class template.The SubTrait_ alias declaration provides ...
Definition: SubTrait.h:245
Header file for the for-each trait.
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:120
UniUpperMatrix specialization for dense matrices.
Header file for the IntegralConstant class template.
Compile time evaluation of the number of columns of a matrix.The Columns type trait evaluates the num...
Definition: Columns.h:76
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:249
Compile time evaluation of the number of rows of a matrix.The Rows type trait evaluates the number of...
Definition: Rows.h:76
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:573
#define BLAZE_CONSTRAINT_MUST_NOT_BE_HERMITIAN_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is an Hermitian matrix type, a compilation error is created.
Definition: Hermitian.h:79
Base template for the SubTrait class.
Definition: SubTrait.h:143
void UNUSED_PARAMETER(const Args &...)
Suppression of unused parameter warnings.
Definition: Unused.h:81
Header file for the implementation of the base template of the UpperMatrix.
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
typename AddTrait< T1, T2 >::Type AddTrait_
Auxiliary alias declaration for the AddTrait class template.The AddTrait_ alias declaration provides ...
Definition: AddTrait.h:245
InversionFlag
Inversion flag.The InversionFlag type enumeration represents the different types of matrix inversion ...
Definition: InversionFlag.h:101
#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
Header file for the implementation of the base template of the UniUpperMatrix.
Header file for the HighType type trait.
Header file for the TrueType type/value trait base class.