35 #ifndef _BLAZE_MATH_DENSE_DENSEMATRIX_H_ 36 #define _BLAZE_MATH_DENSE_DENSEMATRIX_H_ 96 template<
typename T1,
typename T2 >
97 auto operator==(
const DenseMatrix<T1,false>& mat, T2 scalar )
98 -> EnableIf_t< IsNumeric_v<T2>,
bool >;
100 template<
typename T1,
typename T2 >
101 auto operator==(
const DenseMatrix<T1,true>& mat, T2 scalar )
102 -> EnableIf_t< IsNumeric_v<T2>,
bool >;
104 template<
typename T1,
typename T2,
bool SO >
105 auto operator==( T1 scalar,
const DenseMatrix<T2,SO>& mat )
106 -> EnableIf_t< IsNumeric_v<T2>,
bool >;
108 template<
typename T1,
typename T2,
bool SO >
109 auto operator!=(
const DenseMatrix<T1,SO>& mat, T2 scalar )
110 -> EnableIf_t< IsNumeric_v<T2>,
bool >;
112 template<
typename T1,
typename T2,
bool SO >
113 auto operator!=( T1 scalar,
const DenseMatrix<T2,SO>& mat )
114 -> EnableIf_t< IsNumeric_v<T2>,
bool >;
116 template<
typename MT,
bool SO,
typename ST >
117 auto operator*=( DenseMatrix<MT,SO>& mat, ST scalar )
118 -> EnableIf_t< IsNumeric_v<ST>, MT& >;
120 template<
typename MT,
bool SO,
typename ST >
121 auto operator*=( DenseMatrix<MT,SO>&& mat, ST scalar )
122 -> EnableIf_t< IsNumeric_v<ST>, MT& >;
124 template<
typename MT,
bool SO,
typename ST >
125 auto operator/=( DenseMatrix<MT,SO>& mat, ST scalar )
126 -> EnableIf_t< IsNumeric_v<ST>, MT& >;
128 template<
typename MT,
bool SO,
typename ST >
129 auto operator/=( DenseMatrix<MT,SO>&& mat, ST scalar )
130 -> EnableIf_t< IsNumeric_v<ST>, MT& >;
147 template<
typename T1
159 for(
size_t i=0; i<A.rows(); ++i ) {
160 for(
size_t j=0; j<A.columns(); ++j ) {
161 if( !
equal( A(i,j), scalar ) )
return false;
182 template<
typename T1
194 for(
size_t j=0; j<A.columns(); ++j ) {
195 for(
size_t i=0; i<A.rows(); ++i ) {
196 if( !
equal( A(i,j), scalar ) )
return false;
217 template<
typename T1
223 return ( mat == scalar );
240 template<
typename T1
246 return !( mat == scalar );
263 template<
typename T1
269 return !( mat == scalar );
287 template<
typename MT
295 if( IsRestricted_v<MT> ) {
296 if( !tryMult( ~mat, 0UL, 0UL, (~mat).
rows(), (~mat).
columns(), scalar ) ) {
301 BLAZE_DECLTYPE_AUTO( left, derestrict( ~mat ) );
325 template<
typename MT
351 template<
typename MT
361 if( IsRestricted_v<MT> ) {
362 if( !tryDiv( ~mat, 0UL, 0UL, (~mat).
rows(), (~mat).
columns(), scalar ) ) {
367 BLAZE_DECLTYPE_AUTO( left, derestrict( ~mat ) );
393 template<
typename MT
415 template<
typename MT,
bool SO >
416 bool isnan(
const DenseMatrix<MT,SO>& dm );
418 template<
bool RF,
typename MT,
bool SO >
421 template<
bool RF,
typename MT,
bool SO >
424 template<
bool RF,
typename MT,
bool SO >
425 bool isUniform(
const DenseMatrix<MT,SO>& dm );
427 template<
bool RF,
typename MT,
bool SO >
428 bool isZero(
const DenseMatrix<MT,SO>& dm );
430 template<
bool RF,
typename MT,
bool SO >
431 bool isLower(
const DenseMatrix<MT,SO>& dm );
433 template<
bool RF,
typename MT,
bool SO >
434 bool isUniLower(
const DenseMatrix<MT,SO>& dm );
436 template<
bool RF,
typename MT,
bool SO >
439 template<
bool RF,
typename MT,
bool SO >
440 bool isUpper(
const DenseMatrix<MT,SO>& dm );
442 template<
bool RF,
typename MT,
bool SO >
443 bool isUniUpper(
const DenseMatrix<MT,SO>& dm );
445 template<
bool RF,
typename MT,
bool SO >
448 template<
bool RF,
typename MT,
bool SO >
449 bool isDiagonal(
const DenseMatrix<MT,SO>& dm );
451 template<
bool RF,
typename MT,
bool SO >
452 bool isIdentity(
const DenseMatrix<MT,SO>& dm );
477 template<
typename MT
486 for(
size_t i=0UL; i<A.rows(); ++i ) {
487 for(
size_t j=0UL; j<A.columns(); ++j )
488 if(
isnan( A(i,j) ) )
return true;
492 for(
size_t j=0UL; j<A.columns(); ++j ) {
493 for(
size_t i=0UL; i<A.rows(); ++i )
494 if(
isnan( A(i,j) ) )
return true;
543 if( IsSymmetric_v<MT> )
549 if( IsUniform_v<MT> || (~dm).
rows() < 2UL )
552 if( IsTriangular_v<MT> )
558 for(
size_t i=1UL; i<A.rows(); ++i ) {
559 for(
size_t j=0UL; j<i; ++j ) {
560 if( !equal<RF>( A(i,j), A(j,i) ) )
566 for(
size_t j=1UL; j<A.columns(); ++j ) {
567 for(
size_t i=0UL; i<j; ++i ) {
568 if( !equal<RF>( A(i,j), A(j,i) ) )
622 if( IsHermitian_v<MT> )
625 if( !IsNumeric_v<ET> || !
isSquare( ~dm ) )
628 if( IsBuiltin_v<ET> && IsUniform_v<MT> )
634 for(
size_t i=0UL; i<A.rows(); ++i ) {
635 for(
size_t j=0UL; j<i; ++j ) {
636 if( !equal<RF>( A(i,j),
conj( A(j,i) ) ) )
639 if( !isReal<RF>( A(i,i) ) )
644 for(
size_t j=0UL; j<A.columns(); ++j ) {
645 for(
size_t i=0UL; i<j; ++i ) {
646 if( !equal<RF>( A(i,j),
conj( A(j,i) ) ) )
649 if( !isReal<RF>( A(j,j) ) )
669 bool isUniform_backend(
const DenseMatrix<MT,false>& dm,
TrueType )
677 const size_t ibegin( ( IsStrictlyLower_v<MT> )?( 1UL ):( 0UL ) );
678 const size_t iend ( ( IsStrictlyUpper_v<MT> )?( (~dm).
rows()-1UL ):( (~dm).
rows() ) );
680 for(
size_t i=ibegin; i<iend; ++i ) {
681 if( !IsUpper_v<MT> ) {
682 for(
size_t j=0UL; j<i; ++j ) {
683 if( !isDefault<RF>( (~dm)(i,j) ) )
687 if( !isDefault<RF>( (~dm)(i,i) ) )
689 if( !IsLower_v<MT> ) {
690 for(
size_t j=i+1UL; j<(~dm).
columns(); ++j ) {
691 if( !isDefault<RF>( (~dm)(i,j) ) )
713 bool isUniform_backend(
const DenseMatrix<MT,true>& dm,
TrueType )
721 const size_t jbegin( ( IsStrictlyUpper_v<MT> )?( 1UL ):( 0UL ) );
722 const size_t jend ( ( IsStrictlyLower_v<MT> )?( (~dm).
columns()-1UL ):( (~dm).
columns() ) );
724 for(
size_t j=jbegin; j<jend; ++j ) {
725 if( !IsLower_v<MT> ) {
726 for(
size_t i=0UL; i<j; ++i ) {
727 if( !isDefault<RF>( (~dm)(i,j) ) )
731 if( !isDefault<RF>( (~dm)(j,j) ) )
733 if( !IsUpper_v<MT> ) {
734 for(
size_t i=j+1UL; i<(~dm).
rows(); ++i ) {
735 if( !isDefault<RF>( (~dm)(i,j) ) )
757 bool isUniform_backend(
const DenseMatrix<MT,false>& dm,
FalseType )
765 const auto& cmp( (~dm)(0UL,0UL) );
767 for(
size_t i=0UL; i<(~dm).
rows(); ++i ) {
768 for(
size_t j=0UL; j<(~dm).
columns(); ++j ) {
769 if( !equal<RF>( (~dm)(i,j), cmp ) )
790 bool isUniform_backend(
const DenseMatrix<MT,true>& dm,
FalseType )
798 const auto& cmp( (~dm)(0UL,0UL) );
800 for(
size_t j=0UL; j<(~dm).
columns(); ++j ) {
801 for(
size_t i=0UL; i<(~dm).
rows(); ++i ) {
802 if( !equal<RF>( (~dm)(i,j), cmp ) )
851 if( IsUniform_v<MT> ||
853 ( (~dm).
rows() == 1UL && (~dm).
columns() == 1UL ) )
856 if( IsUniTriangular_v<MT> )
904 const size_t M( (~dm).
rows() );
905 const size_t N( (~dm).
columns() );
907 if( IsZero_v<MT> || M == 0UL || N == 0UL )
910 if( IsUniTriangular_v<MT> )
913 if( IsUniform_v<MT> )
914 return isZero<RF>( (~dm)(0UL,0UL) );
920 for(
size_t i=0UL; i<M; ++i )
922 const size_t jbegin( IsUpper_v<MT>
923 ? ( IsStrictlyUpper_v<MT> ? i+1UL : i )
925 const size_t jend ( IsLower_v<MT> || IsSymmetric_v<MT> || IsHermitian_v<MT>
926 ? ( IsStrictlyLower_v<MT> ? i : i+1UL )
929 for(
size_t j=jbegin; j<jend; ++j ) {
930 if( !isZero<RF>( A(i,j) ) )
937 for(
size_t j=0UL; j<N; ++j )
939 const size_t ibegin( IsLower_v<MT>
940 ? ( IsStrictlyLower_v<MT> ? j+1UL : j )
942 const size_t iend ( IsUpper_v<MT> || IsSymmetric_v<MT> || IsHermitian_v<MT>
943 ? ( IsStrictlyUpper_v<MT> ? j : j+1UL )
946 for(
size_t i=ibegin; i<iend; ++i ) {
947 if( !isZero<RF>( A(i,j) ) )
1017 if( IsZero_v<MT> || (~dm).
rows() < 2UL )
1022 if( IsUniform_v<MT> )
1023 return isDefault<RF>( A(0UL,0UL) );
1026 for(
size_t i=0UL; i<A.rows()-1UL; ++i ) {
1027 for(
size_t j=i+1UL; j<A.columns(); ++j ) {
1028 if( !isDefault<RF>( A(i,j) ) )
1034 for(
size_t j=1UL; j<A.columns(); ++j ) {
1035 for(
size_t i=0UL; i<j; ++i ) {
1036 if( !isDefault<RF>( A(i,j) ) )
1099 if( IsUniLower_v<MT> )
1108 for(
size_t i=0UL; i<A.rows(); ++i ) {
1109 if( !isOne<RF>( A(i,i) ) )
1111 for(
size_t j=i+1UL; j<A.columns(); ++j ) {
1112 if( !isZero<RF>( A(i,j) ) )
1118 for(
size_t j=0UL; j<A.columns(); ++j ) {
1119 for(
size_t i=0UL; i<j; ++i ) {
1120 if( !isZero<RF>( A(i,j) ) )
1123 if( !isOne<RF>( A(j,j) ) )
1186 if( IsStrictlyLower_v<MT> )
1192 if( IsZero_v<MT> || (~dm).
rows() < 2UL )
1195 if( IsUniLower_v<MT> || IsUniUpper_v<MT> )
1200 if( IsUniform_v<MT> )
1201 return isDefault<RF>( A(0UL,0UL) );
1204 for(
size_t i=0UL; i<A.rows(); ++i ) {
1205 for(
size_t j=i; j<A.columns(); ++j ) {
1206 if( !isDefault<RF>( A(i,j) ) )
1212 for(
size_t j=0UL; j<A.columns(); ++j ) {
1213 for(
size_t i=0UL; i<=j; ++i ) {
1214 if( !isDefault<RF>( A(i,j) ) )
1284 if( IsZero_v<MT> || (~dm).
rows() < 2UL )
1289 if( IsUniform_v<MT> )
1290 return isDefault<RF>( A(0UL,0UL) );
1293 for(
size_t i=1UL; i<A.rows(); ++i ) {
1294 for(
size_t j=0UL; j<i; ++j ) {
1295 if( !isDefault<RF>( A(i,j) ) )
1301 for(
size_t j=0UL; j<A.columns()-1UL; ++j ) {
1302 for(
size_t i=j+1UL; i<A.rows(); ++i ) {
1303 if( !isDefault<RF>( A(i,j) ) )
1366 if( IsUniUpper_v<MT> )
1375 for(
size_t i=0UL; i<A.rows(); ++i ) {
1376 for(
size_t j=0UL; j<i; ++j ) {
1377 if( !isZero<RF>( A(i,j) ) )
1380 if( !isOne<RF>( A(i,i) ) )
1385 for(
size_t j=0UL; j<A.columns(); ++j ) {
1386 if( !isOne<RF>( A(j,j) ) )
1388 for(
size_t i=j+1UL; i<A.rows(); ++i ) {
1389 if( !isZero<RF>( A(i,j) ) )
1453 if( IsStrictlyUpper_v<MT> )
1459 if( IsZero_v<MT> || (~dm).
rows() < 2UL )
1462 if( IsUniLower_v<MT> || IsUniUpper_v<MT> )
1467 if( IsUniform_v<MT> )
1468 return isDefault<RF>( A(0UL,0UL) );
1471 for(
size_t i=0UL; i<A.rows(); ++i ) {
1472 for(
size_t j=0UL; j<=i; ++j ) {
1473 if( !isDefault<RF>( A(i,j) ) )
1479 for(
size_t j=0UL; j<A.columns(); ++j ) {
1480 for(
size_t i=j; i<A.rows(); ++i ) {
1481 if( !isDefault<RF>( A(i,j) ) )
1546 if( IsDiagonal_v<MT> )
1552 if( IsZero_v<MT> || (~dm).
rows() < 2UL )
1557 if( IsUniform_v<MT> )
1558 return isDefault<RF>( A(0UL,0UL) );
1561 for(
size_t i=0UL; i<A.rows(); ++i ) {
1562 if( !IsUpper_v<MT> ) {
1563 for(
size_t j=0UL; j<i; ++j ) {
1564 if( !isDefault<RF>( A(i,j) ) )
1568 if( !IsLower_v<MT> ) {
1569 for(
size_t j=i+1UL; j<A.columns(); ++j ) {
1570 if( !isDefault<RF>( A(i,j) ) )
1577 for(
size_t j=0UL; j<A.columns(); ++j ) {
1578 if( !IsLower_v<MT> ) {
1579 for(
size_t i=0UL; i<j; ++i ) {
1580 if( !isDefault<RF>( A(i,j) ) )
1584 if( !IsUpper_v<MT> ) {
1585 for(
size_t i=j+1UL; i<A.rows(); ++i ) {
1586 if( !isDefault<RF>( A(i,j) ) )
1651 if( IsIdentity_v<MT> )
1657 if( (~dm).
rows() == 0UL )
1663 for(
size_t i=0UL; i<A.rows(); ++i ) {
1664 if( !IsUpper_v<MT> ) {
1665 for(
size_t j=0UL; j<i; ++j ) {
1666 if( !isZero<RF>( A(i,j) ) )
1670 if( !IsUniLower_v<MT> && !IsUniUpper_v<MT> && !isOne<RF>( A(i,i) ) ) {
1673 if( !IsLower_v<MT> ) {
1674 for(
size_t j=i+1UL; j<A.columns(); ++j ) {
1675 if( !isZero<RF>( A(i,j) ) )
1682 for(
size_t j=0UL; j<A.columns(); ++j ) {
1683 if( !IsLower_v<MT> ) {
1684 for(
size_t i=0UL; i<j; ++i ) {
1685 if( !isZero<RF>( A(i,j) ) )
1689 if( !IsUniLower_v<MT> && !IsUniUpper_v<MT> && !isOne<RF>( A(j,j) ) ) {
1692 if( !IsUpper_v<MT> ) {
1693 for(
size_t i=j+1UL; i<A.rows(); ++i ) {
1694 if( !isZero<RF>( A(i,j) ) )
#define BLAZE_CONSTRAINT_MUST_BE_TRIANGULAR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a lower or upper triangular matrix t...
Definition: Triangular.h:61
Header file for the isnan shim.
BoolConstant< false > FalseType
Type/value traits base class.The FalseType class is used as base class for type traits and value trai...
Definition: FalseType.h:61
#define BLAZE_THROW_INVALID_ARGUMENT(MESSAGE)
Macro for the emission of a std::invalid_argument exception.This macro encapsulates the default way o...
Definition: Exception.h:235
Header file for auxiliary alias declarations.
Header file for the blaze::checked and blaze::unchecked instances.
bool isLower(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is a lower triangular matrix.
Definition: DenseMatrix.h:1004
bool isUpper(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is an upper triangular matrix.
Definition: DenseMatrix.h:1271
bool isStrictlyLower(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is a strictly lower triangular matrix.
Definition: DenseMatrix.h:1179
#define BLAZE_USER_ASSERT(expr, msg)
Run time assertion macro for user checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_USER_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERT flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:117
auto operator/=(DenseMatrix< MT, SO > &mat, ST scalar) -> EnableIf_t< IsNumeric_v< ST >, MT & >
Division assignment operator for the division of a dense matrix by a scalar value ( )...
Definition: DenseMatrix.h:354
Header file for the IsUniUpper type trait.
Compile time check for triangular matrix types.This type trait tests whether or not the given templat...
Definition: IsTriangular.h:86
Header file for basic type definitions.
#define BLAZE_CONSTRAINT_MUST_NOT_BE_TRIANGULAR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a lower or upper triangular matrix type...
Definition: Triangular.h:81
typename If< Condition, T1, T2 >::Type If_t
Auxiliary alias declaration for the If class template.The If_t alias declaration provides a convenien...
Definition: If.h:109
typename T::ResultType ResultType_t
Alias declaration for nested ResultType type definitions.The ResultType_t alias declaration provides ...
Definition: Aliases.h:390
Header file for the FalseType type/value trait base class.
Header file for the isZero shim.
Header file for the IsDiagonal type trait.
bool isUniLower(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is a lower unitriangular matrix.
Definition: DenseMatrix.h:1092
#define BLAZE_CONSTRAINT_MUST_NOT_BE_UNITRIANGULAR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a lower or upper unitriangular matrix ty...
Definition: UniTriangular.h:81
Header file for the IsIdentity type trait.
bool isDiagonal(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is diagonal.
Definition: DenseMatrix.h:1539
Header file for the decltype(auto) workaround.
BoolConstant< true > TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: TrueType.h:61
typename T::ReturnType ReturnType_t
Alias declaration for nested ReturnType type definitions.The ReturnType_t alias declaration provides ...
Definition: Aliases.h:410
Header file for the IsUniLower 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 rowMajor
Storage order flag for row-major matrices.
Definition: StorageOrder.h:71
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:80
typename T::ElementType ElementType_t
Alias declaration for nested ElementType type definitions.The ElementType_t alias declaration provide...
Definition: Aliases.h:170
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is an identity matrix.
Definition: DenseMatrix.h:1644
bool isZero(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is 0.
Definition: DiagonalProxy.h:673
Header file for the matrix storage order types.
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
Constraint on the data type.
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
Header file for the If class template.
Header file for the DenseMatrix base class.
constexpr bool operator==(const NegativeAccuracy< A > &lhs, const T &rhs)
Equality comparison between a NegativeAccuracy object and a floating point value. ...
Definition: Accuracy.h:253
Header file for the IsLower type trait.
Header file for the equal shim.
Header file for the IsUniTriangular type trait.
Header file for the IsTriangular type trait.
bool isnan(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is not a number.
Definition: DiagonalProxy.h:713
bool isUniform(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is a uniform matrix.
Definition: DenseMatrix.h:849
constexpr bool operator!=(const NegativeAccuracy< A > &lhs, const T &rhs)
Inequality comparison between a NegativeAccuracy object and a floating point value.
Definition: Accuracy.h:293
Constraint on the data type.
Header file for the EnableIf class template.
Header file for the IsStrictlyLower type trait.
Header file for the isOne shim.
Header file for the conjugate shim.
Constraint on the data type.
Header file for the IsNumeric type trait.
bool isStrictlyUpper(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is a strictly upper triangular matrix.
Definition: DenseMatrix.h:1446
Header file for run time assertion macros.
typename T::CompositeType CompositeType_t
Alias declaration for nested CompositeType type definitions.The CompositeType_t alias declaration pro...
Definition: Aliases.h:90
Header file for the IsZero type trait.
bool isHermitian(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is Hermitian.
Definition: DenseMatrix.h:617
Header file for the isDefault shim.
auto smpAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs) -> EnableIf_t< IsDenseMatrix_v< MT1 > >
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:100
bool isSymmetric(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is symmetric.
Definition: DenseMatrix.h:539
#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 IsBuiltin type trait.
auto operator*=(DenseMatrix< MT, SO > &mat, ST scalar) -> EnableIf_t< IsNumeric_v< ST >, MT & >
Multiplication assignment operator for the multiplication of a dense matrix and a scalar value ( )...
Definition: DenseMatrix.h:290
bool isUniUpper(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is an upper unitriangular matrix.
Definition: DenseMatrix.h:1359
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:263
Header file for the IsUpper type trait.
decltype(auto) conj(const DenseMatrix< MT, SO > &dm)
Returns a matrix containing the complex conjugate of each single element of dm.
Definition: DMatMapExpr.h:1326
Header file for the IsHermitian type trait.
bool isSquare(const Matrix< MT, SO > &matrix) noexcept
Checks if the given matrix is a square matrix.
Definition: Matrix.h:951
Header file for the IsRestricted type trait.
Header file for the isReal shim.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101
bool equal(const SharedValue< T1 > &lhs, const SharedValue< T2 > &rhs)
Equality check for a two shared values.
Definition: SharedValue.h:342
Header file for the reduction flags.
Header file for the TrueType type/value trait base class.
Header file for the IsExpression type trait class.