35 #ifndef _BLAZE_MATH_ADAPTORS_STRICTLYLOWERMATRIX_H_ 36 #define _BLAZE_MATH_ADAPTORS_STRICTLYLOWERMATRIX_H_ 110 template<
typename MT,
bool SO,
bool DF >
111 void reset( StrictlyLowerMatrix<MT,SO,DF>& m );
113 template<
typename MT,
bool SO,
bool DF >
114 void reset( StrictlyLowerMatrix<MT,SO,DF>& m,
size_t i );
116 template<
typename MT,
bool SO,
bool DF >
117 void clear( StrictlyLowerMatrix<MT,SO,DF>& m );
119 template<
bool RF,
typename MT,
bool SO,
bool DF >
120 bool isDefault(
const StrictlyLowerMatrix<MT,SO,DF>& m );
122 template<
typename MT,
bool SO,
bool DF >
123 bool isIntact(
const StrictlyLowerMatrix<MT,SO,DF>& m );
125 template<
typename MT,
bool SO,
bool DF >
126 void swap( StrictlyLowerMatrix<MT,SO,DF>& a, StrictlyLowerMatrix<MT,SO,DF>& b ) noexcept;
138 template<
typename MT
161 template<
typename MT
178 template<
typename MT
203 inline bool isDefault_backend(
const StrictlyLowerMatrix<MT,SO,DF>& m,
TrueType )
205 return ( m.rows() == 0UL );
226 inline bool isDefault_backend(
const StrictlyLowerMatrix<MT,SO,DF>& m,
FalseType )
229 for(
size_t j=0UL; j<m.columns(); ++j ) {
230 for(
size_t i=j+1UL; i<m.rows(); ++i ) {
231 if( !isDefault<RF>( m(i,j) ) )
237 for(
size_t i=1UL; i<m.rows(); ++i ) {
238 for(
size_t j=0UL; j<i; ++j ) {
239 if( !isDefault<RF>( m(i,j) ) )
309 template<
typename MT
327 template<
typename MT
353 template<
typename MT
357 inline bool trySet(
const StrictlyLowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
388 template<
typename MT
393 trySet(
const StrictlyLowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
402 return ( m == 0UL ) ||
427 template<
typename MT
431 inline bool tryAdd(
const StrictlyLowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
433 return trySet( mat, i, j, value );
457 template<
typename MT
462 tryAdd(
const StrictlyLowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
464 return trySet( mat,
row,
column, m, n, value );
487 template<
typename MT
491 inline bool trySub(
const StrictlyLowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
493 return trySet( mat, i, j, value );
518 template<
typename MT
523 trySub(
const StrictlyLowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
525 return trySet( mat,
row,
column, m, n, value );
547 template<
typename MT
551 inline bool tryBitor(
const StrictlyLowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
553 return trySet( mat, i, j, value );
577 template<
typename MT
582 tryBitor(
const StrictlyLowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
584 return trySet( mat,
row,
column, m, n, value );
606 template<
typename MT
610 inline bool tryBitxor(
const StrictlyLowerMatrix<MT,SO,DF>& mat,
size_t i,
size_t j,
const ET& value )
612 return tryAdd( mat, i, j, value );
636 template<
typename MT
641 tryBitxor(
const StrictlyLowerMatrix<MT,SO,DF>& mat,
size_t row,
size_t column,
size_t m,
size_t n,
const ET& value )
643 return tryAdd( mat,
row,
column, m, n, value );
666 template<
typename MT
670 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
671 const DenseVector<VT,false>& rhs,
size_t row,
size_t column )
686 for(
size_t i=0UL; i<iend; ++i ) {
714 template<
typename MT
718 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
719 const DenseVector<VT,true>& rhs,
size_t row,
size_t column )
731 for(
size_t i=ibegin; i<(~rhs).
size(); ++i ) {
760 template<
typename MT
765 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
const DenseVector<VT,TF>& rhs,
778 for(
size_t i=0UL; i<(~rhs).
size(); ++i ) {
807 template<
typename MT
811 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
812 const SparseVector<VT,false>& rhs,
size_t row,
size_t column )
825 const auto last( (~rhs).lowerBound(
column -
row + 1UL ) );
827 for(
auto element=(~rhs).
begin(); element!=last; ++element ) {
855 template<
typename MT
859 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
860 const SparseVector<VT,true>& rhs,
size_t row,
size_t column )
870 const auto last( (~rhs).
end() );
873 for( ; element!=last; ++element ) {
902 template<
typename MT
907 inline bool tryAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
const SparseVector<VT,TF>& rhs,
920 for(
const auto& element : ~rhs ) {
949 template<
typename MT1
953 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
954 const DenseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
965 const size_t M( (~rhs).
rows() );
966 const size_t N( (~rhs).
columns() );
973 for(
size_t i=0UL; i<iend; ++i )
975 const bool containsDiagonal(
row + i >=
column );
976 const size_t jbegin( ( containsDiagonal )?(
row + i -
column ):( 0UL ) );
978 for(
size_t j=jbegin; j<N; ++j ) {
1007 template<
typename MT1
1011 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
1012 const DenseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1023 const size_t M( (~rhs).
rows() );
1024 const size_t N( (~rhs).
columns() );
1031 for(
size_t j=jbegin; j<N; ++j )
1035 for(
size_t i=0UL; i<iend; ++i ) {
1064 template<
typename MT1
1068 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
1069 const SparseMatrix<MT2,false>& rhs,
size_t row,
size_t column )
1080 const size_t M( (~rhs).
rows() );
1081 const size_t N( (~rhs).
columns() );
1088 for(
size_t i=0UL; i<iend; ++i )
1090 const bool containsDiagonal(
row + i >=
column );
1091 const size_t index( ( containsDiagonal )?(
row + i -
column ):( 0UL ) );
1093 const auto last( (~rhs).
end(i) );
1094 auto element( (~rhs).lowerBound( i, index ) );
1096 for( ; element!=last; ++element ) {
1125 template<
typename MT1
1129 inline bool tryAssign(
const StrictlyLowerMatrix<MT1,SO,DF>& lhs,
1130 const SparseMatrix<MT2,true>& rhs,
size_t row,
size_t column )
1141 const size_t M( (~rhs).
rows() );
1142 const size_t N( (~rhs).
columns() );
1149 for(
size_t j=jbegin; j<N; ++j )
1151 const size_t index(
column + j -
row + 1UL );
1152 const auto last( (~rhs).lowerBound(
min( index, M ), j ) );
1154 for(
auto element=(~rhs).
begin(j); element!=last; ++element ) {
1183 template<
typename MT
1188 inline bool tryAddAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
1189 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1191 return tryAssign( lhs, ~rhs,
row,
column );
1215 template<
typename MT
1220 inline bool tryAddAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1246 template<
typename MT1
1251 inline bool tryAddAssign(
const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
1252 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1254 return tryAssign( lhs, ~rhs,
row,
column );
1277 template<
typename MT
1282 inline bool trySubAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
1283 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1285 return tryAssign( lhs, ~rhs,
row,
column );
1309 template<
typename MT
1314 inline bool trySubAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1340 template<
typename MT1
1345 inline bool trySubAssign(
const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
1346 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1348 return tryAssign( lhs, ~rhs,
row,
column );
1371 template<
typename MT
1376 inline bool tryBitorAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
1377 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1379 return tryAssign( lhs, ~rhs,
row,
column );
1402 template<
typename MT
1407 inline bool tryBitorAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1433 template<
typename MT1
1438 inline bool tryBitorAssign(
const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
1439 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1441 return tryAssign( lhs, ~rhs,
row,
column );
1464 template<
typename MT
1469 inline bool tryBitxorAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
1470 const Vector<VT,TF>& rhs,
size_t row,
size_t column )
1472 return tryAssign( lhs, ~rhs,
row,
column );
1495 template<
typename MT
1500 inline bool tryBitxorAssign(
const StrictlyLowerMatrix<MT,SO,DF>& lhs,
const Vector<VT,TF>& rhs,
1526 template<
typename MT1
1531 inline bool tryBitxorAssign(
const StrictlyLowerMatrix<MT1,SO1,DF>& lhs,
1532 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1534 return tryAssign( lhs, ~rhs,
row,
column );
1554 template<
typename MT
1557 inline MT& derestrict( StrictlyLowerMatrix<MT,SO,DF>& m )
1575 template<
typename MT,
bool SO,
bool DF >
1576 struct Size< StrictlyLowerMatrix<MT,SO,DF>, 0UL >
1577 :
public Size<MT,0UL>
1580 template<
typename MT,
bool SO,
bool DF >
1581 struct Size< StrictlyLowerMatrix<MT,SO,DF>, 1UL >
1582 :
public Size<MT,1UL>
1598 template<
typename MT,
bool SO,
bool DF >
1599 struct MaxSize< StrictlyLowerMatrix<MT,SO,DF>, 0UL >
1600 :
public MaxSize<MT,0UL>
1603 template<
typename MT,
bool SO,
bool DF >
1604 struct MaxSize< StrictlyLowerMatrix<MT,SO,DF>, 1UL >
1605 :
public MaxSize<MT,1UL>
1621 template<
typename MT,
bool SO,
bool DF >
1622 struct IsSquare< StrictlyLowerMatrix<MT,SO,DF> >
1639 template<
typename MT,
bool SO,
bool DF >
1640 struct IsUniform< StrictlyLowerMatrix<MT,SO,DF> >
1641 :
public IsUniform<MT>
1657 template<
typename MT,
bool SO,
bool DF >
1658 struct IsSymmetric< StrictlyLowerMatrix<MT,SO,DF> >
1659 :
public IsUniform<MT>
1675 template<
typename MT,
bool SO,
bool DF >
1676 struct IsHermitian< StrictlyLowerMatrix<MT,SO,DF> >
1677 :
public IsUniform<MT>
1693 template<
typename MT,
bool SO,
bool DF >
1694 struct IsStrictlyLower< StrictlyLowerMatrix<MT,SO,DF> >
1711 template<
typename MT,
bool SO,
bool DF >
1712 struct IsStrictlyUpper< StrictlyLowerMatrix<MT,SO,DF> >
1713 :
public IsUniform<MT>
1729 template<
typename MT,
bool SO,
bool DF >
1730 struct IsAdaptor< StrictlyLowerMatrix<MT,SO,DF> >
1747 template<
typename MT,
bool SO,
bool DF >
1748 struct IsRestricted< StrictlyLowerMatrix<MT,SO,DF> >
1765 template<
typename MT,
bool SO >
1766 struct HasConstDataAccess< StrictlyLowerMatrix<MT,SO,true> >
1783 template<
typename MT,
bool SO,
bool DF >
1784 struct IsAligned< StrictlyLowerMatrix<MT,SO,DF> >
1785 :
public IsAligned<MT>
1801 template<
typename MT,
bool SO,
bool DF >
1802 struct IsContiguous< StrictlyLowerMatrix<MT,SO,DF> >
1803 :
public IsContiguous<MT>
1819 template<
typename MT,
bool SO,
bool DF >
1820 struct IsPadded< StrictlyLowerMatrix<MT,SO,DF> >
1821 :
public IsPadded<MT>
1837 template<
typename MT,
bool SO,
bool DF >
1838 struct IsResizable< StrictlyLowerMatrix<MT,SO,DF> >
1839 :
public IsResizable<MT>
1855 template<
typename MT,
bool SO,
bool DF >
1856 struct IsShrinkable< StrictlyLowerMatrix<MT,SO,DF> >
1857 :
public IsShrinkable<MT>
1873 template<
typename MT,
bool SO,
bool DF >
1874 struct RemoveAdaptor< StrictlyLowerMatrix<MT,SO,DF> >
1892 template<
typename T1,
typename T2 >
1893 struct AddTraitEval1< T1, T2
1896 ( IsStrictlyLower_v<T1> && IsStrictlyLower_v<T2> ) &&
1897 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1899 using Type = StrictlyLowerMatrix< typename AddTraitEval2<T1,T2>::Type >;
1915 template<
typename T1,
typename T2 >
1916 struct SubTraitEval1< T1, T2
1919 ( ( IsUniLower_v<T1> && IsUniLower_v<T2> ) ||
1920 ( IsStrictlyLower_v<T1> && IsStrictlyLower_v<T2> ) ) &&
1921 !( IsIdentity_v<T1> && IsIdentity_v<T2> ) &&
1922 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1924 using Type = StrictlyLowerMatrix< typename SubTraitEval2<T1,T2>::Type >;
1940 template<
typename T1,
typename T2 >
1941 struct SchurTraitEval1< T1, T2
1944 ( ( IsStrictlyLower_v<T1> && !IsUpper_v<T2> ) ||
1945 ( !IsUpper_v<T1> && IsStrictlyLower_v<T2> ) ) &&
1946 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1948 using Type = StrictlyLowerMatrix< typename SchurTraitEval2<T1,T2>::Type >;
1964 template<
typename T1,
typename T2 >
1965 struct MultTraitEval1< T1, T2
1968 ( IsStrictlyLower_v<T1> && !IsUniform_v<T1> ) > >
1970 using Type = StrictlyLowerMatrix< typename MultTraitEval2<T1,T2>::Type >;
1973 template<
typename T1,
typename T2 >
1974 struct MultTraitEval1< T1, T2
1977 ( IsStrictlyLower_v<T2> && !IsUniform_v<T2> ) > >
1979 using Type = StrictlyLowerMatrix< typename MultTraitEval2<T1,T2>::Type >;
1982 template<
typename T1,
typename T2 >
1983 struct MultTraitEval1< T1, T2
1986 ( ( IsStrictlyLower_v<T1> && IsLower_v<T2> ) ||
1987 ( IsLower_v<T1> && IsStrictlyLower_v<T2> ) ) &&
1988 !( IsIdentity_v<T1> || IsIdentity_v<T2> ) &&
1989 !( IsZero_v<T1> || IsZero_v<T2> ) > >
1991 using Type = StrictlyLowerMatrix< typename MultTraitEval2<T1,T2>::Type >;
2007 template<
typename T1,
typename T2 >
2008 struct KronTraitEval1< T1, T2
2011 ( ( IsStrictlyLower_v<T1> ) ||
2012 ( IsLower_v<T1> && IsStrictlyLower_v<T2> ) ) &&
2013 !( IsZero_v<T1> || IsZero_v<T2> ) > >
2015 using Type = StrictlyLowerMatrix< typename KronTraitEval2<T1,T2>::Type >;
2031 template<
typename T1,
typename T2 >
2032 struct DivTraitEval1< T1, T2
2035 using Type = StrictlyLowerMatrix< typename DivTraitEval2<T1,T2>::Type >;
2051 template<
typename T,
typename OP >
2052 struct UnaryMapTraitEval1< T, OP
2054 !YieldsZero_v<OP,T> > >
2056 using Type = StrictlyLowerMatrix< typename UnaryMapTraitEval2<T,OP>::Type, StorageOrder_v<T> >;
2064 template<
typename T1,
typename T2,
typename OP >
2065 struct BinaryMapTraitEval1< T1, T2, OP
2067 !YieldsDiagonal_v<OP,T1,T2> > >
2069 using Type = StrictlyLowerMatrix< typename BinaryMapTraitEval2<T1,T2,OP>::Type >;
2085 template<
typename MT,
bool SO,
bool DF >
2086 struct DeclSymTrait< StrictlyLowerMatrix<MT,SO,DF> >
2088 using Type = ZeroMatrix< typename MT::ElementType, SO >;
2104 template<
typename MT,
bool SO,
bool DF >
2105 struct DeclHermTrait< StrictlyLowerMatrix<MT,SO,DF> >
2107 using Type = ZeroMatrix< typename MT::ElementType, SO >;
2123 template<
typename MT,
bool SO,
bool DF >
2124 struct DeclLowTrait< StrictlyLowerMatrix<MT,SO,DF> >
2126 using Type = StrictlyLowerMatrix<MT,SO,DF>;
2142 template<
typename MT,
bool SO,
bool DF >
2143 struct DeclUppTrait< StrictlyLowerMatrix<MT,SO,DF> >
2145 using Type = ZeroMatrix< typename MT::ElementType, SO >;
2161 template<
typename MT,
bool SO,
bool DF >
2162 struct DeclDiagTrait< StrictlyLowerMatrix<MT,SO,DF> >
2164 using Type = ZeroMatrix< typename MT::ElementType, SO >;
2180 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2181 struct HighType< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2183 using Type = StrictlyLowerMatrix< typename HighType<MT1,MT2>::Type >;
2199 template<
typename MT1,
bool SO1,
bool DF1,
typename MT2,
bool SO2,
bool DF2 >
2200 struct LowType< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
2202 using Type = StrictlyLowerMatrix< typename LowType<MT1,MT2>::Type >;
2218 template<
typename MT,
size_t I,
size_t N >
2219 struct SubmatrixTraitEval1< MT, I, I, N, N
2222 using Type = StrictlyLowerMatrix< typename SubmatrixTraitEval2<MT,I,I,N,N>::Type >;
BoolConstant< false > FalseType
Type/value traits base class.The FalseType class is used as base class for type traits and value trai...
Definition: IntegralConstant.h:121
decltype(auto) column(Matrix< MT, SO > &matrix, RCAs... args)
Creating a view on a specific column of the given matrix.
Definition: Column.h:133
Headerfile for the generic min algorithm.
Header file for the decldiag trait.
Header file for the Schur product trait.
constexpr bool IsMatrix_v
Auxiliary variable template for the IsMatrix type trait.The IsMatrix_v variable template provides a c...
Definition: IsMatrix.h:138
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 declherm trait.
Header file for the YieldsStrictlyLower type trait.
Header file for the YieldsZero type trait.
MT::Iterator begin(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator to the first element of row/column i.
Definition: Matrix.h:372
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:595
Header file for the MAYBE_UNUSED function template.
Header file for the IsIdentity type trait.
BoolConstant< true > TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: IntegralConstant.h:132
Header file for all forward declarations of the math module.
Header file for the IsUniLower type trait.
Header file for the MaxSize type trait.
constexpr size_t columns(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of columns of the matrix.
Definition: Matrix.h:514
constexpr bool IsStrictlyLower_v
Auxiliary variable template for the IsStrictlyLower type trait.The IsStrictlyLower_v variable templat...
Definition: IsStrictlyLower.h:173
constexpr bool YieldsStrictlyLower_v
Auxiliary variable template for the YieldsStrictlyLower type trait.The YieldsStrictlyLower_v variable...
Definition: YieldsStrictlyLower.h:124
Header file for the IsMatrix type trait.
Header file for the IsSquare type trait.
typename EnableIf< Condition, T >::Type EnableIf_t
Auxiliary type for the EnableIf class template.The EnableIf_t alias declaration provides a convenient...
Definition: EnableIf.h:138
Header file for the LowType type trait.
Header file for the multiplication trait.
Header file for the IsStrictlyUpper type trait.
Header file for the IsSymmetric type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:58
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
Header file for the IsShrinkable type trait.
StrictlyLowerMatrix specialization for dense matrices.
decltype(auto) min(const DenseMatrix< MT1, SO1 > &lhs, const DenseMatrix< MT2, SO2 > &rhs)
Computes the componentwise minimum of the dense matrices lhs and rhs.
Definition: DMatDMatMapExpr.h:1162
Header file for the decllow trait.
constexpr bool IsNumeric_v
Auxiliary variable template for the IsNumeric type trait.The IsNumeric_v variable template provides a...
Definition: IsNumeric.h:143
Header file for the IsLower type trait.
constexpr void MAYBE_UNUSED(const Args &...)
Suppression of unused parameter warnings.
Definition: MaybeUnused.h:81
Header file for the IsAligned type trait.
Header file for the Kron product trait.
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:438
Header file for the RemoveAdaptor type trait.
Constraint on the data type.
Header file for the EnableIf class template.
Header file for the IsStrictlyLower type trait.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:615
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:137
Header file for the IsNumeric type trait.
Header file for the HasConstDataAccess type trait.
Compile time check for resizable data types.This type trait tests whether the given data type is a re...
Definition: IsResizable.h:74
Header file for the declupp trait.
Header file for run time assertion macros.
Header file for the addition trait.
Header file for the division trait.
Header file for the submatrix trait.
Header file for the IsContiguous type trait.
decltype(auto) row(Matrix< MT, SO > &, RRAs...)
Creating a view on a specific row of the given matrix.
Definition: Row.h:133
Header file for the IsZero type trait.
Header file for the declsym trait.
Matrix adapter for strictly lower triangular matrices.
Definition: BaseTemplate.h:558
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:282
constexpr size_t size(const Matrix< MT, SO > &matrix) noexcept
Returns the total number of elements of the matrix.
Definition: Matrix.h:530
#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
constexpr size_t rows(const Matrix< MT, SO > &matrix) noexcept
Returns the current number of rows of the matrix.
Definition: Matrix.h:498
Header file for the YieldsDiagonal type trait.
Header file for the StorageOrder type trait.
Header file for the IntegralConstant class template.
Header file for the map trait.
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:264
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:635
Header file for the IsUpper type trait.
Header file for the IsHermitian type trait.
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
Header file for the Size type trait.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression,...
Definition: Assert.h:101
Header file for the HighType type trait.