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>
79 #include <blaze/util/Assert.h>
80 #include <blaze/util/EnableIf.h>
82 #include <blaze/util/TrueType.h>
84 #include <blaze/util/Unused.h>
85 
86 
87 namespace blaze {
88 
89 //=================================================================================================
90 //
91 // STRICTLYLOWERMATRIX OPERATORS
92 //
93 //=================================================================================================
94 
95 //*************************************************************************************************
98 template< typename MT, bool SO, bool DF >
99 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m );
100 
101 template< typename MT, bool SO, bool DF >
102 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m, size_t i );
103 
104 template< typename MT, bool SO, bool DF >
105 inline void clear( StrictlyLowerMatrix<MT,SO,DF>& m );
106 
107 template< bool RF, typename MT, bool SO, bool DF >
108 inline bool isDefault( const StrictlyLowerMatrix<MT,SO,DF>& m );
109 
110 template< typename MT, bool SO, bool DF >
111 inline bool isIntact( const StrictlyLowerMatrix<MT,SO,DF>& m );
112 
113 template< typename MT, bool SO, bool DF >
114 inline void swap( StrictlyLowerMatrix<MT,SO,DF>& a, StrictlyLowerMatrix<MT,SO,DF>& b ) noexcept;
116 //*************************************************************************************************
117 
118 
119 //*************************************************************************************************
126 template< typename MT // Type of the adapted matrix
127  , bool SO // Storage order of the adapted matrix
128  , bool DF > // Density flag
130 {
131  m.reset();
132 }
133 //*************************************************************************************************
134 
135 
136 //*************************************************************************************************
149 template< typename MT // Type of the adapted matrix
150  , bool SO // Storage order of the adapted matrix
151  , bool DF > // Density flag
152 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m, size_t i )
153 {
154  m.reset( i );
155 }
156 //*************************************************************************************************
157 
158 
159 //*************************************************************************************************
166 template< typename MT // Type of the adapted matrix
167  , bool SO // Storage order of the adapted matrix
168  , bool DF > // Density flag
170 {
171  m.clear();
172 }
173 //*************************************************************************************************
174 
175 
176 //*************************************************************************************************
187 template< bool RF // Relaxation flag
188  , typename MT // Type of the adapted matrix
189  , bool SO // Storage order of the adapted matrix
190  , bool DF > // Density flag
191 inline bool isDefault_backend( const StrictlyLowerMatrix<MT,SO,DF>& m, TrueType )
192 {
193  return ( m.rows() == 0UL );
194 }
196 //*************************************************************************************************
197 
198 
199 //*************************************************************************************************
210 template< bool RF // Relaxation flag
211  , typename MT // Type of the adapted matrix
212  , bool SO // Storage order of the adapted matrix
213  , bool DF > // Density flag
214 inline bool isDefault_backend( const StrictlyLowerMatrix<MT,SO,DF>& m, FalseType )
215 {
216  if( SO ) {
217  for( size_t j=0UL; j<m.columns(); ++j ) {
218  for( size_t i=j+1UL; i<m.rows(); ++i ) {
219  if( !isDefault<RF>( m(i,j) ) )
220  return false;
221  }
222  }
223  }
224  else {
225  for( size_t i=1UL; i<m.rows(); ++i ) {
226  for( size_t j=0UL; j<i; ++j ) {
227  if( !isDefault<RF>( m(i,j) ) )
228  return false;
229  }
230  }
231  }
232 
233  return true;
234 }
236 //*************************************************************************************************
237 
238 
239 //*************************************************************************************************
265 template< bool RF // Relaxation flag
266  , typename MT // Type of the adapted matrix
267  , bool SO // Storage order of the adapted matrix
268  , bool DF > // Density flag
270 {
271  return isDefault_backend<RF>( m, typename IsResizable<MT>::Type() );
272 }
273 //*************************************************************************************************
274 
275 
276 //*************************************************************************************************
297 template< typename MT // Type of the adapted matrix
298  , bool SO // Storage order of the adapted matrix
299  , bool DF > // Density flag
301 {
302  return m.isIntact();
303 }
304 //*************************************************************************************************
305 
306 
307 //*************************************************************************************************
315 template< typename MT // Type of the adapted matrix
316  , bool SO // Storage order of the adapted matrix
317  , bool DF > // Density flag
319 {
320  a.swap( b );
321 }
322 //*************************************************************************************************
323 
324 
325 //*************************************************************************************************
342 template< typename MT // Type of the adapted matrix
343  , bool SO // Storage order of the adapted matrix
344  , bool DF // Density flag
345  , typename VT > // Type of the right-hand side dense vector
346 inline bool tryAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
347  const DenseVector<VT,false>& rhs, size_t row, size_t column )
348 {
350 
351  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
352  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
353  BLAZE_INTERNAL_ASSERT( (~rhs).size() <= lhs.rows() - row, "Invalid number of rows" );
354 
355  UNUSED_PARAMETER( lhs );
356 
357  if( column < row )
358  return true;
359 
360  const size_t iend( min( column - row + 1UL, (~rhs).size() ) );
361 
362  for( size_t i=0UL; i<iend; ++i ) {
363  if( !isDefault( (~rhs)[i] ) )
364  return false;
365  }
366 
367  return true;
368 }
370 //*************************************************************************************************
371 
372 
373 //*************************************************************************************************
390 template< typename MT // Type of the adapted matrix
391  , bool SO // Storage order of the adapted matrix
392  , bool DF // Density flag
393  , typename VT > // Type of the right-hand side dense vector
394 inline bool tryAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
395  const DenseVector<VT,true>& rhs, size_t row, size_t column )
396 {
398 
399  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
400  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
401  BLAZE_INTERNAL_ASSERT( (~rhs).size() <= lhs.columns() - column, "Invalid number of columns" );
402 
403  UNUSED_PARAMETER( lhs );
404 
405  const size_t ibegin( ( row <= column )?( 0UL ):( row - column ) );
406 
407  for( size_t i=ibegin; i<(~rhs).size(); ++i ) {
408  if( !isDefault( (~rhs)[i] ) )
409  return false;
410  }
411 
412  return true;
413 }
415 //*************************************************************************************************
416 
417 
418 //*************************************************************************************************
435 template< typename MT // Type of the adapted matrix
436  , bool SO // Storage order of the adapted matrix
437  , bool DF // Density flag
438  , typename VT > // Type of the right-hand side sparse vector
439 inline bool tryAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
440  const SparseVector<VT,false>& rhs, size_t row, size_t column )
441 {
443 
444  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
445  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
446  BLAZE_INTERNAL_ASSERT( (~rhs).size() <= lhs.rows() - row, "Invalid number of rows" );
447 
448  UNUSED_PARAMETER( lhs );
449 
450  using RhsIterator = typename VT::ConstIterator;
451 
452  if( column < row )
453  return true;
454 
455  const RhsIterator last( (~rhs).lowerBound( column - row + 1UL ) );
456 
457  for( RhsIterator element=(~rhs).begin(); element!=last; ++element ) {
458  if( !isDefault( element->value() ) )
459  return false;
460  }
461 
462  return true;
463 }
465 //*************************************************************************************************
466 
467 
468 //*************************************************************************************************
485 template< typename MT // Type of the adapted matrix
486  , bool SO // Storage order of the adapted matrix
487  , bool DF // Density flag
488  , typename VT > // Type of the right-hand side sparse vector
489 inline bool tryAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
490  const SparseVector<VT,true>& rhs, size_t row, size_t column )
491 {
493 
494  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
495  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
496  BLAZE_INTERNAL_ASSERT( (~rhs).size() <= lhs.columns() - column, "Invalid number of columns" );
497 
498  UNUSED_PARAMETER( lhs );
499 
500  using RhsIterator = typename VT::ConstIterator;
501 
502  const RhsIterator last( (~rhs).end() );
503  RhsIterator element( (~rhs).lowerBound( ( row <= column )?( 0UL ):( row - column ) ) );
504 
505  for( ; element!=last; ++element ) {
506  if( !isDefault( element->value() ) )
507  return false;
508  }
509 
510  return true;
511 }
513 //*************************************************************************************************
514 
515 
516 //*************************************************************************************************
533 template< typename MT1 // Type of the adapted matrix
534  , bool SO // Storage order of the adapted matrix
535  , bool DF // Density flag
536  , typename MT2 > // Type of the right-hand side dense matrix
537 inline bool tryAssign( const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
538  const DenseMatrix<MT2,false>& rhs, size_t row, size_t column )
539 {
541 
542  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
543  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
544  BLAZE_INTERNAL_ASSERT( (~rhs).rows() <= lhs.rows() - row, "Invalid number of rows" );
545  BLAZE_INTERNAL_ASSERT( (~rhs).columns() <= lhs.columns() - column, "Invalid number of columns" );
546 
547  UNUSED_PARAMETER( lhs );
548 
549  const size_t M( (~rhs).rows() );
550  const size_t N( (~rhs).columns() );
551 
552  if( row + 1UL >= column + N )
553  return true;
554 
555  const size_t iend( min( column + N - row, M ) );
556 
557  for( size_t i=0UL; i<iend; ++i )
558  {
559  const bool containsDiagonal( row + i >= column );
560  const size_t jbegin( ( containsDiagonal )?( row + i - column ):( 0UL ) );
561 
562  for( size_t j=jbegin; j<N; ++j ) {
563  if( !isDefault( (~rhs)(i,j) ) )
564  return false;
565  }
566  }
567 
568  return true;
569 }
571 //*************************************************************************************************
572 
573 
574 //*************************************************************************************************
591 template< typename MT1 // Type of the adapted matrix
592  , bool SO // Storage order of the adapted matrix
593  , bool DF // Density flag
594  , typename MT2 > // Type of the right-hand side dense matrix
595 inline bool tryAssign( const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
596  const DenseMatrix<MT2,true>& rhs, size_t row, size_t column )
597 {
599 
600  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
601  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
602  BLAZE_INTERNAL_ASSERT( (~rhs).rows() <= lhs.rows() - row, "Invalid number of rows" );
603  BLAZE_INTERNAL_ASSERT( (~rhs).columns() <= lhs.columns() - column, "Invalid number of columns" );
604 
605  UNUSED_PARAMETER( lhs );
606 
607  const size_t M( (~rhs).rows() );
608  const size_t N( (~rhs).columns() );
609 
610  if( row + 1UL >= column + N )
611  return true;
612 
613  const size_t jbegin( ( row <= column )?( 0UL ):( row - column ) );
614 
615  for( size_t j=jbegin; j<N; ++j )
616  {
617  const size_t iend( min( column + j - row + 1UL, M ) );
618 
619  for( size_t i=0UL; i<iend; ++i ) {
620  if( !isDefault( (~rhs)(i,j) ) )
621  return false;
622  }
623  }
624 
625  return true;
626 }
628 //*************************************************************************************************
629 
630 
631 //*************************************************************************************************
648 template< typename MT1 // Type of the adapted matrix
649  , bool SO // Storage order of the adapted matrix
650  , bool DF // Density flag
651  , typename MT2 > // Type of the right-hand side sparse matrix
652 inline bool tryAssign( const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
653  const SparseMatrix<MT2,false>& rhs, size_t row, size_t column )
654 {
656 
657  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
658  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
659  BLAZE_INTERNAL_ASSERT( (~rhs).rows() <= lhs.rows() - row, "Invalid number of rows" );
660  BLAZE_INTERNAL_ASSERT( (~rhs).columns() <= lhs.columns() - column, "Invalid number of columns" );
661 
662  UNUSED_PARAMETER( lhs );
663 
664  using RhsIterator = typename MT2::ConstIterator;
665 
666  const size_t M( (~rhs).rows() );
667  const size_t N( (~rhs).columns() );
668 
669  if( row + 1UL >= column + N )
670  return true;
671 
672  const size_t iend( min( column + N - row, M ) );
673 
674  for( size_t i=0UL; i<iend; ++i )
675  {
676  const bool containsDiagonal( row + i >= column );
677  const size_t index( ( containsDiagonal )?( row + i - column ):( 0UL ) );
678 
679  const RhsIterator last( (~rhs).end(i) );
680  RhsIterator element( (~rhs).lowerBound( i, index ) );
681 
682  for( ; element!=last; ++element ) {
683  if( !isDefault( element->value() ) )
684  return false;
685  }
686  }
687 
688  return true;
689 }
691 //*************************************************************************************************
692 
693 
694 //*************************************************************************************************
711 template< typename MT1 // Type of the adapted matrix
712  , bool SO // Storage order of the adapted matrix
713  , bool DF // Density flag
714  , typename MT2 > // Type of the right-hand side sparse matrix
715 inline bool tryAssign( const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
716  const SparseMatrix<MT2,true>& rhs, size_t row, size_t column )
717 {
719 
720  BLAZE_INTERNAL_ASSERT( row <= lhs.rows(), "Invalid row access index" );
721  BLAZE_INTERNAL_ASSERT( column <= lhs.columns(), "Invalid column access index" );
722  BLAZE_INTERNAL_ASSERT( (~rhs).rows() <= lhs.rows() - row, "Invalid number of rows" );
723  BLAZE_INTERNAL_ASSERT( (~rhs).columns() <= lhs.columns() - column, "Invalid number of columns" );
724 
725  UNUSED_PARAMETER( lhs );
726 
727  using RhsIterator = typename MT2::ConstIterator;
728 
729  const size_t M( (~rhs).rows() );
730  const size_t N( (~rhs).columns() );
731 
732  if( row + 1UL >= column + N )
733  return true;
734 
735  const size_t jbegin( ( row < column )?( 0UL ):( row - column ) );
736 
737  for( size_t j=jbegin; j<N; ++j )
738  {
739  const size_t index( column + j - row + 1UL );
740  const RhsIterator last( (~rhs).lowerBound( min( index, M ), j ) );
741 
742  for( RhsIterator element=(~rhs).begin(j); element!=last; ++element ) {
743  if( !isDefault( element->value() ) )
744  return false;
745  }
746  }
747 
748  return true;
749 }
751 //*************************************************************************************************
752 
753 
754 //*************************************************************************************************
771 template< typename MT // Type of the adapted matrix
772  , bool SO // Storage order of the adapted matrix
773  , bool DF // Density flag
774  , typename VT // Type of the right-hand side vector
775  , bool TF > // Transpose flag of the right-hand side vector
776 inline bool tryAddAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
777  const Vector<VT,TF>& rhs, size_t row, size_t column )
778 {
779  return tryAssign( lhs, ~rhs, row, column );
780 }
782 //*************************************************************************************************
783 
784 
785 //*************************************************************************************************
802 template< typename MT1 // Type of the adapted matrix
803  , bool SO1 // Storage order of the adapted matrix
804  , bool DF // Density flag
805  , typename MT2 // Type of the right-hand side matrix
806  , bool SO2 > // Storage order of the right-hand side matrix
807 inline bool tryAddAssign( const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
808  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
809 {
810  return tryAssign( lhs, ~rhs, row, column );
811 }
813 //*************************************************************************************************
814 
815 
816 //*************************************************************************************************
833 template< typename MT // Type of the adapted matrix
834  , bool SO // Storage order of the adapted matrix
835  , bool DF // Density flag
836  , typename VT // Type of the right-hand side vector
837  , bool TF > // Transpose flag of the right-hand side vector
838 inline bool trySubAssign( const StrictlyLowerMatrix<MT,SO,DF>& lhs,
839  const Vector<VT,TF>& rhs, size_t row, size_t column )
840 {
841  return tryAssign( lhs, ~rhs, row, column );
842 }
844 //*************************************************************************************************
845 
846 
847 //*************************************************************************************************
864 template< typename MT1 // Type of the adapted matrix
865  , bool SO1 // Storage order of the adapted matrix
866  , bool DF // Density flag
867  , typename MT2 // Type of the right-hand side matrix
868  , bool SO2 > // Storage order of the right-hand side matrix
869 inline bool trySubAssign( const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
870  const Matrix<MT2,SO2>& rhs, size_t row, size_t column )
871 {
872  return tryAssign( lhs, ~rhs, row, column );
873 }
875 //*************************************************************************************************
876 
877 
878 //*************************************************************************************************
892 template< typename MT // Type of the adapted matrix
893  , bool SO // Storage order of the adapted matrix
894  , bool DF > // Density flag
895 inline MT& derestrict( StrictlyLowerMatrix<MT,SO,DF>& m )
896 {
897  return m.matrix_;
898 }
900 //*************************************************************************************************
901 
902 
903 
904 
905 //=================================================================================================
906 //
907 // ROWS SPECIALIZATIONS
908 //
909 //=================================================================================================
910 
911 //*************************************************************************************************
913 template< typename MT, bool SO, bool DF >
914 struct Rows< StrictlyLowerMatrix<MT,SO,DF> >
915  : public Rows<MT>
916 {};
918 //*************************************************************************************************
919 
920 
921 
922 
923 //=================================================================================================
924 //
925 // COLUMNS SPECIALIZATIONS
926 //
927 //=================================================================================================
928 
929 //*************************************************************************************************
931 template< typename MT, bool SO, bool DF >
932 struct Columns< StrictlyLowerMatrix<MT,SO,DF> >
933  : public Columns<MT>
934 {};
936 //*************************************************************************************************
937 
938 
939 
940 
941 //=================================================================================================
942 //
943 // ISSQUARE SPECIALIZATIONS
944 //
945 //=================================================================================================
946 
947 //*************************************************************************************************
949 template< typename MT, bool SO, bool DF >
950 struct IsSquare< StrictlyLowerMatrix<MT,SO,DF> >
951  : public TrueType
952 {};
954 //*************************************************************************************************
955 
956 
957 
958 
959 //=================================================================================================
960 //
961 // ISSTRICTLYLOWER SPECIALIZATIONS
962 //
963 //=================================================================================================
964 
965 //*************************************************************************************************
967 template< typename MT, bool SO, bool DF >
968 struct IsStrictlyLower< StrictlyLowerMatrix<MT,SO,DF> >
969  : public TrueType
970 {};
972 //*************************************************************************************************
973 
974 
975 
976 
977 //=================================================================================================
978 //
979 // ISADAPTOR SPECIALIZATIONS
980 //
981 //=================================================================================================
982 
983 //*************************************************************************************************
985 template< typename MT, bool SO, bool DF >
986 struct IsAdaptor< StrictlyLowerMatrix<MT,SO,DF> >
987  : public TrueType
988 {};
990 //*************************************************************************************************
991 
992 
993 
994 
995 //=================================================================================================
996 //
997 // ISRESTRICTED SPECIALIZATIONS
998 //
999 //=================================================================================================
1000 
1001 //*************************************************************************************************
1003 template< typename MT, bool SO, bool DF >
1004 struct IsRestricted< StrictlyLowerMatrix<MT,SO,DF> >
1005  : public TrueType
1006 {};
1008 //*************************************************************************************************
1009 
1010 
1011 
1012 
1013 //=================================================================================================
1014 //
1015 // HASCONSTDATAACCESS SPECIALIZATIONS
1016 //
1017 //=================================================================================================
1018 
1019 //*************************************************************************************************
1021 template< typename MT, bool SO >
1022 struct HasConstDataAccess< StrictlyLowerMatrix<MT,SO,true> >
1023  : public TrueType
1024 {};
1026 //*************************************************************************************************
1027 
1028 
1029 
1030 
1031 //=================================================================================================
1032 //
1033 // ISALIGNED SPECIALIZATIONS
1034 //
1035 //=================================================================================================
1036 
1037 //*************************************************************************************************
1039 template< typename MT, bool SO, bool DF >
1040 struct IsAligned< StrictlyLowerMatrix<MT,SO,DF> >
1041  : public BoolConstant< IsAligned<MT>::value >
1042 {};
1044 //*************************************************************************************************
1045 
1046 
1047 
1048 
1049 //=================================================================================================
1050 //
1051 // ISPADDED SPECIALIZATIONS
1052 //
1053 //=================================================================================================
1054 
1055 //*************************************************************************************************
1057 template< typename MT, bool SO, bool DF >
1058 struct IsPadded< StrictlyLowerMatrix<MT,SO,DF> >
1059  : public BoolConstant< IsPadded<MT>::value >
1060 {};
1062 //*************************************************************************************************
1063 
1064 
1065 
1066 
1067 //=================================================================================================
1068 //
1069 // ISRESIZABLE SPECIALIZATIONS
1070 //
1071 //=================================================================================================
1072 
1073 //*************************************************************************************************
1075 template< typename MT, bool SO, bool DF >
1076 struct IsResizable< StrictlyLowerMatrix<MT,SO,DF> >
1077  : public BoolConstant< IsResizable<MT>::value >
1078 {};
1080 //*************************************************************************************************
1081 
1082 
1083 
1084 
1085 //=================================================================================================
1086 //
1087 // ISSHRINKABLE SPECIALIZATIONS
1088 //
1089 //=================================================================================================
1090 
1091 //*************************************************************************************************
1093 template< typename MT, bool SO, bool DF >
1094 struct IsShrinkable< StrictlyLowerMatrix<MT,SO,DF> >
1095  : public BoolConstant< IsShrinkable<MT>::value >
1096 {};
1098 //*************************************************************************************************
1099 
1100 
1101 
1102 
1103 //=================================================================================================
1104 //
1105 // REMOVEADAPTOR SPECIALIZATIONS
1106 //
1107 //=================================================================================================
1108 
1109 //*************************************************************************************************
1111 template< typename MT, bool SO, bool DF >
1112 struct RemoveAdaptor< StrictlyLowerMatrix<MT,SO,DF> >
1113 {
1114  using Type = MT;
1115 };
1117 //*************************************************************************************************
1118 
1119 
1120 
1121 
1122 //=================================================================================================
1123 //
1124 // ADDTRAIT SPECIALIZATIONS
1125 //
1126 //=================================================================================================
1127 
1128 //*************************************************************************************************
1130 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1131 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1132 {
1134 };
1135 
1136 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1137 struct AddTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1138 {
1139  using Type = AddTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1140 };
1141 
1142 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1143 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1144 {
1146 };
1147 
1148 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1149 struct AddTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1150 {
1151  using Type = AddTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1152 };
1153 
1154 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1155 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1156 {
1157  using Type = AddTrait_< MT, DynamicMatrix<T,SO2> >;
1158 };
1159 
1160 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1161 struct AddTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1162 {
1163  using Type = AddTrait_< DynamicMatrix<T,SO1>, MT >;
1164 };
1165 
1166 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1167 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1168 {
1170 };
1171 
1172 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1173 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1174 {
1175  using Type = AddTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1176 };
1177 
1178 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1179 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1180 {
1182 };
1183 
1184 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1185 struct AddTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1186 {
1187  using Type = AddTrait_< CompressedMatrix<T,SO1>, MT >;
1188 };
1189 
1190 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1191 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1192 {
1194 };
1195 
1196 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1197 struct AddTrait< IdentityMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1198 {
1200 };
1201 
1202 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1203 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1204 {
1205  using Type = AddTrait_<MT1,MT2>;
1206 };
1207 
1208 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1209 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1210 {
1211  using Type = AddTrait_<MT1,MT2>;
1212 };
1213 
1214 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1215 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1216 {
1217  using Type = AddTrait_<MT1,MT2>;
1218 };
1219 
1220 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1221 struct AddTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1222 {
1223  using Type = AddTrait_<MT1,MT2>;
1224 };
1225 
1226 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1227 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1228 {
1229  using Type = LowerMatrix< AddTrait_<MT1,MT2> >;
1230 };
1231 
1232 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1233 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1234 {
1235  using Type = LowerMatrix< AddTrait_<MT1,MT2> >;
1236 };
1237 
1238 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1239 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1240 {
1241  using Type = UniLowerMatrix< AddTrait_<MT1,MT2> >;
1242 };
1243 
1244 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1245 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1246 {
1247  using Type = UniLowerMatrix< AddTrait_<MT1,MT2> >;
1248 };
1249 
1250 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1251 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1252 {
1254 };
1256 //*************************************************************************************************
1257 
1258 
1259 
1260 
1261 //=================================================================================================
1262 //
1263 // SUBTRAIT SPECIALIZATIONS
1264 //
1265 //=================================================================================================
1266 
1267 //*************************************************************************************************
1269 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1270 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1271 {
1273 };
1274 
1275 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1276 struct SubTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1277 {
1278  using Type = SubTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1279 };
1280 
1281 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1282 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1283 {
1285 };
1286 
1287 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1288 struct SubTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1289 {
1290  using Type = SubTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1291 };
1292 
1293 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1294 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1295 {
1296  using Type = SubTrait_< MT, DynamicMatrix<T,SO2> >;
1297 };
1298 
1299 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1300 struct SubTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1301 {
1302  using Type = SubTrait_< DynamicMatrix<T,SO1>, MT >;
1303 };
1304 
1305 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1306 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1307 {
1309 };
1310 
1311 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1312 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1313 {
1314  using Type = SubTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1315 };
1316 
1317 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1318 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1319 {
1321 };
1322 
1323 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1324 struct SubTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1325 {
1326  using Type = SubTrait_< CompressedMatrix<T,SO1>, MT >;
1327 };
1328 
1329 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1330 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1331 {
1333 };
1334 
1335 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1336 struct SubTrait< IdentityMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1337 {
1339 };
1340 
1341 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1342 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1343 {
1344  using Type = SubTrait_<MT1,MT2>;
1345 };
1346 
1347 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1348 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1349 {
1350  using Type = SubTrait_<MT1,MT2>;
1351 };
1352 
1353 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1354 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1355 {
1356  using Type = SubTrait_<MT1,MT2>;
1357 };
1358 
1359 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1360 struct SubTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1361 {
1362  using Type = SubTrait_<MT1,MT2>;
1363 };
1364 
1365 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1366 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1367 {
1368  using Type = LowerMatrix< SubTrait_<MT1,MT2> >;
1369 };
1370 
1371 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1372 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1373 {
1374  using Type = LowerMatrix< SubTrait_<MT1,MT2> >;
1375 };
1376 
1377 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1378 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1379 {
1380  using Type = LowerMatrix< SubTrait_<MT1,MT2> >;
1381 };
1382 
1383 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1384 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1385 {
1386  using Type = UniLowerMatrix< SubTrait_<MT1,MT2> >;
1387 };
1388 
1389 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1390 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1391 {
1393 };
1395 //*************************************************************************************************
1396 
1397 
1398 
1399 
1400 //=================================================================================================
1401 //
1402 // SCHURTRAIT SPECIALIZATIONS
1403 //
1404 //=================================================================================================
1405 
1406 //*************************************************************************************************
1408 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1409 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1410 {
1412 };
1413 
1414 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1415 struct SchurTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1416 {
1418 };
1419 
1420 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1421 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1422 {
1424 };
1425 
1426 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1427 struct SchurTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1428 {
1430 };
1431 
1432 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1433 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1434 {
1436 };
1437 
1438 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1439 struct SchurTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1440 {
1442 };
1443 
1444 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1445 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1446 {
1448 };
1449 
1450 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1451 struct SchurTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1452 {
1454 };
1455 
1456 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1457 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1458 {
1460 };
1461 
1462 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1463 struct SchurTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1464 {
1466 };
1467 
1468 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1469 struct SchurTrait< StrictlyLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1470 {
1472 };
1473 
1474 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1475 struct SchurTrait< IdentityMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1476 {
1478 };
1479 
1480 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1481 struct SchurTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1482 {
1484 };
1485 
1486 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1487 struct SchurTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1488 {
1490 };
1491 
1492 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1493 struct SchurTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1494 {
1496 };
1497 
1498 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1499 struct SchurTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1500 {
1502 };
1503 
1504 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1505 struct SchurTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1506 {
1508 };
1509 
1510 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1511 struct SchurTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1512 {
1514 };
1515 
1516 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1517 struct SchurTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1518 {
1520 };
1521 
1522 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1523 struct SchurTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1524 {
1526 };
1527 
1528 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1529 struct SchurTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1530 {
1532 };
1534 //*************************************************************************************************
1535 
1536 
1537 
1538 
1539 //=================================================================================================
1540 //
1541 // MULTTRAIT SPECIALIZATIONS
1542 //
1543 //=================================================================================================
1544 
1545 //*************************************************************************************************
1547 template< typename MT, bool SO, bool DF, typename T >
1548 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
1549 {
1551 };
1552 
1553 template< typename T, typename MT, bool SO, bool DF >
1554 struct MultTrait< T, StrictlyLowerMatrix<MT,SO,DF>, EnableIf_< IsNumeric<T> > >
1555 {
1557 };
1558 
1559 template< typename MT, bool SO, bool DF, typename T, size_t N >
1560 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, StaticVector<T,N,false> >
1561 {
1563 };
1564 
1565 template< typename T, size_t N, typename MT, bool SO, bool DF >
1566 struct MultTrait< StaticVector<T,N,true>, StrictlyLowerMatrix<MT,SO,DF> >
1567 {
1568  using Type = MultTrait_< StaticVector<T,N,true>, MT >;
1569 };
1570 
1571 template< typename MT, bool SO, bool DF, typename T, size_t N >
1572 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, HybridVector<T,N,false> >
1573 {
1575 };
1576 
1577 template< typename T, size_t N, typename MT, bool SO, bool DF >
1578 struct MultTrait< HybridVector<T,N,true>, StrictlyLowerMatrix<MT,SO,DF> >
1579 {
1580  using Type = MultTrait_< HybridVector<T,N,true>, MT >;
1581 };
1582 
1583 template< typename MT, bool SO, bool DF, typename T >
1584 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, DynamicVector<T,false> >
1585 {
1587 };
1588 
1589 template< typename T, typename MT, bool SO, bool DF >
1590 struct MultTrait< DynamicVector<T,true>, StrictlyLowerMatrix<MT,SO,DF> >
1591 {
1592  using Type = MultTrait_< DynamicVector<T,true>, MT >;
1593 };
1594 
1595 template< typename MT, bool SO, bool DF, typename T, bool AF, bool PF >
1596 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, CustomVector<T,AF,PF,false> >
1597 {
1599 };
1600 
1601 template< typename T, bool AF, bool PF, typename MT, bool SO, bool DF >
1602 struct MultTrait< CustomVector<T,AF,PF,true>, StrictlyLowerMatrix<MT,SO,DF> >
1603 {
1604  using Type = MultTrait_< CustomVector<T,AF,PF,true>, MT >;
1605 };
1606 
1607 template< typename MT, bool SO, bool DF, typename T >
1608 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, CompressedVector<T,false> >
1609 {
1611 };
1612 
1613 template< typename T, typename MT, bool SO, bool DF >
1614 struct MultTrait< CompressedVector<T,true>, StrictlyLowerMatrix<MT,SO,DF> >
1615 {
1616  using Type = MultTrait_< CompressedVector<T,true>, MT >;
1617 };
1618 
1619 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1620 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
1621 {
1623 };
1624 
1625 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1626 struct MultTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1627 {
1628  using Type = MultTrait_< StaticMatrix<T,M,N,SO1>, MT >;
1629 };
1630 
1631 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
1632 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
1633 {
1635 };
1636 
1637 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
1638 struct MultTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1639 {
1640  using Type = MultTrait_< HybridMatrix<T,M,N,SO1>, MT >;
1641 };
1642 
1643 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1644 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
1645 {
1646  using Type = MultTrait_< MT, DynamicMatrix<T,SO2> >;
1647 };
1648 
1649 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1650 struct MultTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1651 {
1652  using Type = MultTrait_< DynamicMatrix<T,SO1>, MT >;
1653 };
1654 
1655 template< typename MT, bool SO1, bool DF, typename T, bool AF, bool PF, bool SO2 >
1656 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, CustomMatrix<T,AF,PF,SO2> >
1657 {
1659 };
1660 
1661 template< typename T, bool AF, bool PF, bool SO1, typename MT, bool SO2, bool DF >
1662 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1663 {
1664  using Type = MultTrait_< CustomMatrix<T,AF,PF,SO1>, MT >;
1665 };
1666 
1667 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1668 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
1669 {
1671 };
1672 
1673 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1674 struct MultTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1675 {
1676  using Type = MultTrait_< CompressedMatrix<T,SO1>, MT >;
1677 };
1678 
1679 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
1680 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, IdentityMatrix<T,SO2> >
1681 {
1683 };
1684 
1685 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
1686 struct MultTrait< IdentityMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
1687 {
1689 };
1690 
1691 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
1692 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
1693 {
1694  using Type = MultTrait_<MT1,MT2>;
1695 };
1696 
1697 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
1698 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1699 {
1700  using Type = MultTrait_<MT1,MT2>;
1701 };
1702 
1703 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1704 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, HermitianMatrix<MT2,SO2,DF2> >
1705 {
1706  using Type = MultTrait_<MT1,MT2>;
1707 };
1708 
1709 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1710 struct MultTrait< HermitianMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1711 {
1712  using Type = MultTrait_<MT1,MT2>;
1713 };
1714 
1715 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1716 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
1717 {
1719 };
1720 
1721 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1722 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1723 {
1725 };
1726 
1727 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1728 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
1729 {
1731 };
1732 
1733 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1734 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1735 {
1737 };
1738 
1739 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1740 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
1741 {
1743 };
1745 //*************************************************************************************************
1746 
1747 
1748 
1749 
1750 //=================================================================================================
1751 //
1752 // DIVTRAIT SPECIALIZATIONS
1753 //
1754 //=================================================================================================
1755 
1756 //*************************************************************************************************
1758 template< typename MT, bool SO, bool DF, typename T >
1759 struct DivTrait< StrictlyLowerMatrix<MT,SO,DF>, T, EnableIf_< IsNumeric<T> > >
1760 {
1761  using Type = StrictlyLowerMatrix< DivTrait_<MT,T> >;
1762 };
1764 //*************************************************************************************************
1765 
1766 
1767 
1768 
1769 //=================================================================================================
1770 //
1771 // UNARYMAPTRAIT SPECIALIZATIONS
1772 //
1773 //=================================================================================================
1774 
1775 //*************************************************************************************************
1777 template< typename MT, bool SO, bool DF >
1778 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Abs >
1779 {
1781 };
1782 
1783 template< typename MT, bool SO, bool DF >
1784 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Floor >
1785 {
1787 };
1788 
1789 template< typename MT, bool SO, bool DF >
1790 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Ceil >
1791 {
1793 };
1794 
1795 template< typename MT, bool SO, bool DF >
1796 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Trunc >
1797 {
1799 };
1800 
1801 template< typename MT, bool SO, bool DF >
1802 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Round >
1803 {
1805 };
1806 
1807 template< typename MT, bool SO, bool DF >
1808 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Conj >
1809 {
1811 };
1812 
1813 template< typename MT, bool SO, bool DF >
1814 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Real >
1815 {
1817 };
1818 
1819 template< typename MT, bool SO, bool DF >
1820 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Imag >
1821 {
1823 };
1824 
1825 template< typename MT, bool SO, bool DF >
1826 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Sqrt >
1827 {
1829 };
1830 
1831 template< typename MT, bool SO, bool DF >
1832 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Cbrt >
1833 {
1835 };
1836 
1837 template< typename MT, bool SO, bool DF >
1838 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Sin >
1839 {
1841 };
1842 
1843 template< typename MT, bool SO, bool DF >
1844 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Asin >
1845 {
1847 };
1848 
1849 template< typename MT, bool SO, bool DF >
1850 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Sinh >
1851 {
1853 };
1854 
1855 template< typename MT, bool SO, bool DF >
1856 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Asinh >
1857 {
1859 };
1860 
1861 template< typename MT, bool SO, bool DF >
1862 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Tan >
1863 {
1865 };
1866 
1867 template< typename MT, bool SO, bool DF >
1868 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Atan >
1869 {
1871 };
1872 
1873 template< typename MT, bool SO, bool DF >
1874 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Tanh >
1875 {
1877 };
1878 
1879 template< typename MT, bool SO, bool DF >
1880 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Atanh >
1881 {
1883 };
1884 
1885 template< typename MT, bool SO, bool DF >
1886 struct UnaryMapTrait< StrictlyLowerMatrix<MT,SO,DF>, Erf >
1887 {
1889 };
1891 //*************************************************************************************************
1892 
1893 
1894 
1895 
1896 //=================================================================================================
1897 //
1898 // BINARYMAPTRAIT SPECIALIZATIONS
1899 //
1900 //=================================================================================================
1901 
1902 //*************************************************************************************************
1904 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1905 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2>, Min >
1906 {
1908 };
1909 
1910 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1911 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2>, Max >
1912 {
1914 };
1915 
1916 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1917 struct BinaryMapTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Min >
1918 {
1920 };
1921 
1922 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1923 struct BinaryMapTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Max >
1924 {
1926 };
1927 
1928 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1929 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2>, Min >
1930 {
1932 };
1933 
1934 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1935 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2>, Max >
1936 {
1938 };
1939 
1940 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1941 struct BinaryMapTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Min >
1942 {
1944 };
1945 
1946 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1947 struct BinaryMapTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Max >
1948 {
1950 };
1951 
1952 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1953 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Min >
1954 {
1956 };
1957 
1958 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
1959 struct BinaryMapTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2>, Max >
1960 {
1962 };
1964 //*************************************************************************************************
1965 
1966 
1967 
1968 
1969 //=================================================================================================
1970 //
1971 // DECLSYMTRAIT SPECIALIZATIONS
1972 //
1973 //=================================================================================================
1974 
1975 //*************************************************************************************************
1977 template< typename MT, bool SO, bool DF >
1978 struct DeclSymTrait< StrictlyLowerMatrix<MT,SO,DF> >
1979 {
1980  using Type = DiagonalMatrix<MT>;
1981 };
1983 //*************************************************************************************************
1984 
1985 
1986 
1987 
1988 //=================================================================================================
1989 //
1990 // DECLHERMTRAIT SPECIALIZATIONS
1991 //
1992 //=================================================================================================
1993 
1994 //*************************************************************************************************
1996 template< typename MT, bool SO, bool DF >
1997 struct DeclHermTrait< StrictlyLowerMatrix<MT,SO,DF> >
1998 {
1999  using Type = HermitianMatrix<MT>;
2000 };
2002 //*************************************************************************************************
2003 
2004 
2005 
2006 
2007 //=================================================================================================
2008 //
2009 // DECLLOWTRAIT SPECIALIZATIONS
2010 //
2011 //=================================================================================================
2012 
2013 //*************************************************************************************************
2015 template< typename MT, bool SO, bool DF >
2016 struct DeclLowTrait< StrictlyLowerMatrix<MT,SO,DF> >
2017 {
2018  using Type = StrictlyLowerMatrix<MT,SO,DF>;
2019 };
2021 //*************************************************************************************************
2022 
2023 
2024 
2025 
2026 //=================================================================================================
2027 //
2028 // DECLUPPTRAIT SPECIALIZATIONS
2029 //
2030 //=================================================================================================
2031 
2032 //*************************************************************************************************
2034 template< typename MT, bool SO, bool DF >
2035 struct DeclUppTrait< StrictlyLowerMatrix<MT,SO,DF> >
2036 {
2037  using Type = DiagonalMatrix<MT>;
2038 };
2040 //*************************************************************************************************
2041 
2042 
2043 
2044 
2045 //=================================================================================================
2046 //
2047 // DECLDIAGTRAIT SPECIALIZATIONS
2048 //
2049 //=================================================================================================
2050 
2051 //*************************************************************************************************
2053 template< typename MT, bool SO, bool DF >
2054 struct DeclDiagTrait< StrictlyLowerMatrix<MT,SO,DF> >
2055 {
2056  using Type = DiagonalMatrix<MT>;
2057 };
2059 //*************************************************************************************************
2060 
2061 
2062 
2063 
2064 //=================================================================================================
2065 //
2066 // HIGHTYPE SPECIALIZATIONS
2067 //
2068 //=================================================================================================
2069 
2070 //*************************************************************************************************
2072 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2073 struct HighType< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2074 {
2076 };
2078 //*************************************************************************************************
2079 
2080 
2081 
2082 
2083 //=================================================================================================
2084 //
2085 // LOWTYPE SPECIALIZATIONS
2086 //
2087 //=================================================================================================
2088 
2089 //*************************************************************************************************
2091 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
2092 struct LowType< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2093 {
2095 };
2097 //*************************************************************************************************
2098 
2099 
2100 
2101 
2102 //=================================================================================================
2103 //
2104 // SUBMATRIXTRAIT SPECIALIZATIONS
2105 //
2106 //=================================================================================================
2107 
2108 //*************************************************************************************************
2110 template< typename MT, bool SO, bool DF >
2111 struct SubmatrixTrait< StrictlyLowerMatrix<MT,SO,DF> >
2112 {
2113  using Type = SubmatrixTrait_<MT>;
2114 };
2116 //*************************************************************************************************
2117 
2118 
2119 
2120 
2121 //=================================================================================================
2122 //
2123 // ROWTRAIT SPECIALIZATIONS
2124 //
2125 //=================================================================================================
2126 
2127 //*************************************************************************************************
2129 template< typename MT, bool SO, bool DF >
2130 struct RowTrait< StrictlyLowerMatrix<MT,SO,DF> >
2131 {
2132  using Type = RowTrait_<MT>;
2133 };
2135 //*************************************************************************************************
2136 
2137 
2138 
2139 
2140 //=================================================================================================
2141 //
2142 // COLUMNTRAIT SPECIALIZATIONS
2143 //
2144 //=================================================================================================
2145 
2146 //*************************************************************************************************
2148 template< typename MT, bool SO, bool DF >
2149 struct ColumnTrait< StrictlyLowerMatrix<MT,SO,DF> >
2150 {
2151  using Type = ColumnTrait_<MT>;
2152 };
2154 //*************************************************************************************************
2155 
2156 } // namespace blaze
2157 
2158 #endif
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 Rows type trait.
Header file for the UNUSED_PARAMETER function template.
StrictlyLowerMatrix specialization for sparse matrices.
Header file for the subtraction trait.
Header file for the implementation of the base template of the StrictlyLowerMatrix.
Header file for the row trait.
Header file for the declherm trait.
Base template for the SubmatrixTrait class.
Definition: SubmatrixTrait.h:128
Base template for the ColumnTrait class.
Definition: ColumnTrait.h:127
typename RowTrait< MT >::Type RowTrait_
Auxiliary alias declaration for the RowTrait type trait.The RowTrait_ alias declaration provides a co...
Definition: RowTrait.h:162
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:133
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:124
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:198
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:560
const ElementType_< MT > min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1762
typename MultTrait< T1, T2 >::Type MultTrait_
Auxiliary alias declaration for the MultTrait class template.The MultTrait_ alias declaration provide...
Definition: MultTrait.h:250
Column< MT > column(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific column of the given matrix.
Definition: Column.h:124
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:78
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:129
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.
Row< MT > row(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific row of the given matrix.
Definition: Row.h:124
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:127
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.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
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.
Header file for the Columns type trait.
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:3087
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
Compile time check for square matrices.This type trait tests whether or not the given template parame...
Definition: IsSquare.h:88
Header file for the IsAligned type trait.
BLAZE_ALWAYS_INLINE size_t columns(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of columns of the matrix.
Definition: Matrix.h:340
Base template for the DeclSymTrait class.
Definition: DeclSymTrait.h:134
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:264
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
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:580
Header file for the IsPadded type trait.
Header file for the IsAdaptor type trait.
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:139
Base template for the DeclHermTrait class.
Definition: DeclHermTrait.h:134
Base template for the MultTrait class.
Definition: MultTrait.h:139
Header file for the addition trait.
Header file for the division trait.
Header file for the submatrix trait.
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:614
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:270
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
typename SubmatrixTrait< MT >::Type SubmatrixTrait_
Auxiliary alias declaration for the SubmatrixTrait type trait.The SubmatrixTrait_ alias declaration p...
Definition: SubmatrixTrait.h:163
Base template for the DivTrait class.
Definition: DivTrait.h:139
typename ColumnTrait< MT >::Type ColumnTrait_
Auxiliary alias declaration for the ColumnTrait type trait.The ColumnTrait_ alias declaration provide...
Definition: ColumnTrait.h:162
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:324
Base template for the DeclLowTrait class.
Definition: DeclLowTrait.h:133
Removal of top level adaptor types.In case the given type is an adaptor type (SymmetricMatrix, LowerMatrix, UpperMatrix, ...), the RemoveAdaptor type trait removes the adaptor and extracts the contained general matrix type. Else the given type is returned as is. Note that cv-qualifiers are preserved.
Definition: RemoveAdaptor.h:76
Base class for N-dimensional vectors.The Vector class is a base class for all arbitrarily sized (N-di...
Definition: Forward.h:177
typename SubTrait< T1, T2 >::Type SubTrait_
Auxiliary alias declaration for the SubTrait class template.The SubTrait_ alias declaration provides ...
Definition: SubTrait.h:250
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:130
Header file for the IntegralConstant class template.
Compile time evaluation of the number of columns of a matrix.The Columns type trait evaluates the num...
Definition: Columns.h:75
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:252
Compile time evaluation of the number of rows of a matrix.The Rows type trait evaluates the number of...
Definition: Rows.h:75
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:600
Base template for the SubTrait class.
Definition: SubTrait.h:139
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:133
Base template for the BinaryMapTrait class.
Definition: BinaryMapTrait.h:119
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
Base template for the UnaryMapTrait class.
Definition: UnaryMapTrait.h:117
typename AddTrait< T1, T2 >::Type AddTrait_
Auxiliary alias declaration for the AddTrait class template.The AddTrait_ alias declaration provides ...
Definition: AddTrait.h:250
#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.