35 #ifndef _BLAZE_MATH_ADAPTORS_UNILOWERMATRIX_H_ 36 #define _BLAZE_MATH_ADAPTORS_UNILOWERMATRIX_H_ 102 template<
typename MT,
bool SO,
bool DF >
103 inline void reset( UniLowerMatrix<MT,SO,DF>& m );
105 template<
typename MT,
bool SO,
bool DF >
106 inline void reset( UniLowerMatrix<MT,SO,DF>& m,
size_t i );
108 template<
typename MT,
bool SO,
bool DF >
109 inline void clear( UniLowerMatrix<MT,SO,DF>& m );
111 template<
bool RF,
typename MT,
bool SO,
bool DF >
112 inline bool isDefault(
const UniLowerMatrix<MT,SO,DF>& m );
114 template<
typename MT,
bool SO,
bool DF >
115 inline bool isIntact(
const UniLowerMatrix<MT,SO,DF>& m );
117 template<
typename MT,
bool SO,
bool DF >
118 inline void swap( UniLowerMatrix<MT,SO,DF>& a, UniLowerMatrix<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 );
282 template<
typename MT
300 template<
typename MT
349 invert<flag>( derestrict( m ) );
376 template<
typename MT1,
bool SO1,
typename MT2,
typename MT3,
typename MT4,
bool SO2 >
395 const size_t n( (~A).
rows() );
407 for(
size_t i=0UL; i<n; ++i ) {
432 template<
typename MT
450 const bool containsDiagonal( column < row + (~rhs).
size() );
451 const size_t iend(
min( column - row, (~rhs).
size() ) );
453 for(
size_t i=0UL; i<iend; ++i ) {
458 if( containsDiagonal && !
isOne( (~rhs)[iend] ) )
483 template<
typename MT
498 if( row >= column + (~rhs).
size() )
501 const bool containsDiagonal( row >= column );
502 const size_t ibegin( ( !containsDiagonal )?( 0UL ):( row - column + 1UL ) );
504 if( containsDiagonal && !
isOne( (~rhs)[row-column] ) )
507 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
534 template<
typename MT
554 const bool containsDiagonal( column < row + (~rhs).
size() );
555 const size_t index( column - row );
556 const RhsIterator last( (~rhs).lowerBound( index ) );
558 if( containsDiagonal ) {
559 if( last == (~rhs).
end() || last->index() != index || !
isOne( last->value() ) )
563 for( RhsIterator element=(~rhs).begin(); element!=last; ++element ) {
590 template<
typename MT
607 if( row >= column + (~rhs).
size() )
610 const bool containsDiagonal( row >= column );
611 const size_t index( ( containsDiagonal )?( row - column ):( 0UL ) );
612 const RhsIterator last( (~rhs).
end() );
613 RhsIterator element( (~rhs).lowerBound( index ) );
615 if( containsDiagonal ) {
616 if( element == last || element->index() != index || !
isOne( element->value() ) )
621 for( ; element!=last; ++element ) {
648 template<
typename MT1
664 const size_t M( (~rhs).
rows() );
665 const size_t N( (~rhs).
columns() );
667 if( row + 1UL >= column + N )
670 const size_t iend(
min( column + N - row, M ) );
672 for(
size_t i=0UL; i<iend; ++i )
674 const bool containsDiagonal( row + i >= column );
676 if( containsDiagonal && !
isOne( (~rhs)(i,row+i-column) ) )
679 const size_t jbegin( ( containsDiagonal )?( row + i - column + 1UL ):( 0UL ) );
681 for(
size_t j=jbegin; j<N; ++j ) {
709 template<
typename MT1
725 const size_t M( (~rhs).
rows() );
726 const size_t N( (~rhs).
columns() );
728 if( row + 1UL >= column + N )
731 const size_t jbegin( ( row < column )?( 0UL ):( row - column ) );
733 for(
size_t j=jbegin; j<N; ++j )
735 const size_t iend(
min( column + j - row, M ) );
737 for(
size_t i=0UL; i<iend; ++i ) {
742 const bool containsDiagonal( column + j < row + M );
744 if( containsDiagonal && !
isOne( (~rhs)(iend,j) ) )
770 template<
typename MT1
788 const size_t M( (~rhs).
rows() );
789 const size_t N( (~rhs).
columns() );
791 if( row + 1UL >= column + N )
794 const size_t iend(
min( column + N - row, M ) );
796 for(
size_t i=0UL; i<iend; ++i )
798 const bool containsDiagonal( row + i >= column );
799 const size_t index( ( containsDiagonal )?( row + i - column ):( 0UL ) );
801 const RhsIterator last( (~rhs).
end(i) );
802 RhsIterator element( (~rhs).lowerBound( i, index ) );
804 if( containsDiagonal ) {
805 if( element == last || ( element->index() != index ) || !
isOne( element->value() ) )
810 for( ; element!=last; ++element ) {
838 template<
typename MT1
856 const size_t M( (~rhs).
rows() );
857 const size_t N( (~rhs).
columns() );
859 if( row + 1UL >= column + N )
862 const size_t jbegin( ( row < column )?( 0UL ):( row - column ) );
864 for(
size_t j=jbegin; j<N; ++j )
866 const bool containsDiagonal( column + j < row + M );
868 const size_t index( column + j - row );
869 const RhsIterator last( (~rhs).lowerBound(
min( index, M ), j ) );
871 if( containsDiagonal ) {
872 if( last == (~rhs).
end(j) || ( last->index() != index ) || !
isOne( last->value() ) )
876 for( RhsIterator element=(~rhs).begin(j); element!=last; ++element ) {
905 template<
typename MT
923 const size_t iend(
min( column - row + 1UL, (~rhs).
size() ) );
925 for(
size_t i=0UL; i<iend; ++i ) {
953 template<
typename MT
968 const size_t ibegin( ( row <= column )?( 0UL ):( row - column ) );
970 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
998 template<
typename MT
1018 const RhsIterator last( (~rhs).lowerBound( column - row + 1UL ) );
1020 for( RhsIterator element=(~rhs).
begin(); element!=last; ++element ) {
1048 template<
typename MT
1065 const RhsIterator last( (~rhs).
end() );
1066 RhsIterator element( (~rhs).lowerBound( ( row <= column )?( 0UL ):( row - column ) ) );
1068 for( ; element!=last; ++element ) {
1096 template<
typename MT1
1112 const size_t M( (~rhs).
rows() );
1113 const size_t N( (~rhs).
columns() );
1115 if( row + 1UL >= column + N )
1118 const size_t iend(
min( column + N - row, M ) );
1120 for(
size_t i=0UL; i<iend; ++i )
1122 const bool containsDiagonal( row + i >= column );
1123 const size_t jbegin( ( containsDiagonal )?( row + i - column ):( 0UL ) );
1125 for(
size_t j=jbegin; j<N; ++j ) {
1154 template<
typename MT1
1170 const size_t M( (~rhs).
rows() );
1171 const size_t N( (~rhs).
columns() );
1173 if( row + 1UL >= column + N )
1176 const size_t jbegin( ( row <= column )?( 0UL ):( row - column ) );
1178 for(
size_t j=jbegin; j<N; ++j )
1180 const size_t iend(
min( column + j - row + 1UL, M ) );
1182 for(
size_t i=0UL; i<iend; ++i ) {
1211 template<
typename MT1
1229 const size_t M( (~rhs).
rows() );
1230 const size_t N( (~rhs).
columns() );
1232 if( row + 1UL >= column + N )
1235 const size_t iend(
min( column + N - row, M ) );
1237 for(
size_t i=0UL; i<iend; ++i )
1239 const bool containsDiagonal( row + i >= column );
1240 const size_t index( ( containsDiagonal )?( row + i - column ):( 0UL ) );
1242 const RhsIterator last( (~rhs).
end(i) );
1243 RhsIterator element( (~rhs).lowerBound( i, index ) );
1245 for( ; element!=last; ++element ) {
1274 template<
typename MT1
1292 const size_t M( (~rhs).
rows() );
1293 const size_t N( (~rhs).
columns() );
1295 if( row + 1UL >= column + N )
1298 const size_t jbegin( ( row < column )?( 0UL ):( row - column ) );
1300 for(
size_t j=jbegin; j<N; ++j )
1302 const size_t index( column + j - row + 1UL );
1303 const RhsIterator last( (~rhs).lowerBound(
min( index, M ), j ) );
1305 for( RhsIterator element=(~rhs).
begin(j); element!=last; ++element ) {
1334 template<
typename MT
1342 return tryAddAssign( lhs, ~rhs, row, column );
1365 template<
typename MT1
1373 return tryAddAssign( lhs, ~rhs, row, column );
1396 template<
typename MT
1411 return ( column < row || (~rhs).
size() <= column - row ||
isOne( (~rhs)[column-row] ) );
1434 template<
typename MT
1449 return ( row < column || (~rhs).
size() <= row - column ||
isOne( (~rhs)[row-column] ) );
1471 template<
typename MT
1479 return tryMultAssign( lhs, ~rhs, row, column );
1499 template<
typename MT
1520 template<
typename MT,
bool SO,
bool DF >
1521 struct Rows< UniLowerMatrix<MT,SO,DF> > :
public Rows<MT>
1537 template<
typename MT,
bool SO,
bool DF >
1554 template<
typename MT,
bool SO,
bool DF >
1571 template<
typename MT,
bool SO,
bool DF >
1588 template<
typename MT,
bool SO,
bool DF >
1605 template<
typename MT,
bool SO,
bool DF >
1622 template<
typename MT,
bool SO >
1639 template<
typename MT,
bool SO,
bool DF >
1656 template<
typename MT,
bool SO,
bool DF >
1673 template<
typename MT,
bool SO,
bool DF >
1690 template<
typename MT,
bool SO,
bool DF >
1709 template<
typename MT,
bool SO,
bool DF >
1728 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1729 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1734 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1735 struct AddTrait< StaticMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
1740 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1741 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1746 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1747 struct AddTrait< HybridMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
1752 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1753 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1758 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1759 struct AddTrait< DynamicMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
1764 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1765 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1770 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1771 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, UniLowerMatrix<MT,SO2,DF> >
1776 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1777 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1782 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1783 struct AddTrait< CompressedMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
1788 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1789 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1794 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1795 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniLowerMatrix<MT2,SO2,DF2> >
1800 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1801 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1806 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1807 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1812 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1813 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1818 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1819 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1824 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1825 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1843 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1844 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1849 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1850 struct SubTrait< StaticMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
1855 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1856 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1861 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1862 struct SubTrait< HybridMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
1867 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1868 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1873 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1874 struct SubTrait< DynamicMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
1879 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1880 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1885 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1886 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, UniLowerMatrix<MT,SO2,DF> >
1891 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1892 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1897 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1898 struct SubTrait< CompressedMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
1903 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1904 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1909 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1910 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniLowerMatrix<MT2,SO2,DF2> >
1915 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1916 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1921 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1922 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1927 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1928 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1933 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1934 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1939 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1940 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1958 template<
typename MT,
bool SO,
bool DF,
typename T >
1959 struct MultTrait< UniLowerMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
1964 template<
typename T,
typename MT,
bool SO,
bool DF >
1965 struct MultTrait< T, UniLowerMatrix<MT,SO,DF>, EnableIf_< IsNumeric<T> > >
1970 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
1971 struct MultTrait< UniLowerMatrix<MT,SO,DF>, StaticVector<T,N,false> >
1976 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
1977 struct MultTrait< StaticVector<T,N,true>, UniLowerMatrix<MT,SO,DF> >
1982 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
1983 struct MultTrait< UniLowerMatrix<MT,SO,DF>, HybridVector<T,N,false> >
1988 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
1989 struct MultTrait< HybridVector<T,N,true>, UniLowerMatrix<MT,SO,DF> >
1994 template<
typename MT,
bool SO,
bool DF,
typename T >
1995 struct MultTrait< UniLowerMatrix<MT,SO,DF>, DynamicVector<T,false> >
2000 template<
typename T,
typename MT,
bool SO,
bool DF >
2001 struct MultTrait< DynamicVector<T,true>, UniLowerMatrix<MT,SO,DF> >
2006 template<
typename MT,
bool SO,
bool DF,
typename T,
bool AF,
bool PF >
2007 struct MultTrait< UniLowerMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
2012 template<
typename T,
bool AF,
bool PF,
typename MT,
bool SO,
bool DF >
2013 struct MultTrait< CustomVector<T,AF,PF,true>, UniLowerMatrix<MT,SO,DF> >
2018 template<
typename MT,
bool SO,
bool DF,
typename T >
2019 struct MultTrait< UniLowerMatrix<MT,SO,DF>, CompressedVector<T,false> >
2024 template<
typename T,
typename MT,
bool SO,
bool DF >
2025 struct MultTrait< CompressedVector<T,true>, UniLowerMatrix<MT,SO,DF> >
2030 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2031 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
2036 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2037 struct MultTrait< StaticMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
2042 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
2043 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
2048 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
2049 struct MultTrait< HybridMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
2054 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2055 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
2060 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2061 struct MultTrait< DynamicMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
2066 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
2067 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
2072 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
2073 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, UniLowerMatrix<MT,SO2,DF> >
2078 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
2079 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
2084 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
2085 struct MultTrait< CompressedMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
2090 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
2091 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
2096 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
2097 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniLowerMatrix<MT2,SO2,DF2> >
2102 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2103 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
2108 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2109 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2114 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2115 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
2120 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2121 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2126 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2127 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2145 template<
typename MT,
bool SO,
bool DF,
typename T >
2146 struct DivTrait< UniLowerMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
2164 template<
typename MT,
bool SO,
bool DF,
typename ET >
2165 struct ForEachTrait< UniLowerMatrix<MT,SO,DF>, Pow<ET> >
2183 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2184 struct HighType< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2202 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2203 struct LowType< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
2221 template<
typename MT,
bool SO,
bool DF >
2240 template<
typename MT,
bool SO,
bool DF >
2241 struct RowTrait< UniLowerMatrix<MT,SO,DF> >
2259 template<
typename MT,
bool SO,
bool DF >
Header file for the implementation of the base template of the UniLowerMatrix.
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 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
Matrix adapter for lower triangular matrices.
Definition: Forward.h:48
Header file for the dense matrix inversion flags.
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.
Header file for the IsUniLower type trait.
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
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
UniLowerMatrix specialization for dense matrices.
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
UniLowerMatrix specialization for sparse matrices.
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.
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.
Compile time check for lower unitriangular matrices.This type trait tests whether or not the given te...
Definition: IsUniLower.h:86
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
#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
Header file for the implementation of the base template of the LowerMatrix.
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
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
Matrix adapter for lower unitriangular matrices.
Definition: Forward.h:53
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 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 HighType type trait.
Header file for the TrueType type/value trait base class.