35 #ifndef _BLAZE_MATH_ADAPTORS_STRICTLYLOWERMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_STRICTLYLOWERMATRIX_H_
92 template<
typename MT,
bool SO,
bool DF >
93 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m );
95 template<
typename MT,
bool SO,
bool DF >
96 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m,
size_t i );
98 template<
typename MT,
bool SO,
bool DF >
99 inline void clear( StrictlyLowerMatrix<MT,SO,DF>& m );
101 template<
typename MT,
bool SO,
bool DF >
102 inline bool isDefault(
const StrictlyLowerMatrix<MT,SO,DF>& m );
104 template<
typename MT,
bool SO,
bool DF >
105 inline bool isIntact(
const StrictlyLowerMatrix<MT,SO,DF>& m );
107 template<
typename MT,
bool SO,
bool DF >
108 inline void swap( StrictlyLowerMatrix<MT,SO,DF>& a, StrictlyLowerMatrix<MT,SO,DF>& b ) noexcept;
120 template<
typename MT
143 template<
typename MT
160 template<
typename MT
181 template<
typename MT
184 inline bool isDefault_backend(
const StrictlyLowerMatrix<MT,SO,DF>& m,
TrueType )
186 return ( m.rows() == 0UL );
203 template<
typename MT
206 inline bool isDefault_backend(
const StrictlyLowerMatrix<MT,SO,DF>& m,
FalseType )
233 template<
typename MT
264 template<
typename MT
282 template<
typename MT
309 template<
typename MT
313 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
314 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
327 const size_t iend(
min( column - row + 1UL, (~rhs).
size() ) );
329 for(
size_t i=0UL; i<iend; ++i ) {
357 template<
typename MT
361 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
362 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
372 const size_t ibegin( ( row <= column )?( 0UL ):( row - column ) );
374 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
402 template<
typename MT
406 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
407 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
422 const RhsIterator last( (~rhs).lowerBound( column - row + 1UL ) );
424 for( RhsIterator element=(~rhs).
begin(); element!=last; ++element ) {
452 template<
typename MT
456 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
457 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
469 const RhsIterator last( (~rhs).
end() );
470 RhsIterator element( (~rhs).lowerBound( ( row <= column )?( 0UL ):( row - column ) ) );
472 for( ; element!=last; ++element ) {
500 template<
typename MT1
504 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
505 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
516 const size_t M( (~rhs).
rows() );
517 const size_t N( (~rhs).
columns() );
519 if( row + 1UL >= column + N )
522 const size_t iend(
min( column + N - row, M ) );
524 for(
size_t i=0UL; i<iend; ++i )
526 const bool containsDiagonal( row + i >= column );
527 const size_t jbegin( ( containsDiagonal )?( row + i - column ):( 0UL ) );
529 for(
size_t j=jbegin; j<N; ++j ) {
558 template<
typename MT1
562 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
563 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
574 const size_t M( (~rhs).
rows() );
575 const size_t N( (~rhs).
columns() );
577 if( row + 1UL >= column + N )
580 const size_t jbegin( ( row <= column )?( 0UL ):( row - column ) );
582 for(
size_t j=jbegin; j<N; ++j )
584 const size_t iend(
min( column + j - row + 1UL, M ) );
586 for(
size_t i=0UL; i<iend; ++i ) {
615 template<
typename MT1
619 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
620 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
633 const size_t M( (~rhs).
rows() );
634 const size_t N( (~rhs).
columns() );
636 if( row + 1UL >= column + N )
639 const size_t iend(
min( column + N - row, M ) );
641 for(
size_t i=0UL; i<iend; ++i )
643 const bool containsDiagonal( row + i >= column );
644 const size_t index( ( containsDiagonal )?( row + i - column ):( 0UL ) );
646 const RhsIterator last( (~rhs).
end(i) );
647 RhsIterator element( (~rhs).lowerBound( i, index ) );
649 for( ; element!=last; ++element ) {
678 template<
typename MT1
682 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
683 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
696 const size_t M( (~rhs).
rows() );
697 const size_t N( (~rhs).
columns() );
699 if( row + 1UL >= column + N )
702 const size_t jbegin( ( row < column )?( 0UL ):( row - column ) );
704 for(
size_t j=jbegin; j<N; ++j )
706 const size_t index( column + j - row + 1UL );
707 const RhsIterator last( (~rhs).lowerBound(
min( index, M ), j ) );
709 for( RhsIterator element=(~rhs).
begin(j); element!=last; ++element ) {
738 template<
typename MT
743 inline bool tryAddAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
744 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
746 return tryAssign( lhs, ~rhs, row, column );
769 template<
typename MT1
774 inline bool tryAddAssign(
const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
775 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
777 return tryAssign( lhs, ~rhs, row, column );
800 template<
typename MT
805 inline bool trySubAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
806 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
808 return tryAssign( lhs, ~rhs, row, column );
831 template<
typename MT1
836 inline bool trySubAssign(
const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
837 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
839 return tryAssign( lhs, ~rhs, row, column );
859 template<
typename MT
862 inline MT& derestrict( StrictlyLowerMatrix<MT,SO,DF>& m )
880 template<
typename MT,
bool SO,
bool DF >
881 struct Rows< StrictlyLowerMatrix<MT,SO,DF> > :
public Rows<MT>
897 template<
typename MT,
bool SO,
bool DF >
898 struct Columns< StrictlyLowerMatrix<MT,SO,DF> > :
public Columns<MT>
914 template<
typename MT,
bool SO,
bool DF >
915 struct IsSquare< StrictlyLowerMatrix<MT,SO,DF> > :
public TrueType
931 template<
typename MT,
bool SO,
bool DF >
932 struct IsStrictlyLower< StrictlyLowerMatrix<MT,SO,DF> > :
public TrueType
948 template<
typename MT,
bool SO,
bool DF >
949 struct IsAdaptor< StrictlyLowerMatrix<MT,SO,DF> > :
public TrueType
965 template<
typename MT,
bool SO,
bool DF >
966 struct IsRestricted< StrictlyLowerMatrix<MT,SO,DF> > :
public TrueType
982 template<
typename MT,
bool SO >
983 struct HasConstDataAccess< StrictlyLowerMatrix<MT,SO,true> > :
public TrueType
999 template<
typename MT,
bool SO,
bool DF >
1000 struct IsAligned< StrictlyLowerMatrix<MT,SO,DF> > :
public BoolConstant< IsAligned<MT>::value >
1016 template<
typename MT,
bool SO,
bool DF >
1017 struct IsPadded< StrictlyLowerMatrix<MT,SO,DF> > :
public BoolConstant< IsPadded<MT>::value >
1033 template<
typename MT,
bool SO,
bool DF >
1034 struct IsResizable< StrictlyLowerMatrix<MT,SO,DF> > :
public BoolConstant< IsResizable<MT>::value >
1050 template<
typename MT,
bool SO,
bool DF >
1051 struct RemoveAdaptor< StrictlyLowerMatrix<MT,SO,DF> >
1069 template<
typename MT,
bool SO,
bool DF >
1070 struct DerestrictTrait< StrictlyLowerMatrix<MT,SO,DF> >
1088 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1089 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1091 using Type = AddTrait_< MT, StaticMatrix<T,M,N,SO2> >;
1094 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1095 struct AddTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1097 using Type = AddTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1100 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1101 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1103 using Type = AddTrait_< MT, HybridMatrix<T,M,N,SO2> >;
1106 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1107 struct AddTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1109 using Type = AddTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1112 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1113 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1115 using Type = AddTrait_< MT, DynamicMatrix<T,SO2> >;
1118 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1119 struct AddTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1121 using Type = AddTrait_< DynamicMatrix<T,SO1>, MT >;
1124 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1125 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1127 using Type = AddTrait_< MT, CustomMatrix<T,AF,PF,SO2> >;
1130 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1131 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1133 using Type = AddTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1136 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1137 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1139 using Type = AddTrait_< MT, CompressedMatrix<T,SO2> >;
1142 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1143 struct AddTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1145 using Type = AddTrait_< CompressedMatrix<T,SO1>, MT >;
1148 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1149 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1151 using Type = AddTrait_<MT1,MT2>;
1154 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1155 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1157 using Type = AddTrait_<MT1,MT2>;
1160 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1161 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1163 using Type = AddTrait_<MT1,MT2>;
1166 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1167 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1169 using Type = AddTrait_<MT1,MT2>;
1172 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1173 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1175 using Type = LowerMatrix< AddTrait_<MT1,MT2> >;
1178 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1179 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1181 using Type = LowerMatrix< AddTrait_<MT1,MT2> >;
1184 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1185 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1187 using Type = UniLowerMatrix< AddTrait_<MT1,MT2> >;
1190 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1191 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1193 using Type = UniLowerMatrix< AddTrait_<MT1,MT2> >;
1196 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1197 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1199 using Type = StrictlyLowerMatrix< AddTrait_<MT1,MT2> >;
1215 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1216 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1218 using Type = SubTrait_< MT, StaticMatrix<T,M,N,SO2> >;
1221 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1222 struct SubTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1224 using Type = SubTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1227 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1228 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1230 using Type = SubTrait_< MT, HybridMatrix<T,M,N,SO2> >;
1233 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1234 struct SubTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1236 using Type = SubTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1239 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1240 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1242 using Type = SubTrait_< MT, DynamicMatrix<T,SO2> >;
1245 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1246 struct SubTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1248 using Type = SubTrait_< DynamicMatrix<T,SO1>, MT >;
1251 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1252 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1254 using Type = SubTrait_< MT, CustomMatrix<T,AF,PF,SO2> >;
1257 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1258 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1260 using Type = SubTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1263 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1264 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1266 using Type = SubTrait_< MT, CompressedMatrix<T,SO2> >;
1269 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1270 struct SubTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1272 using Type = SubTrait_< CompressedMatrix<T,SO1>, MT >;
1275 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1276 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1278 using Type = SubTrait_<MT1,MT2>;
1281 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1282 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1284 using Type = SubTrait_<MT1,MT2>;
1287 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1288 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1290 using Type = SubTrait_<MT1,MT2>;
1293 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1294 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1296 using Type = SubTrait_<MT1,MT2>;
1299 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1300 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1302 using Type = LowerMatrix< SubTrait_<MT1,MT2> >;
1305 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1306 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1308 using Type = LowerMatrix< SubTrait_<MT1,MT2> >;
1311 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1312 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1314 using Type = LowerMatrix< SubTrait_<MT1,MT2> >;
1317 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1318 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1320 using Type = UniLowerMatrix< SubTrait_<MT1,MT2> >;
1323 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1324 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1326 using Type = StrictlyLowerMatrix< SubTrait_<MT1,MT2> >;
1342 template<
typename MT,
bool SO,
bool DF,
typename T >
1343 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, T,
EnableIf_< IsNumeric<T> > >
1345 using Type = StrictlyLowerMatrix< MultTrait_<MT,T> >;
1348 template<
typename T,
typename MT,
bool SO,
bool DF >
1349 struct MultTrait< T, StrictlyLowerMatrix<MT,SO,DF>,
EnableIf_< IsNumeric<T> > >
1351 using Type = StrictlyLowerMatrix< MultTrait_<T,MT> >;
1354 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
1355 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, StaticVector<T,N,false> >
1357 using Type = MultTrait_< MT, StaticVector<T,N,false> >;
1360 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
1361 struct MultTrait< StaticVector<T,N,true>, StrictlyLowerMatrix<MT,SO,DF> >
1363 using Type = MultTrait_< StaticVector<T,N,true>, MT >;
1366 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
1367 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, HybridVector<T,N,false> >
1369 using Type = MultTrait_< MT, HybridVector<T,N,false> >;
1372 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
1373 struct MultTrait< HybridVector<T,N,true>, StrictlyLowerMatrix<MT,SO,DF> >
1375 using Type = MultTrait_< HybridVector<T,N,true>, MT >;
1378 template<
typename MT,
bool SO,
bool DF,
typename T >
1379 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, DynamicVector<T,false> >
1381 using Type = MultTrait_< MT, DynamicVector<T,false> >;
1384 template<
typename T,
typename MT,
bool SO,
bool DF >
1385 struct MultTrait< DynamicVector<T,true>, StrictlyLowerMatrix<MT,SO,DF> >
1387 using Type = MultTrait_< DynamicVector<T,true>, MT >;
1390 template<
typename MT,
bool SO,
bool DF,
typename T,
bool AF,
bool PF >
1391 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
1393 using Type = MultTrait_< MT, CustomVector<T,AF,PF,false> >;
1396 template<
typename T,
bool AF,
bool PF,
typename MT,
bool SO,
bool DF >
1397 struct MultTrait< CustomVector<T,AF,PF,true>, StrictlyLowerMatrix<MT,SO,DF> >
1399 using Type = MultTrait_< CustomVector<T,AF,PF,true>, MT >;
1402 template<
typename MT,
bool SO,
bool DF,
typename T >
1403 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, CompressedVector<T,false> >
1405 using Type = MultTrait_< MT, CompressedVector<T,false> >;
1408 template<
typename T,
typename MT,
bool SO,
bool DF >
1409 struct MultTrait< CompressedVector<T,true>, StrictlyLowerMatrix<MT,SO,DF> >
1411 using Type = MultTrait_< CompressedVector<T,true>, MT >;
1414 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1415 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1417 using Type = MultTrait_< MT, StaticMatrix<T,M,N,SO2> >;
1420 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1421 struct MultTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1423 using Type = MultTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1426 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1427 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1429 using Type = MultTrait_< MT, HybridMatrix<T,M,N,SO2> >;
1432 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1433 struct MultTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1435 using Type = MultTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1438 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1439 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1441 using Type = MultTrait_< MT, DynamicMatrix<T,SO2> >;
1444 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1445 struct MultTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1447 using Type = MultTrait_< DynamicMatrix<T,SO1>, MT >;
1450 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1451 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1453 using Type = MultTrait_< MT, CustomMatrix<T,AF,PF,SO2> >;
1456 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1457 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1459 using Type = MultTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1462 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1463 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1465 using Type = MultTrait_< MT, CompressedMatrix<T,SO2> >;
1468 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1469 struct MultTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1471 using Type = MultTrait_< CompressedMatrix<T,SO1>, MT >;
1474 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1475 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1477 using Type = MultTrait_<MT1,MT2>;
1480 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1481 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1483 using Type = MultTrait_<MT1,MT2>;
1486 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1487 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1489 using Type = MultTrait_<MT1,MT2>;
1492 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1493 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1495 using Type = MultTrait_<MT1,MT2>;
1498 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1499 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1501 using Type = StrictlyLowerMatrix< MultTrait_<MT1,MT2> >;
1504 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1505 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1507 using Type = StrictlyLowerMatrix< MultTrait_<MT1,MT2> >;
1510 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1511 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1513 using Type = StrictlyLowerMatrix< MultTrait_<MT1,MT2> >;
1516 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1517 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1519 using Type = StrictlyLowerMatrix< MultTrait_<MT1,MT2> >;
1522 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1523 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1525 using Type = StrictlyLowerMatrix< MultTrait_<MT1,MT2> >;
1541 template<
typename MT,
bool SO,
bool DF,
typename T >
1542 struct DivTrait< StrictlyLowerMatrix<MT,SO,DF>, T,
EnableIf_< IsNumeric<T> > >
1544 using Type = StrictlyLowerMatrix< DivTrait_<MT,T> >;
1560 template<
typename MT,
bool SO,
bool DF >
1561 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Abs >
1563 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Abs> >;
1566 template<
typename MT,
bool SO,
bool DF >
1567 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Floor >
1569 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Floor> >;
1572 template<
typename MT,
bool SO,
bool DF >
1573 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Ceil >
1575 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Ceil> >;
1578 template<
typename MT,
bool SO,
bool DF >
1579 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Conj >
1581 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Conj> >;
1584 template<
typename MT,
bool SO,
bool DF >
1585 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Real >
1587 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Real> >;
1590 template<
typename MT,
bool SO,
bool DF >
1591 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Imag >
1593 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Imag> >;
1596 template<
typename MT,
bool SO,
bool DF >
1597 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Sin >
1599 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Sin> >;
1602 template<
typename MT,
bool SO,
bool DF >
1603 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Asin >
1605 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Asin> >;
1608 template<
typename MT,
bool SO,
bool DF >
1609 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Sinh >
1611 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Sinh> >;
1614 template<
typename MT,
bool SO,
bool DF >
1615 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Asinh >
1617 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Asinh> >;
1620 template<
typename MT,
bool SO,
bool DF >
1621 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Tan >
1623 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Tan> >;
1626 template<
typename MT,
bool SO,
bool DF >
1627 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Atan >
1629 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Atan> >;
1632 template<
typename MT,
bool SO,
bool DF >
1633 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Tanh >
1635 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Tanh> >;
1638 template<
typename MT,
bool SO,
bool DF >
1639 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Atanh >
1641 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Atanh> >;
1644 template<
typename MT,
bool SO,
bool DF >
1645 struct ForEachTrait< StrictlyLowerMatrix<MT,SO,DF>, Erf >
1647 using Type = StrictlyLowerMatrix< ForEachTrait_<MT,Erf> >;
1663 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1664 struct MathTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1666 using HighType = StrictlyLowerMatrix< typename MathTrait<MT1,MT2>::HighType >;
1667 using LowType = StrictlyLowerMatrix< typename MathTrait<MT1,MT2>::LowType >;
1683 template<
typename MT,
bool SO,
bool DF >
1684 struct SubmatrixTrait< StrictlyLowerMatrix<MT,SO,DF> >
1686 using Type = SubmatrixTrait_<MT>;
1702 template<
typename MT,
bool SO,
bool DF >
1703 struct RowTrait< StrictlyLowerMatrix<MT,SO,DF> >
1705 using Type = RowTrait_<MT>;
1721 template<
typename MT,
bool SO,
bool DF >
1722 struct ColumnTrait< StrictlyLowerMatrix<MT,SO,DF> >
1724 using Type = ColumnTrait_<MT>;
BoolConstant< false > FalseType
Type/value traits base class.The FalseType class is used as base class for type traits and value trai...
Definition: FalseType.h:61
Header file for the implementation of the base template of the UniLowerMatrix.
Header file for mathematical functions.
Header file for the Rows type trait.
Header file for the UNUSED_PARAMETER function template.
StrictlyLowerMatrix specialization for sparse matrices.
Header file for the subtraction trait.
Header file for the implementation of the base template of the StrictlyLowerMatrix.
Header file for the row trait.
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector) noexcept
Returns the current size/dimension of the vector.
Definition: Vector.h:258
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:188
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:1669
BoolConstant< true > TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: TrueType.h:61
DisableIf_< Or< IsComputation< MT >, IsTransExpr< 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:126
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:573
Header file for the IsSquare type trait.
Header file for the multiplication trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
StrictlyLowerMatrix specialization for dense matrices.
Header file for all forward declarations of the math module.
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2647
Header file for the Columns type trait.
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:330
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:254
Header file for the RemoveAdaptor type trait.
Constraint on the data type.
Header file for the EnableIf class template.
Header file for the IsStrictlyLower type trait.
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 DerestrictTrait class template.
Header file for the IsNumeric type trait.
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
DisableIf_< Or< IsComputation< MT >, IsTransExpr< 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:126
Header file for run time assertion macros.
Header file for the addition trait.
Header file for the division trait.
Header file for the submatrix trait.
Matrix adapter for strictly lower triangular matrices.
Definition: Forward.h:50
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:258
#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
IntegralConstant< bool, B > BoolConstant
Generic wrapper for a compile time constant boolean value.The BoolConstant class template represents ...
Definition: IntegralConstant.h:100
typename EnableIf< Condition, T >::Type EnableIf_
Auxiliary alias declaration for the EnableIf class template.The EnableIf_ alias declaration provides ...
Definition: EnableIf.h:223
Header file for the mathematical trait.
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:314
Header file for the implementation of the base template of the LowerMatrix.
Header file for the for-each trait.
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:240
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.
#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 TrueType type/value trait base class.
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is an identity matrix.
Definition: DenseMatrix.h:1593