StrictlyLowerMatrix.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_ADAPTORS_STRICTLYLOWERMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_STRICTLYLOWERMATRIX_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
47 #include <blaze/math/Forward.h>
82 #include <blaze/util/Assert.h>
83 #include <blaze/util/EnableIf.h>
84 #include <blaze/util/TrueType.h>
86 #include <blaze/util/Unused.h>
87 
88 
89 namespace blaze {
90 
91 //=================================================================================================
92 //
93 // STRICTLYLOWERMATRIX OPERATORS
94 //
95 //=================================================================================================
96 
97 //*************************************************************************************************
100 template< typename MT, bool SO, bool DF >
101 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m );
102 
103 template< typename MT, bool SO, bool DF >
104 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m, size_t i );
105 
106 template< typename MT, bool SO, bool DF >
107 inline void clear( StrictlyLowerMatrix<MT,SO,DF>& m );
108 
109 template< bool RF, typename MT, bool SO, bool DF >
110 inline bool isDefault( const StrictlyLowerMatrix<MT,SO,DF>& m );
111 
112 template< typename MT, bool SO, bool DF >
113 inline bool isIntact( const StrictlyLowerMatrix<MT,SO,DF>& m );
114 
115 template< typename MT, bool SO, bool DF >
116 inline void swap( StrictlyLowerMatrix<MT,SO,DF>& a, StrictlyLowerMatrix<MT,SO,DF>& b ) noexcept;
118 //*************************************************************************************************
119 
120 
121 //*************************************************************************************************
128 template< typename MT // Type of the adapted matrix
129  , bool SO // Storage order of the adapted matrix
130  , bool DF > // Density flag
132 {
133  m.reset();
134 }
135 //*************************************************************************************************
136 
137 
138 //*************************************************************************************************
151 template< typename MT // Type of the adapted matrix
152  , bool SO // Storage order of the adapted matrix
153  , bool DF > // Density flag
154 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m, size_t i )
155 {
156  m.reset( i );
157 }
158 //*************************************************************************************************
159 
160 
161 //*************************************************************************************************
168 template< typename MT // Type of the adapted matrix
169  , bool SO // Storage order of the adapted matrix
170  , bool DF > // Density flag
172 {
173  m.clear();
174 }
175 //*************************************************************************************************
176 
177 
178 //*************************************************************************************************
189 template< bool RF // Relaxation flag
190  , typename MT // Type of the adapted matrix
191  , bool SO // Storage order of the adapted matrix
192  , bool DF > // Density flag
193 inline bool isDefault_backend( const StrictlyLowerMatrix<MT,SO,DF>& m, TrueType )
194 {
195  return ( m.rows() == 0UL );
196 }
198 //*************************************************************************************************
199 
200 
201 //*************************************************************************************************
212 template< bool RF // Relaxation flag
213  , typename MT // Type of the adapted matrix
214  , bool SO // Storage order of the adapted matrix
215  , bool DF > // Density flag
216 inline bool isDefault_backend( const StrictlyLowerMatrix<MT,SO,DF>& m, FalseType )
217 {
218  if( SO ) {
219  for( size_t j=0UL; j<m.columns(); ++j ) {
220  for( size_t i=j+1UL; i<m.rows(); ++i ) {
221  if( !isDefault<RF>( m(i,j) ) )
222  return false;
223  }
224  }
225  }
226  else {
227  for( size_t i=1UL; i<m.rows(); ++i ) {
228  for( size_t j=0UL; j<i; ++j ) {
229  if( !isDefault<RF>( m(i,j) ) )
230  return false;
231  }
232  }
233  }
234 
235  return true;
236 }
238 //*************************************************************************************************
239 
240 
241 //*************************************************************************************************
267 template< bool RF // Relaxation flag
268  , typename MT // Type of the adapted matrix
269  , bool SO // Storage order of the adapted matrix
270  , bool DF > // Density flag
272 {
273  return isDefault_backend<RF>( m, typename IsResizable<MT>::Type() );
274 }
275 //*************************************************************************************************
276 
277 
278 //*************************************************************************************************
299 template< typename MT // Type of the adapted matrix
300  , bool SO // Storage order of the adapted matrix
301  , bool DF > // Density flag
303 {
304  return m.isIntact();
305 }
306 //*************************************************************************************************
307 
308 
309 //*************************************************************************************************
317 template< typename MT // Type of the adapted matrix
318  , bool SO // Storage order of the adapted matrix
319  , bool DF > // Density flag
321 {
322  a.swap( b );
323 }
324 //*************************************************************************************************
325 
326 
327 //*************************************************************************************************
343 template< typename MT // Type of the adapted matrix
344  , bool SO // Storage order of the adapted matrix
345  , bool DF // Density flag
346  , typename ET > // Type of the element
347 inline bool trySet( const StrictlyLowerMatrix<MT,SO,DF>& mat, size_t i, size_t j, const ET& value )
348 {
349  BLAZE_INTERNAL_ASSERT( i < (~mat).rows(), "Invalid row access index" );
350  BLAZE_INTERNAL_ASSERT( j < (~mat).columns(), "Invalid column access index" );
351 
352  UNUSED_PARAMETER( mat );
353 
354  return ( i > j || isDefault( value ) );
355 }
357 //*************************************************************************************************
358 
359 
360 //*************************************************************************************************
376 template< typename MT // Type of the adapted matrix
377  , bool SO // Storage order of the adapted matrix
378  , bool DF // Density flag
379  , typename ET > // Type of the element
380 inline bool tryAdd( const StrictlyLowerMatrix<MT,SO,DF>& mat, size_t i, size_t j, const ET& value )
381 {
382  return trySet( mat, i, j, value );
383 }
385 //*************************************************************************************************
386 
387 
388 //*************************************************************************************************
404 template< typename MT // Type of the adapted matrix
405  , bool SO // Storage order of the adapted matrix
406  , bool DF // Density flag
407  , typename ET > // Type of the element
408 inline bool trySub( const StrictlyLowerMatrix<MT,SO,DF>& mat, size_t i, size_t j, const ET& value )
409 {
410  return trySet( mat, i, j, value );
411 }
413 //*************************************************************************************************
414 
415 
416 //*************************************************************************************************
433 template< typename MT // Type of the adapted matrix
434  , bool SO // Storage order of the adapted matrix
435  , bool DF // Density flag
436  , typename VT > // Type of the right-hand side dense vector
437 inline bool tryAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
438  const DenseVector<VT,false>& rhs, size_t row, size_t column )
439 {
441 
442  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
443  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
444  BLAZE_INTERNAL_ASSERT( row + (~rhs).size() <= lhs.rows(), "Invalid number of rows" );
445 
446  UNUSED_PARAMETER( lhs );
447 
448  if( column < row )
449  return true;
450 
451  const size_t iend( min( column - row + 1UL, (~rhs).size() ) );
452 
453  for( size_t i=0UL; i<iend; ++i ) {
454  if( !isDefault( (~rhs)[i] ) )
455  return false;
456  }
457 
458  return true;
459 }
461 //*************************************************************************************************
462 
463 
464 //*************************************************************************************************
481 template< typename MT // Type of the adapted matrix
482  , bool SO // Storage order of the adapted matrix
483  , bool DF // Density flag
484  , typename VT > // Type of the right-hand side dense vector
485 inline bool tryAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
486  const DenseVector<VT,true>& rhs, size_t row, size_t column )
487 {
489 
490  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
491  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
492  BLAZE_INTERNAL_ASSERT( column + (~rhs).size() <= lhs.columns(), "Invalid number of columns" );
493 
494  UNUSED_PARAMETER( lhs );
495 
496  const size_t ibegin( ( row <= column )?( 0UL ):( row - column ) );
497 
498  for( size_t i=ibegin; i<(~rhs).size(); ++i ) {
499  if( !isDefault( (~rhs)[i] ) )
500  return false;
501  }
502 
503  return true;
504 }
506 //*************************************************************************************************
507 
508 
509 //*************************************************************************************************
527 template< typename MT // Type of the adapted matrix
528  , bool SO // Storage order of the adapted matrix
529  , bool DF // Density flag
530  , typename VT // Type of the right-hand side dense vector
531  , bool TF > // Transpose flag of the right-hand side dense vector
532 inline bool tryAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs, const DenseVector<VT,TF>& rhs,
533  ptrdiff_t band, size_t row, size_t column )
534 {
536 
537  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
538  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
539  BLAZE_INTERNAL_ASSERT( row + (~rhs).size() <= lhs.rows(), "Invalid number of rows" );
540  BLAZE_INTERNAL_ASSERT( column + (~rhs).size() <= lhs.columns(), "Invalid number of columns" );
541 
542  UNUSED_PARAMETER( lhs, row, column );
543 
544  if( band >= 0L ) {
545  for( size_t i=0UL; i<(~rhs).size(); ++i ) {
546  if( !isDefault( (~rhs)[i] ) )
547  return false;
548  }
549  }
550 
551  return true;
552 }
554 //*************************************************************************************************
555 
556 
557 //*************************************************************************************************
574 template< typename MT // Type of the adapted matrix
575  , bool SO // Storage order of the adapted matrix
576  , bool DF // Density flag
577  , typename VT > // Type of the right-hand side sparse vector
578 inline bool tryAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
579  const SparseVector<VT,false>& rhs, size_t row, size_t column )
580 {
582 
583  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
584  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
585  BLAZE_INTERNAL_ASSERT( row + (~rhs).size() <= lhs.rows(), "Invalid number of rows" );
586 
587  UNUSED_PARAMETER( lhs );
588 
589  using RhsIterator = typename VT::ConstIterator;
590 
591  if( column < row )
592  return true;
593 
594  const RhsIterator last( (~rhs).lowerBound( column - row + 1UL ) );
595 
596  for( RhsIterator element=(~rhs).begin(); element!=last; ++element ) {
597  if( !isDefault( element->value() ) )
598  return false;
599  }
600 
601  return true;
602 }
604 //*************************************************************************************************
605 
606 
607 //*************************************************************************************************
624 template< typename MT // Type of the adapted matrix
625  , bool SO // Storage order of the adapted matrix
626  , bool DF // Density flag
627  , typename VT > // Type of the right-hand side sparse vector
628 inline bool tryAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
629  const SparseVector<VT,true>& rhs, size_t row, size_t column )
630 {
632 
633  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
634  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
635  BLAZE_INTERNAL_ASSERT( column + (~rhs).size() <= lhs.columns(), "Invalid number of columns" );
636 
637  UNUSED_PARAMETER( lhs );
638 
639  using RhsIterator = typename VT::ConstIterator;
640 
641  const RhsIterator last( (~rhs).end() );
642  RhsIterator element( (~rhs).lowerBound( ( row <= column )?( 0UL ):( row - column ) ) );
643 
644  for( ; element!=last; ++element ) {
645  if( !isDefault( element->value() ) )
646  return false;
647  }
648 
649  return true;
650 }
652 //*************************************************************************************************
653 
654 
655 //*************************************************************************************************
673 template< typename MT // Type of the adapted matrix
674  , bool SO // Storage order of the adapted matrix
675  , bool DF // Density flag
676  , typename VT // Type of the right-hand side sparse vector
677  , bool TF > // Transpose flag of the right-hand side sparse vector
678 inline bool tryAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs, const SparseVector<VT,TF>& rhs,
679  ptrdiff_t band, size_t row, size_t column )
680 {
682 
683  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
684  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
685  BLAZE_INTERNAL_ASSERT( row + (~rhs).size() <= lhs.rows(), "Invalid number of rows" );
686  BLAZE_INTERNAL_ASSERT( column + (~rhs).size() <= lhs.columns(), "Invalid number of columns" );
687 
688  UNUSED_PARAMETER( lhs, row, column );
689 
690  if( band >= 0L ) {
691  for( const auto& element : ~rhs ) {
692  if( !isDefault( element.value() ) )
693  return false;
694  }
695  }
696 
697  return true;
698 }
700 //*************************************************************************************************
701 
702 
703 //*************************************************************************************************
720 template< typename MT1 // Type of the adapted matrix
721  , bool SO // Storage order of the adapted matrix
722  , bool DF // Density flag
723  , typename MT2 > // Type of the right-hand side dense matrix
724 inline bool tryAssign( const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
725  const DenseMatrix<MT2,false>& rhs, size_t row, size_t column )
726 {
728 
729  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
730  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
731  BLAZE_INTERNAL_ASSERT( row + (~rhs).rows() <= lhs.rows(), "Invalid number of rows" );
732  BLAZE_INTERNAL_ASSERT( column + (~rhs).columns() <= lhs.columns(), "Invalid number of columns" );
733 
734  UNUSED_PARAMETER( lhs );
735 
736  const size_t M( (~rhs).rows() );
737  const size_t N( (~rhs).columns() );
738 
739  if( row >= column + N )
740  return true;
741 
742  const size_t iend( min( column + N - row, M ) );
743 
744  for( size_t i=0UL; i<iend; ++i )
745  {
746  const bool containsDiagonal( row + i >= column );
747  const size_t jbegin( ( containsDiagonal )?( row + i - column ):( 0UL ) );
748 
749  for( size_t j=jbegin; j<N; ++j ) {
750  if( !isDefault( (~rhs)(i,j) ) )
751  return false;
752  }
753  }
754 
755  return true;
756 }
758 //*************************************************************************************************
759 
760 
761 //*************************************************************************************************
778 template< typename MT1 // Type of the adapted matrix
779  , bool SO // Storage order of the adapted matrix
780  , bool DF // Density flag
781  , typename MT2 > // Type of the right-hand side dense matrix
782 inline bool tryAssign( const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
783  const DenseMatrix<MT2,true>& rhs, size_t row, size_t column )
784 {
786 
787  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
788  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
789  BLAZE_INTERNAL_ASSERT( row + (~rhs).rows() <= lhs.rows(), "Invalid number of rows" );
790  BLAZE_INTERNAL_ASSERT( column + (~rhs).columns() <= lhs.columns(), "Invalid number of columns" );
791 
792  UNUSED_PARAMETER( lhs );
793 
794  const size_t M( (~rhs).rows() );
795  const size_t N( (~rhs).columns() );
796 
797  if( row >= column + N )
798  return true;
799 
800  const size_t jbegin( ( row <= column )?( 0UL ):( row - column ) );
801 
802  for( size_t j=jbegin; j<N; ++j )
803  {
804  const size_t iend( min( column + j - row + 1UL, M ) );
805 
806  for( size_t i=0UL; i<iend; ++i ) {
807  if( !isDefault( (~rhs)(i,j) ) )
808  return false;
809  }
810  }
811 
812  return true;
813 }
815 //*************************************************************************************************
816 
817 
818 //*************************************************************************************************
835 template< typename MT1 // Type of the adapted matrix
836  , bool SO // Storage order of the adapted matrix
837  , bool DF // Density flag
838  , typename MT2 > // Type of the right-hand side sparse matrix
839 inline bool tryAssign( const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
840  const SparseMatrix<MT2,false>& rhs, size_t row, size_t column )
841 {
843 
844  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
845  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
846  BLAZE_INTERNAL_ASSERT( row + (~rhs).rows() <= lhs.rows(), "Invalid number of rows" );
847  BLAZE_INTERNAL_ASSERT( column + (~rhs).columns() <= lhs.columns(), "Invalid number of columns" );
848 
849  UNUSED_PARAMETER( lhs );
850 
851  using RhsIterator = typename MT2::ConstIterator;
852 
853  const size_t M( (~rhs).rows() );
854  const size_t N( (~rhs).columns() );
855 
856  if( row >= column + N )
857  return true;
858 
859  const size_t iend( min( column + N - row, M ) );
860 
861  for( size_t i=0UL; i<iend; ++i )
862  {
863  const bool containsDiagonal( row + i >= column );
864  const size_t index( ( containsDiagonal )?( row + i - column ):( 0UL ) );
865 
866  const RhsIterator last( (~rhs).end(i) );
867  RhsIterator element( (~rhs).lowerBound( i, index ) );
868 
869  for( ; element!=last; ++element ) {
870  if( !isDefault( element->value() ) )
871  return false;
872  }
873  }
874 
875  return true;
876 }
878 //*************************************************************************************************
879 
880 
881 //*************************************************************************************************
898 template< typename MT1 // Type of the adapted matrix
899  , bool SO // Storage order of the adapted matrix
900  , bool DF // Density flag
901  , typename MT2 > // Type of the right-hand side sparse matrix
902 inline bool tryAssign( const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
903  const SparseMatrix<MT2,true>& rhs, size_t row, size_t column )
904 {
906 
907  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
908  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
909  BLAZE_INTERNAL_ASSERT( row + (~rhs).rows() <= lhs.rows(), "Invalid number of rows" );
910  BLAZE_INTERNAL_ASSERT( column + (~rhs).columns() <= lhs.columns(), "Invalid number of columns" );
911 
912  UNUSED_PARAMETER( lhs );
913 
914  using RhsIterator = typename MT2::ConstIterator;
915 
916  const size_t M( (~rhs).rows() );
917  const size_t N( (~rhs).columns() );
918 
919  if( row >= column + N )
920  return true;
921 
922  const size_t jbegin( ( row < column )?( 0UL ):( row - column ) );
923 
924  for( size_t j=jbegin; j<N; ++j )
925  {
926  const size_t index( column + j - row + 1UL );
927  const RhsIterator last( (~rhs).lowerBound( min( index, M ), j ) );
928 
929  for( RhsIterator element=(~rhs).begin(j); element!=last; ++element ) {
930  if( !isDefault( element->value() ) )
931  return false;
932  }
933  }
934 
935  return true;
936 }
938 //*************************************************************************************************
939 
940 
941 //*************************************************************************************************
958 template< typename MT // Type of the adapted matrix
959  , bool SO // Storage order of the adapted matrix
960  , bool DF // Density flag
961  , typename VT // Type of the right-hand side vector
962  , bool TF > // Transpose flag of the right-hand side vector
963 inline bool tryAddAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
964  const Vector<VT,TF>& rhs, size_t row, size_t column )
965 {
966  return tryAssign( lhs, ~rhs, row, column );
967 }
969 //*************************************************************************************************
970 
971 
972 //*************************************************************************************************
990 template< typename MT // Type of the adapted matrix
991  , bool SO // Storage order of the adapted matrix
992  , bool DF // Density flag
993  , typename VT // Type of the right-hand side vector
994  , bool TF > // Transpose flag of the right-hand side vector
995 inline bool tryAddAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs, const Vector<VT,TF>& rhs,
996  ptrdiff_t band, size_t row, size_t column )
997 {
998  return tryAssign( lhs, ~rhs, band, row, column );
999 }
1001 //*************************************************************************************************
1002 
1003 
1004 //*************************************************************************************************
1021 template< typename MT1 // Type of the adapted matrix
1022  , bool SO1 // Storage order of the adapted matrix
1023  , bool DF // Density flag
1024  , typename MT2 // Type of the right-hand side matrix
1025  , bool SO2 > // Storage order of the right-hand side matrix
1026 inline bool tryAddAssign( const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
1027  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
1028 {
1029  return tryAssign( lhs, ~rhs, row, column );
1030 }
1032 //*************************************************************************************************
1033 
1034 
1035 //*************************************************************************************************
1052 template< typename MT // Type of the adapted matrix
1053  , bool SO // Storage order of the adapted matrix
1054  , bool DF // Density flag
1055  , typename VT // Type of the right-hand side vector
1056  , bool TF > // Transpose flag of the right-hand side vector
1057 inline bool trySubAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
1058  const Vector<VT,TF>& rhs, size_t row, size_t column )
1059 {
1060  return tryAssign( lhs, ~rhs, row, column );
1061 }
1063 //*************************************************************************************************
1064 
1065 
1066 //*************************************************************************************************
1084 template< typename MT // Type of the adapted matrix
1085  , bool SO // Storage order of the adapted matrix
1086  , bool DF // Density flag
1087  , typename VT // Type of the right-hand side vector
1088  , bool TF > // Transpose flag of the right-hand side vector
1089 inline bool trySubAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs, const Vector<VT,TF>& rhs,
1090  ptrdiff_t band, size_t row, size_t column )
1091 {
1092  return tryAssign( lhs, ~rhs, band, row, column );
1093 }
1095 //*************************************************************************************************
1096 
1097 
1098 //*************************************************************************************************
1115 template< typename MT1 // Type of the adapted matrix
1116  , bool SO1 // Storage order of the adapted matrix
1117  , bool DF // Density flag
1118  , typename MT2 // Type of the right-hand side matrix
1119  , bool SO2 > // Storage order of the right-hand side matrix
1120 inline bool trySubAssign( const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
1121  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
1122 {
1123  return tryAssign( lhs, ~rhs, row, column );
1124 }
1126 //*************************************************************************************************
1127 
1128 
1129 //*************************************************************************************************
1143 template< typename MT // Type of the adapted matrix
1144  , bool SO // Storage order of the adapted matrix
1145  , bool DF > // Density flag
1146 inline MT& derestrict( StrictlyLowerMatrix<MT,SO,DF>& m )
1147 {
1148  return m.matrix_;
1149 }
1151 //*************************************************************************************************
1152 
1153 
1154 
1155 
1156 //=================================================================================================
1157 //
1158 // SIZE SPECIALIZATIONS
1159 //
1160 //=================================================================================================
1161 
1162 //*************************************************************************************************
1164 template< typename MT, bool SO, bool DF >
1165 struct Size< StrictlyLowerMatrix<MT,SO,DF>, 0UL >
1166  : public Size<MT,0UL>
1167 {};
1168 
1169 template< typename MT, bool SO, bool DF >
1170 struct Size< StrictlyLowerMatrix<MT,SO,DF>, 1UL >
1171  : public Size<MT,1UL>
1172 {};
1174 //*************************************************************************************************
1175 
1176 
1177 
1178 
1179 //=================================================================================================
1180 //
1181 // ISSQUARE SPECIALIZATIONS
1182 //
1183 //=================================================================================================
1184 
1185 //*************************************************************************************************
1187 template< typename MT, bool SO, bool DF >
1188 struct IsSquare< StrictlyLowerMatrix<MT,SO,DF> >
1189  : public TrueType
1190 {};
1192 //*************************************************************************************************
1193 
1194 
1195 
1196 
1197 //=================================================================================================
1198 //
1199 // ISSTRICTLYLOWER SPECIALIZATIONS
1200 //
1201 //=================================================================================================
1202 
1203 //*************************************************************************************************
1205 template< typename MT, bool SO, bool DF >
1206 struct IsStrictlyLower< StrictlyLowerMatrix<MT,SO,DF> >
1207  : public TrueType
1208 {};
1210 //*************************************************************************************************
1211 
1212 
1213 
1214 
1215 //=================================================================================================
1216 //
1217 // ISADAPTOR SPECIALIZATIONS
1218 //
1219 //=================================================================================================
1220 
1221 //*************************************************************************************************
1223 template< typename MT, bool SO, bool DF >
1224 struct IsAdaptor< StrictlyLowerMatrix<MT,SO,DF> >
1225  : public TrueType
1226 {};
1228 //*************************************************************************************************
1229 
1230 
1231 
1232 
1233 //=================================================================================================
1234 //
1235 // ISRESTRICTED SPECIALIZATIONS
1236 //
1237 //=================================================================================================
1238 
1239 //*************************************************************************************************
1241 template< typename MT, bool SO, bool DF >
1242 struct IsRestricted< StrictlyLowerMatrix<MT,SO,DF> >
1243  : public TrueType
1244 {};
1246 //*************************************************************************************************
1247 
1248 
1249 
1250 
1251 //=================================================================================================
1252 //
1253 // HASCONSTDATAACCESS SPECIALIZATIONS
1254 //
1255 //=================================================================================================
1256 
1257 //*************************************************************************************************
1259 template< typename MT, bool SO >
1260 struct HasConstDataAccess< StrictlyLowerMatrix<MT,SO,true> >
1261  : public TrueType
1262 {};
1264 //*************************************************************************************************
1265 
1266 
1267 
1268 
1269 //=================================================================================================
1270 //
1271 // ISALIGNED SPECIALIZATIONS
1272 //
1273 //=================================================================================================
1274 
1275 //*************************************************************************************************
1277 template< typename MT, bool SO, bool DF >
1278 struct IsAligned< StrictlyLowerMatrix<MT,SO,DF> >
1279  : public IsAligned<MT>
1280 {};
1282 //*************************************************************************************************
1283 
1284 
1285 
1286 
1287 //=================================================================================================
1288 //
1289 // ISCONTIGUOUS SPECIALIZATIONS
1290 //
1291 //=================================================================================================
1292 
1293 //*************************************************************************************************
1295 template< typename MT, bool SO, bool DF >
1296 struct IsContiguous< StrictlyLowerMatrix<MT,SO,DF> >
1297  : public IsContiguous<MT>
1298 {};
1300 //*************************************************************************************************
1301 
1302 
1303 
1304 
1305 //=================================================================================================
1306 //
1307 // ISPADDED SPECIALIZATIONS
1308 //
1309 //=================================================================================================
1310 
1311 //*************************************************************************************************
1313 template< typename MT, bool SO, bool DF >
1314 struct IsPadded< StrictlyLowerMatrix<MT,SO,DF> >
1315  : public IsPadded<MT>
1316 {};
1318 //*************************************************************************************************
1319 
1320 
1321 
1322 
1323 //=================================================================================================
1324 //
1325 // ISRESIZABLE SPECIALIZATIONS
1326 //
1327 //=================================================================================================
1328 
1329 //*************************************************************************************************
1331 template< typename MT, bool SO, bool DF >
1332 struct IsResizable< StrictlyLowerMatrix<MT,SO,DF> >
1333  : public IsResizable<MT>
1334 {};
1336 //*************************************************************************************************
1337 
1338 
1339 
1340 
1341 //=================================================================================================
1342 //
1343 // ISSHRINKABLE SPECIALIZATIONS
1344 //
1345 //=================================================================================================
1346 
1347 //*************************************************************************************************
1349 template< typename MT, bool SO, bool DF >
1350 struct IsShrinkable< StrictlyLowerMatrix<MT,SO,DF> >
1351  : public IsShrinkable<MT>
1352 {};
1354 //*************************************************************************************************
1355 
1356 
1357 
1358 
1359 //=================================================================================================
1360 //
1361 // REMOVEADAPTOR SPECIALIZATIONS
1362 //
1363 //=================================================================================================
1364 
1365 //*************************************************************************************************
1367 template< typename MT, bool SO, bool DF >
1368 struct RemoveAdaptor< StrictlyLowerMatrix<MT,SO,DF> >
1369 {
1370  using Type = MT;
1371 };
1373 //*************************************************************************************************
1374 
1375 
1376 
1377 
1378 //=================================================================================================
1379 //
1380 // ADDTRAIT SPECIALIZATIONS
1381 //
1382 //=================================================================================================
1383 
1384 //*************************************************************************************************
1386 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1387 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1388 {
1390 };
1391 
1392 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1393 struct AddTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1394 {
1395  using Type = AddTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1396 };
1397 
1398 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1399 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1400 {
1402 };
1403 
1404 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1405 struct AddTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1406 {
1407  using Type = AddTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1408 };
1409 
1410 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1411 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1412 {
1413  using Type = AddTrait_< MT, DynamicMatrix<T,SO2> >;
1414 };
1415 
1416 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1417 struct AddTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1418 {
1419  using Type = AddTrait_< DynamicMatrix<T,SO1>, MT >;
1420 };
1421 
1422 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1423 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1424 {
1426 };
1427 
1428 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1429 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1430 {
1431  using Type = AddTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1432 };
1433 
1434 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1435 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1436 {
1438 };
1439 
1440 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1441 struct AddTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1442 {
1443  using Type = AddTrait_< CompressedMatrix<T,SO1>, MT >;
1444 };
1445 
1446 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1447 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1448 {
1450 };
1451 
1452 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1453 struct AddTrait< IdentityMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1454 {
1456 };
1457 
1458 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1459 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1460 {
1461  using Type = AddTrait_<MT1,MT2>;
1462 };
1463 
1464 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1465 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1466 {
1467  using Type = AddTrait_<MT1,MT2>;
1468 };
1469 
1470 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1471 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1472 {
1473  using Type = AddTrait_<MT1,MT2>;
1474 };
1475 
1476 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1477 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1478 {
1479  using Type = AddTrait_<MT1,MT2>;
1480 };
1481 
1482 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1483 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1484 {
1485  using Type = LowerMatrix< AddTrait_<MT1,MT2> >;
1486 };
1487 
1488 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1489 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1490 {
1491  using Type = LowerMatrix< AddTrait_<MT1,MT2> >;
1492 };
1493 
1494 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1495 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1496 {
1497  using Type = UniLowerMatrix< AddTrait_<MT1,MT2> >;
1498 };
1499 
1500 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1501 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1502 {
1503  using Type = UniLowerMatrix< AddTrait_<MT1,MT2> >;
1504 };
1505 
1506 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1507 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1508 {
1510 };
1512 //*************************************************************************************************
1513 
1514 
1515 
1516 
1517 //=================================================================================================
1518 //
1519 // SUBTRAIT SPECIALIZATIONS
1520 //
1521 //=================================================================================================
1522 
1523 //*************************************************************************************************
1525 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1526 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1527 {
1529 };
1530 
1531 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1532 struct SubTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1533 {
1534  using Type = SubTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1535 };
1536 
1537 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1538 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1539 {
1541 };
1542 
1543 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1544 struct SubTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1545 {
1546  using Type = SubTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1547 };
1548 
1549 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1550 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1551 {
1552  using Type = SubTrait_< MT, DynamicMatrix<T,SO2> >;
1553 };
1554 
1555 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1556 struct SubTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1557 {
1558  using Type = SubTrait_< DynamicMatrix<T,SO1>, MT >;
1559 };
1560 
1561 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1562 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1563 {
1565 };
1566 
1567 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1568 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1569 {
1570  using Type = SubTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1571 };
1572 
1573 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1574 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1575 {
1577 };
1578 
1579 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1580 struct SubTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1581 {
1582  using Type = SubTrait_< CompressedMatrix<T,SO1>, MT >;
1583 };
1584 
1585 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1586 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1587 {
1589 };
1590 
1591 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1592 struct SubTrait< IdentityMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1593 {
1595 };
1596 
1597 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1598 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1599 {
1600  using Type = SubTrait_<MT1,MT2>;
1601 };
1602 
1603 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1604 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1605 {
1606  using Type = SubTrait_<MT1,MT2>;
1607 };
1608 
1609 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1610 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1611 {
1612  using Type = SubTrait_<MT1,MT2>;
1613 };
1614 
1615 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1616 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1617 {
1618  using Type = SubTrait_<MT1,MT2>;
1619 };
1620 
1621 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1622 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1623 {
1624  using Type = LowerMatrix< SubTrait_<MT1,MT2> >;
1625 };
1626 
1627 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1628 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1629 {
1630  using Type = LowerMatrix< SubTrait_<MT1,MT2> >;
1631 };
1632 
1633 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1634 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1635 {
1636  using Type = LowerMatrix< SubTrait_<MT1,MT2> >;
1637 };
1638 
1639 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1640 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1641 {
1642  using Type = UniLowerMatrix< SubTrait_<MT1,MT2> >;
1643 };
1644 
1645 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1646 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1647 {
1649 };
1651 //*************************************************************************************************
1652 
1653 
1654 
1655 
1656 //=================================================================================================
1657 //
1658 // SCHURTRAIT SPECIALIZATIONS
1659 //
1660 //=================================================================================================
1661 
1662 //*************************************************************************************************
1664 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1665 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1666 {
1668 };
1669 
1670 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1671 struct SchurTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1672 {
1674 };
1675 
1676 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1677 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1678 {
1680 };
1681 
1682 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1683 struct SchurTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1684 {
1686 };
1687 
1688 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1689 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1690 {
1692 };
1693 
1694 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1695 struct SchurTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1696 {
1698 };
1699 
1700 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1701 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1702 {
1704 };
1705 
1706 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1707 struct SchurTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1708 {
1710 };
1711 
1712 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1713 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1714 {
1716 };
1717 
1718 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1719 struct SchurTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1720 {
1722 };
1723 
1724 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1725 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1726 {
1728 };
1729 
1730 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1731 struct SchurTrait< IdentityMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1732 {
1734 };
1735 
1736 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1737 struct SchurTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1738 {
1740 };
1741 
1742 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1743 struct SchurTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1744 {
1746 };
1747 
1748 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1749 struct SchurTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1750 {
1752 };
1753 
1754 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1755 struct SchurTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1756 {
1758 };
1759 
1760 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1761 struct SchurTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1762 {
1764 };
1765 
1766 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1767 struct SchurTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1768 {
1770 };
1771 
1772 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1773 struct SchurTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1774 {
1776 };
1777 
1778 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1779 struct SchurTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1780 {
1782 };
1783 
1784 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1785 struct SchurTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1786 {
1788 };
1790 //*************************************************************************************************
1791 
1792 
1793 
1794 
1795 //=================================================================================================
1796 //
1797 // MULTTRAIT SPECIALIZATIONS
1798 //
1799 //=================================================================================================
1800 
1801 //*************************************************************************************************
1803 template< typename MT, bool SO, bool DF, typename T >
1804 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
1805 {
1807 };
1808 
1809 template< typename T, typename MT, bool SO, bool DF >
1810 struct MultTrait< T, StrictlyLowerMatrix<MT,SO,DF>, EnableIf_< IsNumeric<T> > >
1811 {
1813 };
1814 
1815 template< typename MT, bool SO, bool DF, typename T, size_t N >
1816 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, StaticVector<T,N,false> >
1817 {
1819 };
1820 
1821 template< typename T, size_t N, typename MT, bool SO, bool DF >
1822 struct MultTrait< StaticVector<T,N,true>, StrictlyLowerMatrix<MT,SO,DF> >
1823 {
1824  using Type = MultTrait_< StaticVector<T,N,true>, MT >;
1825 };
1826 
1827 template< typename MT, bool SO, bool DF, typename T, size_t N >
1828 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, HybridVector<T,N,false> >
1829 {
1831 };
1832 
1833 template< typename T, size_t N, typename MT, bool SO, bool DF >
1834 struct MultTrait< HybridVector<T,N,true>, StrictlyLowerMatrix<MT,SO,DF> >
1835 {
1836  using Type = MultTrait_< HybridVector<T,N,true>, MT >;
1837 };
1838 
1839 template< typename MT, bool SO, bool DF, typename T >
1840 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, DynamicVector<T,false> >
1841 {
1843 };
1844 
1845 template< typename T, typename MT, bool SO, bool DF >
1846 struct MultTrait< DynamicVector<T,true>, StrictlyLowerMatrix<MT,SO,DF> >
1847 {
1848  using Type = MultTrait_< DynamicVector<T,true>, MT >;
1849 };
1850 
1851 template< typename MT, bool SO, bool DF, typename T, bool AF, bool PF >
1852 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
1853 {
1855 };
1856 
1857 template< typename T, bool AF, bool PF, typename MT, bool SO, bool DF >
1858 struct MultTrait< CustomVector<T,AF,PF,true>, StrictlyLowerMatrix<MT,SO,DF> >
1859 {
1860  using Type = MultTrait_< CustomVector<T,AF,PF,true>, MT >;
1861 };
1862 
1863 template< typename MT, bool SO, bool DF, typename T >
1864 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, CompressedVector<T,false> >
1865 {
1867 };
1868 
1869 template< typename T, typename MT, bool SO, bool DF >
1870 struct MultTrait< CompressedVector<T,true>, StrictlyLowerMatrix<MT,SO,DF> >
1871 {
1872  using Type = MultTrait_< CompressedVector<T,true>, MT >;
1873 };
1874 
1875 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1876 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1877 {
1879 };
1880 
1881 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1882 struct MultTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1883 {
1884  using Type = MultTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1885 };
1886 
1887 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1888 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1889 {
1891 };
1892 
1893 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1894 struct MultTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1895 {
1896  using Type = MultTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1897 };
1898 
1899 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1900 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1901 {
1902  using Type = MultTrait_< MT, DynamicMatrix<T,SO2> >;
1903 };
1904 
1905 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1906 struct MultTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1907 {
1908  using Type = MultTrait_< DynamicMatrix<T,SO1>, MT >;
1909 };
1910 
1911 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1912 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1913 {
1915 };
1916 
1917 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1918 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1919 {
1920  using Type = MultTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1921 };
1922 
1923 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1924 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1925 {
1927 };
1928 
1929 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1930 struct MultTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1931 {
1932  using Type = MultTrait_< CompressedMatrix<T,SO1>, MT >;
1933 };
1934 
1935 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1936 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1937 {
1939 };
1940 
1941 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1942 struct MultTrait< IdentityMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1943 {
1945 };
1946 
1947 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1948 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1949 {
1950  using Type = MultTrait_<MT1,MT2>;
1951 };
1952 
1953 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1954 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1955 {
1956  using Type = MultTrait_<MT1,MT2>;
1957 };
1958 
1959 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1960 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1961 {
1962  using Type = MultTrait_<MT1,MT2>;
1963 };
1964 
1965 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1966 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1967 {
1968  using Type = MultTrait_<MT1,MT2>;
1969 };
1970 
1971 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1972 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1973 {
1975 };
1976 
1977 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1978 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1979 {
1981 };
1982 
1983 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1984 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1985 {
1987 };
1988 
1989 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1990 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1991 {
1993 };
1994 
1995 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1996 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1997 {
1999 };
2001 //*************************************************************************************************
2002 
2003 
2004 
2005 
2006 //=================================================================================================
2007 //
2008 // DIVTRAIT SPECIALIZATIONS
2009 //
2010 //=================================================================================================
2011 
2012 //*************************************************************************************************
2014 template< typename MT, bool SO, bool DF, typename T >
2015 struct DivTrait< StrictlyLowerMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
2016 {
2017  using Type = StrictlyLowerMatrix< DivTrait_<MT,T> >;
2018 };
2020 //*************************************************************************************************
2021 
2022 
2023 
2024 
2025 //=================================================================================================
2026 //
2027 // UNARYMAPTRAIT SPECIALIZATIONS
2028 //
2029 //=================================================================================================
2030 
2031 //*************************************************************************************************
2033 template< typename MT, bool SO, bool DF >
2034 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Abs >
2035 {
2037 };
2038 
2039 template< typename MT, bool SO, bool DF >
2040 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Floor >
2041 {
2043 };
2044 
2045 template< typename MT, bool SO, bool DF >
2046 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Ceil >
2047 {
2049 };
2050 
2051 template< typename MT, bool SO, bool DF >
2052 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Trunc >
2053 {
2055 };
2056 
2057 template< typename MT, bool SO, bool DF >
2058 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Round >
2059 {
2061 };
2062 
2063 template< typename MT, bool SO, bool DF >
2064 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Conj >
2065 {
2067 };
2068 
2069 template< typename MT, bool SO, bool DF >
2070 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Real >
2071 {
2073 };
2074 
2075 template< typename MT, bool SO, bool DF >
2076 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Imag >
2077 {
2079 };
2080 
2081 template< typename MT, bool SO, bool DF >
2082 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Sqrt >
2083 {
2085 };
2086 
2087 template< typename MT, bool SO, bool DF >
2088 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Cbrt >
2089 {
2091 };
2092 
2093 template< typename MT, bool SO, bool DF >
2094 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Sin >
2095 {
2097 };
2098 
2099 template< typename MT, bool SO, bool DF >
2100 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Asin >
2101 {
2103 };
2104 
2105 template< typename MT, bool SO, bool DF >
2106 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Sinh >
2107 {
2109 };
2110 
2111 template< typename MT, bool SO, bool DF >
2112 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Asinh >
2113 {
2115 };
2116 
2117 template< typename MT, bool SO, bool DF >
2118 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Tan >
2119 {
2121 };
2122 
2123 template< typename MT, bool SO, bool DF >
2124 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Atan >
2125 {
2127 };
2128 
2129 template< typename MT, bool SO, bool DF >
2130 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Tanh >
2131 {
2133 };
2134 
2135 template< typename MT, bool SO, bool DF >
2136 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Atanh >
2137 {
2139 };
2140 
2141 template< typename MT, bool SO, bool DF >
2142 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Erf >
2143 {
2145 };
2147 //*************************************************************************************************
2148 
2149 
2150 
2151 
2152 //=================================================================================================
2153 //
2154 // BINARYMAPTRAIT SPECIALIZATIONS
2155 //
2156 //=================================================================================================
2157 
2158 //*************************************************************************************************
2160 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2161 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2>, Min >
2162 {
2164 };
2165 
2166 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2167 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2>, Max >
2168 {
2170 };
2171 
2172 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2173 struct BinaryMapTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Min >
2174 {
2176 };
2177 
2178 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2179 struct BinaryMapTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Max >
2180 {
2182 };
2183 
2184 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2185 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2>, Min >
2186 {
2188 };
2189 
2190 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2191 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2>, Max >
2192 {
2194 };
2195 
2196 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2197 struct BinaryMapTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Min >
2198 {
2200 };
2201 
2202 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2203 struct BinaryMapTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Max >
2204 {
2206 };
2207 
2208 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2209 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Min >
2210 {
2212 };
2213 
2214 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2215 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Max >
2216 {
2218 };
2220 //*************************************************************************************************
2221 
2222 
2223 
2224 
2225 //=================================================================================================
2226 //
2227 // DECLSYMTRAIT SPECIALIZATIONS
2228 //
2229 //=================================================================================================
2230 
2231 //*************************************************************************************************
2233 template< typename MT, bool SO, bool DF >
2234 struct DeclSymTrait< StrictlyLowerMatrix<MT,SO,DF> >
2235 {
2236  using Type = DiagonalMatrix<MT>;
2237 };
2239 //*************************************************************************************************
2240 
2241 
2242 
2243 
2244 //=================================================================================================
2245 //
2246 // DECLHERMTRAIT SPECIALIZATIONS
2247 //
2248 //=================================================================================================
2249 
2250 //*************************************************************************************************
2252 template< typename MT, bool SO, bool DF >
2253 struct DeclHermTrait< StrictlyLowerMatrix<MT,SO,DF> >
2254 {
2255  using Type = HermitianMatrix<MT>;
2256 };
2258 //*************************************************************************************************
2259 
2260 
2261 
2262 
2263 //=================================================================================================
2264 //
2265 // DECLLOWTRAIT SPECIALIZATIONS
2266 //
2267 //=================================================================================================
2268 
2269 //*************************************************************************************************
2271 template< typename MT, bool SO, bool DF >
2272 struct DeclLowTrait< StrictlyLowerMatrix<MT,SO,DF> >
2273 {
2274  using Type = StrictlyLowerMatrix<MT,SO,DF>;
2275 };
2277 //*************************************************************************************************
2278 
2279 
2280 
2281 
2282 //=================================================================================================
2283 //
2284 // DECLUPPTRAIT SPECIALIZATIONS
2285 //
2286 //=================================================================================================
2287 
2288 //*************************************************************************************************
2290 template< typename MT, bool SO, bool DF >
2291 struct DeclUppTrait< StrictlyLowerMatrix<MT,SO,DF> >
2292 {
2293  using Type = DiagonalMatrix<MT>;
2294 };
2296 //*************************************************************************************************
2297 
2298 
2299 
2300 
2301 //=================================================================================================
2302 //
2303 // DECLDIAGTRAIT SPECIALIZATIONS
2304 //
2305 //=================================================================================================
2306 
2307 //*************************************************************************************************
2309 template< typename MT, bool SO, bool DF >
2310 struct DeclDiagTrait< StrictlyLowerMatrix<MT,SO,DF> >
2311 {
2312  using Type = DiagonalMatrix<MT>;
2313 };
2315 //*************************************************************************************************
2316 
2317 
2318 
2319 
2320 //=================================================================================================
2321 //
2322 // HIGHTYPE SPECIALIZATIONS
2323 //
2324 //=================================================================================================
2325 
2326 //*************************************************************************************************
2328 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2329 struct HighType< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2330 {
2332 };
2334 //*************************************************************************************************
2335 
2336 
2337 
2338 
2339 //=================================================================================================
2340 //
2341 // LOWTYPE SPECIALIZATIONS
2342 //
2343 //=================================================================================================
2344 
2345 //*************************************************************************************************
2347 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2348 struct LowType< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2349 {
2351 };
2353 //*************************************************************************************************
2354 
2355 
2356 
2357 
2358 //=================================================================================================
2359 //
2360 // SUBMATRIXTRAIT SPECIALIZATIONS
2361 //
2362 //=================================================================================================
2363 
2364 //*************************************************************************************************
2366 template< typename MT, bool SO, bool DF, size_t... CSAs >
2367 struct SubmatrixTrait< StrictlyLowerMatrix<MT,SO,DF>, CSAs... >
2368 {
2369  using Type = SubmatrixTrait_<MT,CSAs...>;
2370 };
2372 //*************************************************************************************************
2373 
2374 
2375 
2376 
2377 //=================================================================================================
2378 //
2379 // ROWTRAIT SPECIALIZATIONS
2380 //
2381 //=================================================================================================
2382 
2383 //*************************************************************************************************
2385 template< typename MT, bool SO, bool DF, size_t... CRAs >
2386 struct RowTrait< StrictlyLowerMatrix<MT,SO,DF>, CRAs... >
2387 {
2388  using Type = RowTrait_<MT,CRAs...>;
2389 };
2391 //*************************************************************************************************
2392 
2393 
2394 
2395 
2396 //=================================================================================================
2397 //
2398 // ROWSTRAIT SPECIALIZATIONS
2399 //
2400 //=================================================================================================
2401 
2402 //*************************************************************************************************
2404 template< typename MT, bool SO, bool DF, size_t... CRAs >
2405 struct RowsTrait< StrictlyLowerMatrix<MT,SO,DF>, CRAs... >
2406 {
2407  using Type = RowsTrait_<MT,CRAs...>;
2408 };
2410 //*************************************************************************************************
2411 
2412 
2413 
2414 
2415 //=================================================================================================
2416 //
2417 // COLUMNTRAIT SPECIALIZATIONS
2418 //
2419 //=================================================================================================
2420 
2421 //*************************************************************************************************
2423 template< typename MT, bool SO, bool DF, size_t... CCAs >
2424 struct ColumnTrait< StrictlyLowerMatrix<MT,SO,DF>, CCAs... >
2425 {
2426  using Type = ColumnTrait_<MT,CCAs...>;
2427 };
2429 //*************************************************************************************************
2430 
2431 
2432 
2433 
2434 //=================================================================================================
2435 //
2436 // COLUMNSTRAIT SPECIALIZATIONS
2437 //
2438 //=================================================================================================
2439 
2440 //*************************************************************************************************
2442 template< typename MT, bool SO, bool DF, size_t... CCAs >
2443 struct ColumnsTrait< StrictlyLowerMatrix<MT,SO,DF>, CCAs... >
2444 {
2445  using Type = ColumnsTrait_<MT,CCAs...>;
2446 };
2448 //*************************************************************************************************
2449 
2450 
2451 
2452 
2453 //=================================================================================================
2454 //
2455 // BANDTRAIT SPECIALIZATIONS
2456 //
2457 //=================================================================================================
2458 
2459 //*************************************************************************************************
2461 template< typename MT, bool SO, bool DF, ptrdiff_t... CBAs >
2462 struct BandTrait< StrictlyLowerMatrix<MT,SO,DF>, CBAs... >
2463 {
2464  using Type = BandTrait_<MT,CBAs...>;
2465 };
2467 //*************************************************************************************************
2468 
2469 } // namespace blaze
2470 
2471 #endif
Pointer difference type of the Blaze library.
decltype(auto) column(Matrix< MT, SO > &matrix, RCAs... args)
Creating a view on a specific column of the given matrix.
Definition: Column.h:131
Headerfile for the generic min algorithm.
Header file for the decldiag trait.
Header file for the Schur product trait.
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 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.
Header file for the declherm trait.
Base template for the SubmatrixTrait class.
Definition: SubmatrixTrait.h:109
Base template for the ColumnTrait class.
Definition: ColumnTrait.h:108
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector) noexcept
Returns the current size/dimension of the vector.
Definition: Vector.h:265
Base template for the DeclUppTrait class.
Definition: DeclUppTrait.h:113
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: BaseTemplate.h:553
Base template for the SchurTrait class.
Definition: SchurTrait.h:112
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:364
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:588
const ElementType_< MT > min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1903
typename MultTrait< T1, T2 >::Type MultTrait_
Auxiliary alias declaration for the MultTrait class template.The MultTrait_ alias declaration provide...
Definition: MultTrait.h:291
typename SubmatrixTrait< MT, CSAs... >::Type SubmatrixTrait_
Auxiliary alias declaration for the SubmatrixTrait type trait.The SubmatrixTrait_ alias declaration p...
Definition: SubmatrixTrait.h:145
typename RowTrait< MT, CRAs... >::Type RowTrait_
Auxiliary alias declaration for the RowTrait type trait.The RowTrait_ alias declaration provides a co...
Definition: RowTrait.h:145
Base template for the RowsTrait class.
Definition: RowsTrait.h:109
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:80
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:129
Header file for the band trait.
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
Base template for the RowTrait class.
Definition: RowTrait.h:109
Compile time check for the memory layout of data types.This type trait tests whether the given data t...
Definition: IsContiguous.h:86
typename ColumnTrait< MT, CCAs... >::Type ColumnTrait_
Auxiliary alias declaration for the ColumnTrait type trait.The ColumnTrait_ alias declaration provide...
Definition: ColumnTrait.h:144
Header file for the LowType type trait.
Base template for the HighType type trait.
Definition: HighType.h:133
Header file for the multiplication trait.
Header file for the unary map trait.
typename ColumnsTrait< MT, CCAs... >::Type ColumnsTrait_
Auxiliary alias declaration for the ColumnsTrait type trait.The ColumnsTrait_ alias declaration provi...
Definition: ColumnsTrait.h:145
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
Header file for the IsShrinkable type trait.
StrictlyLowerMatrix specialization for dense matrices.
Header file for all forward declarations of the math module.
Compile time check for data types with padding.This type trait tests whether the given data type empl...
Definition: IsPadded.h:76
Header file for the decllow trait.
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:3085
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:76
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:506
Base template for the DeclSymTrait class.
Definition: DeclSymTrait.h:113
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:430
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
typename BandTrait< MT, CBAs... >::Type BandTrait_
Auxiliary alias declaration for the BandTrait type trait.The BandTrait_ alias declaration provides a ...
Definition: BandTrait.h:145
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:608
Header file for the IsPadded type trait.
Header file for the IsAdaptor type trait.
decltype(auto) band(Matrix< MT, SO > &matrix, RBAs... args)
Creating a view on a specific band of the given matrix.
Definition: Band.h:134
typename RowsTrait< MT, CRAs... >::Type RowsTrait_
Auxiliary alias declaration for the RowsTrait type trait.The RowsTrait_ alias declaration provides a ...
Definition: RowsTrait.h:145
Compile time check for shrinkable data types.This type trait tests whether the given data type is a s...
Definition: IsShrinkable.h:75
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
Header file for the declupp trait.
Header file for the binary map trait.
Header file for run time assertion macros.
Base template for the AddTrait class.
Definition: AddTrait.h:119
Base template for the DeclHermTrait class.
Definition: DeclHermTrait.h:113
Base template for the MultTrait class.
Definition: MultTrait.h:119
Header file for the addition trait.
Header file for the division trait.
Header file for the submatrix trait.
Header file for the IsContiguous type trait.
Header file for the columns trait.
decltype(auto) row(Matrix< MT, SO > &, RRAs...)
Creating a view on a specific row of the given matrix.
Definition: Row.h:131
Header file for the declsym trait.
Matrix adapter for strictly lower triangular matrices.
Definition: BaseTemplate.h:558
Matrix adapter for Hermitian matrices.
Definition: BaseTemplate.h:611
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:272
Base class for matrices.The Matrix class is a base class for all dense and sparse matrix classes with...
Definition: Forward.h:101
#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
Base template for the DivTrait class.
Definition: DivTrait.h:120
Header file for the rows trait.
Compile time check for strictly lower triangular matrices.This type trait tests whether or not the gi...
Definition: IsStrictlyLower.h:86
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:490
Base template for the DeclLowTrait class.
Definition: DeclLowTrait.h:113
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 template for the ColumnsTrait class.
Definition: ColumnsTrait.h:109
Base class for N-dimensional vectors.The Vector class is a base class for all arbitrarily sized (N-di...
Definition: Forward.h:177
typename SubTrait< T1, T2 >::Type SubTrait_
Auxiliary alias declaration for the SubTrait class template.The SubTrait_ alias declaration provides ...
Definition: SubTrait.h:291
Compile time evaluation of the size of vectors and matrices.The Size type trait evaluates the size of...
Definition: Size.h:80
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:130
Matrix adapter for lower unitriangular matrices.
Definition: BaseTemplate.h:577
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:254
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:628
Base template for the SubTrait class.
Definition: SubTrait.h:119
Matrix adapter for diagonal matrices.
Definition: BaseTemplate.h:560
void UNUSED_PARAMETER(const Args &...)
Suppression of unused parameter warnings.
Definition: Unused.h:81
Base template for the DeclDiagTrait class.
Definition: DeclDiagTrait.h:113
Base template for the BinaryMapTrait class.
Definition: BinaryMapTrait.h:97
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
Base template for the UnaryMapTrait class.
Definition: UnaryMapTrait.h:95
Header file for the Size type trait.
typename AddTrait< T1, T2 >::Type AddTrait_
Auxiliary alias declaration for the AddTrait class template.The AddTrait_ alias declaration provides ...
Definition: AddTrait.h:291
#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.
Base template for the BandTrait class.
Definition: BandTrait.h:109