35 #ifndef _BLAZE_MATH_ADAPTORS_STRICTLYLOWERMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_STRICTLYLOWERMATRIX_H_
90 template<
typename MT,
bool SO,
bool DF >
91 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m );
93 template<
typename MT,
bool SO,
bool DF >
94 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m,
size_t i );
96 template<
typename MT,
bool SO,
bool DF >
97 inline void clear( StrictlyLowerMatrix<MT,SO,DF>& m );
99 template<
typename MT,
bool SO,
bool DF >
100 inline bool isDefault(
const StrictlyLowerMatrix<MT,SO,DF>& m );
102 template<
typename MT,
bool SO,
bool DF >
103 inline bool isIntact(
const StrictlyLowerMatrix<MT,SO,DF>& m );
105 template<
typename MT,
bool SO,
bool DF >
106 inline void swap( StrictlyLowerMatrix<MT,SO,DF>& a, StrictlyLowerMatrix<MT,SO,DF>& b ) ;
118 template<
typename MT
141 template<
typename MT
158 template<
typename MT
179 template<
typename MT
182 inline bool isDefault_backend(
const StrictlyLowerMatrix<MT,SO,DF>& m,
TrueType )
184 return ( m.rows() == 0UL );
201 template<
typename MT
204 inline bool isDefault_backend(
const StrictlyLowerMatrix<MT,SO,DF>& m,
FalseType )
231 template<
typename MT
262 template<
typename MT
281 template<
typename MT
308 template<
typename MT
312 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
313 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
326 const size_t iend(
min( column - row + 1UL, (~rhs).
size() ) );
328 for(
size_t i=0UL; i<iend; ++i ) {
356 template<
typename MT
360 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
361 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
371 const size_t ibegin( ( row <= column )?( 0UL ):( row - column ) );
373 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
401 template<
typename MT
405 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
406 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
421 const RhsIterator last( (~rhs).lowerBound( column - row + 1UL ) );
423 for( RhsIterator element=(~rhs).
begin(); element!=last; ++element ) {
451 template<
typename MT
455 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
456 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
468 const RhsIterator last( (~rhs).
end() );
469 RhsIterator element( (~rhs).lowerBound( ( row <= column )?( 0UL ):( row - column ) ) );
471 for( ; element!=last; ++element ) {
499 template<
typename MT1
503 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
504 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
515 const size_t M( (~rhs).
rows() );
516 const size_t N( (~rhs).
columns() );
518 if( row + 1UL >= column + N )
521 const size_t iend(
min( column + N - row, M ) );
523 for(
size_t i=0UL; i<iend; ++i )
525 const bool containsDiagonal( row + i >= column );
526 const size_t jbegin( ( containsDiagonal )?( row + i - column ):( 0UL ) );
528 for(
size_t j=jbegin; j<N; ++j ) {
557 template<
typename MT1
561 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
562 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
573 const size_t M( (~rhs).
rows() );
574 const size_t N( (~rhs).
columns() );
576 if( row + 1UL >= column + N )
579 const size_t jbegin( ( row <= column )?( 0UL ):( row - column ) );
581 for(
size_t j=jbegin; j<N; ++j )
583 const size_t iend(
min( column + j - row + 1UL, M ) );
585 for(
size_t i=0UL; i<iend; ++i ) {
614 template<
typename MT1
618 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
619 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
632 const size_t M( (~rhs).
rows() );
633 const size_t N( (~rhs).
columns() );
635 if( row + 1UL >= column + N )
638 const size_t iend(
min( column + N - row, M ) );
640 for(
size_t i=0UL; i<iend; ++i )
642 const bool containsDiagonal( row + i >= column );
643 const size_t index( ( containsDiagonal )?( row + i - column ):( 0UL ) );
645 const RhsIterator last( (~rhs).
end(i) );
646 RhsIterator element( (~rhs).lowerBound( i, index ) );
648 for( ; element!=last; ++element ) {
677 template<
typename MT1
681 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
682 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
695 const size_t M( (~rhs).
rows() );
696 const size_t N( (~rhs).
columns() );
698 if( row + 1UL >= column + N )
701 const size_t jbegin( ( row < column )?( 0UL ):( row - column ) );
703 for(
size_t j=jbegin; j<N; ++j )
705 const size_t index( column + j - row + 1UL );
706 const RhsIterator last( (~rhs).lowerBound(
min( index, M ), j ) );
708 for( RhsIterator element=(~rhs).
begin(j); element!=last; ++element ) {
737 template<
typename MT
742 inline bool tryAddAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
743 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
745 return tryAssign( lhs, ~rhs, row, column );
768 template<
typename MT1
773 inline bool tryAddAssign(
const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
774 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
776 return tryAssign( lhs, ~rhs, row, column );
799 template<
typename MT
804 inline bool trySubAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
805 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
807 return tryAssign( lhs, ~rhs, row, column );
830 template<
typename MT1
835 inline bool trySubAssign(
const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
836 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
838 return tryAssign( lhs, ~rhs, row, column );
858 template<
typename MT
861 inline MT& derestrict( StrictlyLowerMatrix<MT,SO,DF>& m )
879 template<
typename MT,
bool SO,
bool DF >
880 struct Rows< StrictlyLowerMatrix<MT,SO,DF> > :
public Rows<MT>
896 template<
typename MT,
bool SO,
bool DF >
897 struct Columns< StrictlyLowerMatrix<MT,SO,DF> > :
public Columns<MT>
913 template<
typename MT,
bool SO,
bool DF >
914 struct IsSquare< StrictlyLowerMatrix<MT,SO,DF> > :
public IsTrue<true>
930 template<
typename MT,
bool SO,
bool DF >
931 struct IsStrictlyLower< StrictlyLowerMatrix<MT,SO,DF> > :
public IsTrue<true>
947 template<
typename MT,
bool SO,
bool DF >
948 struct IsAdaptor< StrictlyLowerMatrix<MT,SO,DF> > :
public IsTrue<true>
964 template<
typename MT,
bool SO,
bool DF >
965 struct IsRestricted< StrictlyLowerMatrix<MT,SO,DF> > :
public IsTrue<true>
981 template<
typename MT,
bool SO >
982 struct HasConstDataAccess< StrictlyLowerMatrix<MT,SO,true> > :
public IsTrue<true>
998 template<
typename MT,
bool SO,
bool DF >
999 struct IsAligned< StrictlyLowerMatrix<MT,SO,DF> > :
public IsTrue< IsAligned<MT>::value >
1015 template<
typename MT,
bool SO,
bool DF >
1016 struct IsPadded< StrictlyLowerMatrix<MT,SO,DF> > :
public IsTrue< IsPadded<MT>::value >
1032 template<
typename MT,
bool SO,
bool DF >
1033 struct IsResizable< StrictlyLowerMatrix<MT,SO,DF> > :
public IsTrue< IsResizable<MT>::value >
1049 template<
typename MT,
bool SO,
bool DF >
1050 struct RemoveAdaptor< StrictlyLowerMatrix<MT,SO,DF> >
1068 template<
typename MT,
bool SO,
bool DF >
1069 struct DerestrictTrait< StrictlyLowerMatrix<MT,SO,DF> >
1087 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1088 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1090 typedef typename AddTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
1093 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1094 struct AddTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1096 typedef typename AddTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
1099 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1100 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1102 typedef typename AddTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
1105 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1106 struct AddTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1108 typedef typename AddTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
1111 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1112 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1114 typedef typename AddTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
1117 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1118 struct AddTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1120 typedef typename AddTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
1123 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1124 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1126 typedef typename AddTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
1129 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1130 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1132 typedef typename AddTrait< CustomMatrix<T,AF,PF,SO1>, MT >::Type Type;
1135 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1136 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1138 typedef typename AddTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
1141 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1142 struct AddTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1144 typedef typename AddTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
1147 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1148 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1150 typedef typename AddTrait<MT1,MT2>::Type Type;
1153 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1154 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1156 typedef typename AddTrait<MT1,MT2>::Type Type;
1159 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1160 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1162 typedef typename AddTrait<MT1,MT2>::Type Type;
1165 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1166 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1168 typedef typename AddTrait<MT1,MT2>::Type Type;
1171 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1172 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1174 typedef LowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
1177 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1178 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1180 typedef LowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
1183 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1184 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1186 typedef UniLowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
1189 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1190 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1192 typedef UniLowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
1195 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1196 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1198 typedef StrictlyLowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
1214 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1215 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1217 typedef typename SubTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
1220 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1221 struct SubTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1223 typedef typename SubTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
1226 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1227 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1229 typedef typename SubTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
1232 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1233 struct SubTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1235 typedef typename SubTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
1238 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1239 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1241 typedef typename SubTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
1244 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1245 struct SubTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1247 typedef typename SubTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
1250 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1251 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1253 typedef typename SubTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
1256 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1257 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1259 typedef typename SubTrait< CustomMatrix<T,AF,PF,SO1>, MT >::Type Type;
1262 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1263 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1265 typedef typename SubTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
1268 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1269 struct SubTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1271 typedef typename SubTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
1274 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1275 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1277 typedef typename SubTrait<MT1,MT2>::Type Type;
1280 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1281 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1283 typedef typename SubTrait<MT1,MT2>::Type Type;
1286 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1287 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1289 typedef typename SubTrait<MT1,MT2>::Type Type;
1292 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1293 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1295 typedef typename SubTrait<MT1,MT2>::Type Type;
1298 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1299 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1301 typedef LowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
1304 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1305 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1307 typedef LowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
1310 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1311 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1313 typedef LowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
1316 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1317 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1319 typedef UniLowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
1322 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1323 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1325 typedef StrictlyLowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
1341 template<
typename MT,
bool SO,
bool DF,
typename T >
1342 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, T, typename EnableIf< IsNumeric<T> >::Type >
1344 typedef StrictlyLowerMatrix< typename MultTrait<MT,T>::Type > Type;
1347 template<
typename T,
typename MT,
bool SO,
bool DF >
1348 struct MultTrait< T, StrictlyLowerMatrix<MT,SO,DF>, typename EnableIf< IsNumeric<T> >::Type >
1350 typedef StrictlyLowerMatrix< typename MultTrait<T,MT>::Type > Type;
1353 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
1354 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, StaticVector<T,N,false> >
1356 typedef typename MultTrait< MT, StaticVector<T,N,false> >::Type Type;
1359 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
1360 struct MultTrait< StaticVector<T,N,true>, StrictlyLowerMatrix<MT,SO,DF> >
1362 typedef typename MultTrait< StaticVector<T,N,true>, MT >::Type Type;
1365 template<
typename MT,
bool SO,
bool DF,
typename T,
size_t N >
1366 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, HybridVector<T,N,false> >
1368 typedef typename MultTrait< MT, HybridVector<T,N,false> >::Type Type;
1371 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF >
1372 struct MultTrait< HybridVector<T,N,true>, StrictlyLowerMatrix<MT,SO,DF> >
1374 typedef typename MultTrait< HybridVector<T,N,true>, MT >::Type Type;
1377 template<
typename MT,
bool SO,
bool DF,
typename T >
1378 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, DynamicVector<T,false> >
1380 typedef typename MultTrait< MT, DynamicVector<T,false> >::Type Type;
1383 template<
typename T,
typename MT,
bool SO,
bool DF >
1384 struct MultTrait< DynamicVector<T,true>, StrictlyLowerMatrix<MT,SO,DF> >
1386 typedef typename MultTrait< DynamicVector<T,true>, MT >::Type Type;
1389 template<
typename MT,
bool SO,
bool DF,
typename T,
bool AF,
bool PF >
1390 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
1392 typedef typename MultTrait< MT, CustomVector<T,AF,PF,false> >::Type Type;
1395 template<
typename T,
bool AF,
bool PF,
typename MT,
bool SO,
bool DF >
1396 struct MultTrait< CustomVector<T,AF,PF,true>, StrictlyLowerMatrix<MT,SO,DF> >
1398 typedef typename MultTrait< CustomVector<T,AF,PF,true>, MT >::Type Type;
1401 template<
typename MT,
bool SO,
bool DF,
typename T >
1402 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, CompressedVector<T,false> >
1404 typedef typename MultTrait< MT, CompressedVector<T,false> >::Type Type;
1407 template<
typename T,
typename MT,
bool SO,
bool DF >
1408 struct MultTrait< CompressedVector<T,true>, StrictlyLowerMatrix<MT,SO,DF> >
1410 typedef typename MultTrait< CompressedVector<T,true>, MT >::Type Type;
1413 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1414 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1416 typedef typename MultTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
1419 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1420 struct MultTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1422 typedef typename MultTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
1425 template<
typename MT,
bool SO1,
bool DF,
typename T,
size_t M,
size_t N,
bool SO2 >
1426 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1428 typedef typename MultTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
1431 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF >
1432 struct MultTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1434 typedef typename MultTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
1437 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1438 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1440 typedef typename MultTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
1443 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1444 struct MultTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1446 typedef typename MultTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
1449 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool AF,
bool PF,
bool SO2 >
1450 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1452 typedef typename MultTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
1455 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF >
1456 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1458 typedef typename MultTrait< CustomMatrix<T,AF,PF,SO1>, MT >::Type Type;
1461 template<
typename MT,
bool SO1,
bool DF,
typename T,
bool SO2 >
1462 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1464 typedef typename MultTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
1467 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF >
1468 struct MultTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1470 typedef typename MultTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
1473 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2,
bool NF >
1474 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1476 typedef typename MultTrait<MT1,MT2>::Type Type;
1479 template<
typename MT1,
bool SO1,
bool DF1,
bool NF,
typename MT2,
bool SO2,
bool DF2 >
1480 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1482 typedef typename MultTrait<MT1,MT2>::Type Type;
1485 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1486 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1488 typedef typename MultTrait<MT1,MT2>::Type Type;
1491 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1492 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1494 typedef typename MultTrait<MT1,MT2>::Type Type;
1497 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1498 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1500 typedef StrictlyLowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
1503 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1504 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1506 typedef StrictlyLowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
1509 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1510 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1512 typedef StrictlyLowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
1515 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1516 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1518 typedef StrictlyLowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
1521 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1522 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1524 typedef StrictlyLowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
1540 template<
typename MT,
bool SO,
bool DF,
typename T >
1541 struct DivTrait< StrictlyLowerMatrix<MT,SO,DF>, T, typename EnableIf< IsNumeric<T> >::Type >
1543 typedef StrictlyLowerMatrix< typename DivTrait<MT,T>::Type > Type;
1559 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
1560 struct MathTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1562 typedef StrictlyLowerMatrix< typename MathTrait<MT1,MT2>::HighType > HighType;
1563 typedef StrictlyLowerMatrix< typename MathTrait<MT1,MT2>::LowType > LowType;
1579 template<
typename MT,
bool SO,
bool DF >
1580 struct SubmatrixTrait< StrictlyLowerMatrix<MT,SO,DF> >
1582 typedef typename SubmatrixTrait<MT>::Type Type;
1598 template<
typename MT,
bool SO,
bool DF >
1599 struct RowTrait< StrictlyLowerMatrix<MT,SO,DF> >
1601 typedef typename RowTrait<MT>::Type Type;
1617 template<
typename MT,
bool SO,
bool DF >
1618 struct ColumnTrait< StrictlyLowerMatrix<MT,SO,DF> >
1620 typedef typename ColumnTrait<MT>::Type Type;
Header file for mathematical functions.
Header file for the Rows type trait.
Header file for the UNUSED_PARAMETER function template.
Header file for the subtraction trait.
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector)
Returns the current size/dimension of the vector.
Definition: Vector.h:252
Header file for the row trait.
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:250
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:507
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix)
Returns the current number of rows of the matrix.
Definition: Matrix.h:308
DisableIf< Or< IsComputation< MT >, IsTransExpr< MT > >, typename ColumnExprTrait< MT >::Type >::Type column(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific column of the given matrix.
Definition: Column.h:107
void UNUSED_PARAMETER(const T1 &)
Suppression of unused parameter warnings.
Definition: Unused.h:81
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:547
Header file for the IsSquare type trait.
Header file for the multiplication trait.
Header file for the implementation of the base template of the LowerMatrix.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for all forward declarations of the math module.
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2592
const MT::ElementType min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1682
Header file for the Columns type trait.
StrictlyLowerMatrix specialization for sparse matrices.
Header file for the IsAligned type trait.
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:187
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:527
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 > >, typename RowExprTrait< MT >::Type >::Type row(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific row of the given matrix.
Definition: Row.h:107
Header file for run time assertion macros.
Header file for the addition trait.
StrictlyLowerMatrix specialization for dense matrices.
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.
#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:118
void swap(DiagonalMatrix< MT, SO, DF > &a, DiagonalMatrix< MT, SO, DF > &b)
Swapping the contents of two matrices.
Definition: DiagonalMatrix.h:256
Header file for the mathematical trait.
boost::false_type 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 IsTrue value trait.
BLAZE_ALWAYS_INLINE size_t columns(const Matrix< MT, SO > &matrix)
Returns the current number of columns of the matrix.
Definition: Matrix.h:324
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:237
boost::true_type TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: TrueType.h:61
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
Header file for the implementation of the base template of the StrictlyLowerMatrix.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is an identity matrix.
Definition: DenseMatrix.h:1605
Header file for the implementation of the base template of the UniLowerMatrix.