35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATTSMATMULTEXPR_H_ 36 #define _BLAZE_MATH_EXPRESSIONS_DMATTSMATMULTEXPR_H_ 140 template<
typename MT1
173 SYM = ( SF && !( HF || LF || UF ) ),
174 HERM = ( HF && !( LF || UF ) ),
175 LOW = ( LF || ( ( SF || HF ) && UF ) ),
176 UPP = ( UF || ( ( SF || HF ) && LF ) )
187 template<
typename T1,
typename T2,
typename T3 >
188 struct CanExploitSymmetry {
200 template<
typename T1,
typename T2,
typename T3 >
201 struct IsEvaluationRequired {
202 enum :
bool { value = ( evaluateLeft || evaluateRight ) &&
203 !CanExploitSymmetry<T1,T2,T3>::value };
213 template<
typename T1,
typename T2,
typename T3 >
214 struct UseOptimizedKernel {
238 ,
Noop > > > > ForwardFunctor;
269 enum :
bool { simdEnabled =
false };
272 enum :
bool { smpAssignable = !evaluateLeft && MT1::smpAssignable &&
273 !evaluateRight && MT2::smpAssignable };
323 :(
lhs_.columns() ) ) );
327 const size_t n(
end - begin );
345 inline ReturnType
at(
size_t i,
size_t j )
const {
346 if( i >=
lhs_.rows() ) {
349 if( j >=
rhs_.columns() ) {
361 inline size_t rows() const noexcept {
372 return rhs_.columns();
402 template<
typename T >
403 inline bool canAlias(
const T* alias )
const noexcept {
404 return (
lhs_.isAliased( alias ) ||
rhs_.isAliased( alias ) );
414 template<
typename T >
415 inline bool isAliased(
const T* alias )
const noexcept {
416 return (
lhs_.isAliased( alias ) ||
rhs_.isAliased( alias ) );
426 return lhs_.isAligned();
459 template<
typename MT
476 DMatTSMatMultExpr::selectAssignKernel( ~lhs, A, B );
495 template<
typename MT3
499 selectAssignKernel( MT3& C,
const MT4& A,
const MT5& B )
503 const size_t M( A.rows() );
504 const size_t N( B.columns() );
515 for( ; (i+4UL) <= M; i+=4UL ) {
516 for(
size_t j=( SYM || HERM || UPP ? i : 0UL ); j<( LOW ? i+4UL : N ); ++j )
525 if( element == end ) {
533 C(i ,j) = A(i ,element->index()) * element->value();
534 C(i+1UL,j) = A(i+1UL,element->index()) * element->value();
535 C(i+2UL,j) = A(i+2UL,element->index()) * element->value();
536 C(i+3UL,j) = A(i+3UL,element->index()) * element->value();
538 for( ; element!=
end; ++element ) {
539 C(i ,j) += A(i ,element->index()) * element->value();
540 C(i+1UL,j) += A(i+1UL,element->index()) * element->value();
541 C(i+2UL,j) += A(i+2UL,element->index()) * element->value();
542 C(i+3UL,j) += A(i+3UL,element->index()) * element->value();
547 for( ; (i+2UL) <= M; i+=2UL ) {
548 for(
size_t j=( SYM || HERM || UPP ? i : 0UL ); j<( LOW ? i+2UL : N ); ++j )
557 if( element == end ) {
563 C(i ,j) = A(i ,element->index()) * element->value();
564 C(i+1UL,j) = A(i+1UL,element->index()) * element->value();
566 for( ; element!=
end; ++element ) {
567 C(i ,j) += A(i ,element->index()) * element->value();
568 C(i+1UL,j) += A(i+1UL,element->index()) * element->value();
574 for(
size_t j=( SYM || HERM || UPP ? i : 0UL ); j<( LOW ? i+1UL : N ); ++j )
583 if( element == end ) {
588 C(i,j) = A(i,element->index()) * element->value();
590 for( ; element!=
end; ++element )
591 C(i,j) += A(i,element->index()) * element->value();
597 for(
size_t i=1UL; i<M; ++i ) {
598 for(
size_t j=0UL; j<i; ++j ) {
599 C(i,j) = HERM ?
conj( C(j,i) ) : C(j,i);
603 else if( LOW && !UPP ) {
604 for(
size_t j=1UL; j<N; ++j ) {
605 for(
size_t i=0UL; i<j; ++i ) {
610 else if( !LOW && UPP ) {
611 for(
size_t i=1UL; i<M; ++i ) {
612 for(
size_t j=0UL; j<i; ++j ) {
635 template<
typename MT3
639 selectAssignKernel( MT3& C,
const MT4& A,
const MT5& B )
643 const size_t M( A.rows() );
644 const size_t N( B.columns() );
653 for( ; (i+4UL) <= M; i+=4UL ) {
654 for(
size_t j=( SYM || HERM || UPP ? i : 0UL ); j<( LOW ? i+4UL : N ); ++j )
663 const size_t nonzeros( end - element );
664 const size_t kpos( nonzeros &
size_t(-4) );
667 for(
size_t k=0UL; k<kpos; k+=4UL )
669 const size_t j1( element->index() );
670 const ET2 v1( element->value() );
672 const size_t j2( element->index() );
673 const ET2 v2( element->value() );
675 const size_t j3( element->index() );
676 const ET2 v3( element->value() );
678 const size_t j4( element->index() );
679 const ET2 v4( element->value() );
684 C(i ,j) += A(i ,j1) * v1 + A(i ,j2) * v2 + A(i ,j3) * v3 + A(i ,j4) * v4;
685 C(i+1UL,j) += A(i+1UL,j1) * v1 + A(i+1UL,j2) * v2 + A(i+1UL,j3) * v3 + A(i+1UL,j4) * v4;
686 C(i+2UL,j) += A(i+2UL,j1) * v1 + A(i+2UL,j2) * v2 + A(i+2UL,j3) * v3 + A(i+2UL,j4) * v4;
687 C(i+3UL,j) += A(i+3UL,j1) * v1 + A(i+3UL,j2) * v2 + A(i+3UL,j3) * v3 + A(i+3UL,j4) * v4;
690 for( ; element!=
end; ++element )
692 const size_t j1( element->index() );
693 const ET2 v1( element->value() );
695 C(i ,j) += A(i ,j1) * v1;
696 C(i+1UL,j) += A(i+1UL,j1) * v1;
697 C(i+2UL,j) += A(i+2UL,j1) * v1;
698 C(i+3UL,j) += A(i+3UL,j1) * v1;
703 for( ; (i+2UL) <= M; i+=2UL ) {
704 for(
size_t j=( SYM || HERM || UPP ? i : 0UL ); j<( LOW ? i+2UL : N ); ++j )
713 const size_t nonzeros( end - element );
714 const size_t kpos( nonzeros &
size_t(-4) );
717 for(
size_t k=0UL; k<kpos; k+=4UL )
719 const size_t j1( element->index() );
720 const ET2 v1( element->value() );
722 const size_t j2( element->index() );
723 const ET2 v2( element->value() );
725 const size_t j3( element->index() );
726 const ET2 v3( element->value() );
728 const size_t j4( element->index() );
729 const ET2 v4( element->value() );
734 C(i ,j) += A(i ,j1) * v1 + A(i ,j2) * v2 + A(i ,j3) * v3 + A(i ,j4) * v4;
735 C(i+1UL,j) += A(i+1UL,j1) * v1 + A(i+1UL,j2) * v2 + A(i+1UL,j3) * v3 + A(i+1UL,j4) * v4;
738 for( ; element!=
end; ++element )
740 const size_t j1( element->index() );
741 const ET2 v1( element->value() );
743 C(i ,j) += A(i ,j1) * v1;
744 C(i+1UL,j) += A(i+1UL,j1) * v1;
750 for(
size_t j=( SYM || HERM || UPP ? i : 0UL ); j<( LOW ? i+1UL : N ); ++j )
759 const size_t nonzeros( end - element );
760 const size_t kpos( nonzeros &
size_t(-4) );
763 for(
size_t k=0UL; k<kpos; k+=4UL )
765 const size_t j1( element->index() );
766 const ET2 v1( element->value() );
768 const size_t j2( element->index() );
769 const ET2 v2( element->value() );
771 const size_t j3( element->index() );
772 const ET2 v3( element->value() );
774 const size_t j4( element->index() );
775 const ET2 v4( element->value() );
780 C(i,j) += A(i,j1) * v1 + A(i,j2) * v2 + A(i,j3) * v3 + A(i,j4) * v4;
783 for( ; element!=
end; ++element )
785 const size_t j1( element->index() );
786 const ET2 v1( element->value() );
788 C(i,j) += A(i,j1) * v1;
795 for(
size_t i=1UL; i<M; ++i ) {
796 for(
size_t j=0UL; j<i; ++j ) {
797 C(i,j) = HERM ?
conj( C(j,i) ) : C(j,i);
818 template<
typename MT
837 const ForwardFunctor fwd;
839 const TmpType tmp(
serial( rhs ) );
840 assign( ~lhs, fwd( tmp ) );
860 template<
typename MT
870 const ForwardFunctor fwd;
890 template<
typename MT
907 DMatTSMatMultExpr::selectAddAssignKernel( ~lhs, A, B );
926 template<
typename MT3
930 selectAddAssignKernel( MT3& C,
const MT4& A,
const MT5& B )
934 const size_t M( A.rows() );
935 const size_t N( B.columns() );
942 for( ; (i+4UL) <= M; i+=4UL ) {
943 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+4UL : N ); ++j )
952 for( ; element!=
end; ++element ) {
953 C(i ,j) += A(i ,element->index()) * element->value();
954 C(i+1UL,j) += A(i+1UL,element->index()) * element->value();
955 C(i+2UL,j) += A(i+2UL,element->index()) * element->value();
956 C(i+3UL,j) += A(i+3UL,element->index()) * element->value();
961 for( ; (i+2UL) <= M; i+=2UL ) {
962 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+2UL : N ); ++j )
971 for( ; element!=
end; ++element ) {
972 C(i ,j) += A(i ,element->index()) * element->value();
973 C(i+1UL,j) += A(i+1UL,element->index()) * element->value();
979 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+1UL : N ); ++j )
988 for( ; element!=
end; ++element )
989 C(i,j) += A(i,element->index()) * element->value();
1011 template<
typename MT3
1015 selectAddAssignKernel( MT3& C,
const MT4& A,
const MT5& B )
1019 const size_t M( A.rows() );
1020 const size_t N( B.columns() );
1027 for( ; (i+4UL) <= M; i+=4UL ) {
1028 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+4UL : N ); ++j )
1037 const size_t nonzeros( end - element );
1038 const size_t kpos( nonzeros &
size_t(-4) );
1041 for(
size_t k=0UL; k<kpos; k+=4UL )
1043 const size_t j1( element->index() );
1044 const ET2 v1( element->value() );
1046 const size_t j2( element->index() );
1047 const ET2 v2( element->value() );
1049 const size_t j3( element->index() );
1050 const ET2 v3( element->value() );
1052 const size_t j4( element->index() );
1053 const ET2 v4( element->value() );
1058 C(i ,j) += A(i ,j1) * v1 + A(i ,j2) * v2 + A(i ,j3) * v3 + A(i ,j4) * v4;
1059 C(i+1UL,j) += A(i+1UL,j1) * v1 + A(i+1UL,j2) * v2 + A(i+1UL,j3) * v3 + A(i+1UL,j4) * v4;
1060 C(i+2UL,j) += A(i+2UL,j1) * v1 + A(i+2UL,j2) * v2 + A(i+2UL,j3) * v3 + A(i+2UL,j4) * v4;
1061 C(i+3UL,j) += A(i+3UL,j1) * v1 + A(i+3UL,j2) * v2 + A(i+3UL,j3) * v3 + A(i+3UL,j4) * v4;
1064 for( ; element!=
end; ++element )
1066 const size_t j1( element->index() );
1067 const ET2 v1( element->value() );
1069 C(i ,j) += A(i ,j1) * v1;
1070 C(i+1UL,j) += A(i+1UL,j1) * v1;
1071 C(i+2UL,j) += A(i+2UL,j1) * v1;
1072 C(i+3UL,j) += A(i+3UL,j1) * v1;
1077 for( ; (i+2UL) <= M; i+=2UL ) {
1078 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+2UL : N ); ++j )
1087 const size_t nonzeros( end - element );
1088 const size_t kpos( nonzeros &
size_t(-4) );
1091 for(
size_t k=0UL; k<kpos; k+=4UL )
1093 const size_t j1( element->index() );
1094 const ET2 v1( element->value() );
1096 const size_t j2( element->index() );
1097 const ET2 v2( element->value() );
1099 const size_t j3( element->index() );
1100 const ET2 v3( element->value() );
1102 const size_t j4( element->index() );
1103 const ET2 v4( element->value() );
1108 C(i ,j) += A(i ,j1) * v1 + A(i ,j2) * v2 + A(i ,j3) * v3 + A(i ,j4) * v4;
1109 C(i+1UL,j) += A(i+1UL,j1) * v1 + A(i+1UL,j2) * v2 + A(i+1UL,j3) * v3 + A(i+1UL,j4) * v4;
1112 for( ; element!=
end; ++element )
1114 const size_t j1( element->index() );
1115 const ET2 v1( element->value() );
1117 C(i ,j) += A(i ,j1) * v1;
1118 C(i+1UL,j) += A(i+1UL,j1) * v1;
1124 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+1UL : N ); ++j )
1133 const size_t nonzeros( end - element );
1134 const size_t kpos( nonzeros &
size_t(-4) );
1137 for(
size_t k=0UL; k<kpos; k+=4UL )
1139 const size_t j1( element->index() );
1140 const ET2 v1( element->value() );
1142 const size_t j2( element->index() );
1143 const ET2 v2( element->value() );
1145 const size_t j3( element->index() );
1146 const ET2 v3( element->value() );
1148 const size_t j4( element->index() );
1149 const ET2 v4( element->value() );
1154 C(i,j) += A(i,j1) * v1 + A(i,j2) * v2 + A(i,j3) * v3 + A(i,j4) * v4;
1157 for( ; element!=
end; ++element )
1159 const size_t j1( element->index() );
1160 const ET2 v1( element->value() );
1162 C(i,j) += A(i,j1) * v1;
1186 template<
typename MT
1198 const ForwardFunctor fwd;
1222 template<
typename MT
1239 DMatTSMatMultExpr::selectSubAssignKernel( ~lhs, A, B );
1258 template<
typename MT3
1262 selectSubAssignKernel( MT3& C,
const MT4& A,
const MT5& B )
1266 const size_t M( A.rows() );
1267 const size_t N( B.columns() );
1274 for( ; (i+4UL) <= M; i+=4UL ) {
1275 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+4UL : N ); ++j )
1284 for( ; element!=
end; ++element ) {
1285 C(i ,j) -= A(i ,element->index()) * element->value();
1286 C(i+1UL,j) -= A(i+1UL,element->index()) * element->value();
1287 C(i+2UL,j) -= A(i+2UL,element->index()) * element->value();
1288 C(i+3UL,j) -= A(i+3UL,element->index()) * element->value();
1293 for( ; (i+2UL) <= M; i+=2UL ) {
1294 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+2UL : N ); ++j )
1303 for( ; element!=
end; ++element ) {
1304 C(i ,j) -= A(i ,element->index()) * element->value();
1305 C(i+1UL,j) -= A(i+1UL,element->index()) * element->value();
1311 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+1UL : N ); ++j )
1320 for( ; element!=
end; ++element )
1321 C(i,j) -= A(i,element->index()) * element->value();
1343 template<
typename MT3
1347 selectSubAssignKernel( MT3& C,
const MT4& A,
const MT5& B )
1351 const size_t M( A.rows() );
1352 const size_t N( B.columns() );
1359 for( ; (i+4UL) <= M; i+=4UL ) {
1360 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+4UL : N ); ++j )
1369 const size_t nonzeros( end - element );
1370 const size_t kpos( nonzeros &
size_t(-4) );
1373 for(
size_t k=0UL; k<kpos; k+=4UL )
1375 const size_t j1( element->index() );
1376 const ET2 v1( element->value() );
1378 const size_t j2( element->index() );
1379 const ET2 v2( element->value() );
1381 const size_t j3( element->index() );
1382 const ET2 v3( element->value() );
1384 const size_t j4( element->index() );
1385 const ET2 v4( element->value() );
1390 C(i ,j) -= A(i ,j1) * v1 + A(i ,j2) * v2 + A(i ,j3) * v3 + A(i ,j4) * v4;
1391 C(i+1UL,j) -= A(i+1UL,j1) * v1 + A(i+1UL,j2) * v2 + A(i+1UL,j3) * v3 + A(i+1UL,j4) * v4;
1392 C(i+2UL,j) -= A(i+2UL,j1) * v1 + A(i+2UL,j2) * v2 + A(i+2UL,j3) * v3 + A(i+2UL,j4) * v4;
1393 C(i+3UL,j) -= A(i+3UL,j1) * v1 + A(i+3UL,j2) * v2 + A(i+3UL,j3) * v3 + A(i+3UL,j4) * v4;
1396 for( ; element!=
end; ++element )
1398 const size_t j1( element->index() );
1399 const ET2 v1( element->value() );
1401 C(i ,j) -= A(i ,j1) * v1;
1402 C(i+1UL,j) -= A(i+1UL,j1) * v1;
1403 C(i+2UL,j) -= A(i+2UL,j1) * v1;
1404 C(i+3UL,j) -= A(i+3UL,j1) * v1;
1409 for( ; (i+2UL) <= M; i+=2UL ) {
1410 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+2UL : N ); ++j )
1419 const size_t nonzeros( end - element );
1420 const size_t kpos( nonzeros &
size_t(-4) );
1423 for(
size_t k=0UL; k<kpos; k+=4UL )
1425 const size_t j1( element->index() );
1426 const ET2 v1( element->value() );
1428 const size_t j2( element->index() );
1429 const ET2 v2( element->value() );
1431 const size_t j3( element->index() );
1432 const ET2 v3( element->value() );
1434 const size_t j4( element->index() );
1435 const ET2 v4( element->value() );
1440 C(i ,j) -= A(i ,j1) * v1 + A(i ,j2) * v2 + A(i ,j3) * v3 + A(i ,j4) * v4;
1441 C(i+1UL,j) -= A(i+1UL,j1) * v1 + A(i+1UL,j2) * v2 + A(i+1UL,j3) * v3 + A(i+1UL,j4) * v4;
1444 for( ; element!=
end; ++element )
1446 const size_t j1( element->index() );
1447 const ET2 v1( element->value() );
1449 C(i ,j) -= A(i ,j1) * v1;
1450 C(i+1UL,j) -= A(i+1UL,j1) * v1;
1456 for(
size_t j=( UPP ? i : 0UL ); j<( LOW ? i+1UL : N ); ++j )
1465 const size_t nonzeros( end - element );
1466 const size_t kpos( nonzeros &
size_t(-4) );
1469 for(
size_t k=0UL; k<kpos; k+=4UL )
1471 const size_t j1( element->index() );
1472 const ET2 v1( element->value() );
1474 const size_t j2( element->index() );
1475 const ET2 v2( element->value() );
1477 const size_t j3( element->index() );
1478 const ET2 v3( element->value() );
1480 const size_t j4( element->index() );
1481 const ET2 v4( element->value() );
1486 C(i,j) -= A(i,j1) * v1 + A(i,j2) * v2 + A(i,j3) * v3 + A(i,j4) * v4;
1489 for( ; element!=
end; ++element )
1491 const size_t j1( element->index() );
1492 const ET2 v1( element->value() );
1494 C(i,j) -= A(i,j1) * v1;
1518 template<
typename MT
1530 const ForwardFunctor fwd;
1564 template<
typename MT
1601 template<
typename MT
1620 const ForwardFunctor fwd;
1622 const TmpType tmp( rhs );
1643 template<
typename MT
1655 const ForwardFunctor fwd;
1678 template<
typename MT
1715 template<
typename MT
1727 const ForwardFunctor fwd;
1754 template<
typename MT
1791 template<
typename MT
1803 const ForwardFunctor fwd;
1873 template<
typename T1
1921 template<
typename MT1
1966 template<
typename MT1
2011 template<
typename MT1
2056 template<
typename MT1
2101 template<
typename MT1
2132 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2133 struct Rows< DMatTSMatMultExpr<MT1,MT2,SF,HF,LF,UF> > :
public Rows<MT1>
2149 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2150 struct Columns< DMatTSMatMultExpr<MT1,MT2,SF,HF,LF,UF> > :
public Columns<MT2>
2166 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2167 struct IsAligned< DMatTSMatMultExpr<MT1,MT2,SF,HF,LF,UF> >
2184 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2185 struct IsSymmetric< DMatTSMatMultExpr<MT1,MT2,SF,HF,LF,UF> >
2188 , IsBuiltin< ElementType_< DMatTSMatMultExpr<MT1,MT2,false,true,false,false> > > >
2189 , And< Bool<LF>, Bool<UF> > >::value >
2205 template<
typename MT1,
typename MT2,
bool SF,
bool LF,
bool UF >
2206 struct IsHermitian< DMatTSMatMultExpr<MT1,MT2,SF,true,LF,UF> >
2223 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2224 struct IsLower< DMatTSMatMultExpr<MT1,MT2,SF,HF,LF,UF> >
2226 , And< IsLower<MT1>, IsLower<MT2> >
2227 , And< Or< Bool<SF>, Bool<HF> >
2228 , IsUpper<MT1>, IsUpper<MT2> > >::value >
2244 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2245 struct IsUniLower< DMatTSMatMultExpr<MT1,MT2,SF,HF,LF,UF> >
2246 :
public BoolConstant< Or< And< IsUniLower<MT1>, IsUniLower<MT2> >
2247 , And< Or< Bool<SF>, Bool<HF> >
2248 , IsUniUpper<MT1>, IsUniUpper<MT2> > >::value >
2264 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2266 :
public BoolConstant< Or< And< IsStrictlyLower<MT1>, IsLower<MT2> >
2267 , And< IsStrictlyLower<MT2>, IsLower<MT1> >
2268 , And< Or< Bool<SF>, Bool<HF> >
2269 , Or< And< IsStrictlyUpper<MT1>, IsUpper<MT2> >
2270 , And< IsStrictlyUpper<MT2>, IsUpper<MT1> > > > >::value >
2286 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2287 struct IsUpper< DMatTSMatMultExpr<MT1,MT2,SF,HF,LF,UF> >
2289 , And< IsUpper<MT1>, IsUpper<MT2> >
2290 , And< Or< Bool<SF>, Bool<HF> >
2291 , IsLower<MT1>, IsLower<MT2> > >::value >
2307 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2308 struct IsUniUpper< DMatTSMatMultExpr<MT1,MT2,SF,HF,LF,UF> >
2309 :
public BoolConstant< Or< And< IsUniUpper<MT1>, IsUniUpper<MT2> >
2310 , And< Or< Bool<SF>, Bool<HF> >
2311 , IsUniLower<MT1>, IsUniLower<MT2> > >::value >
2327 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2329 :
public BoolConstant< Or< And< IsStrictlyUpper<MT1>, IsUpper<MT2> >
2330 , And< IsStrictlyUpper<MT2>, IsUpper<MT1> >
2331 , And< Or< Bool<SF>, Bool<HF> >
2332 , Or< And< IsStrictlyLower<MT1>, IsLower<MT2> >
2333 , And< IsStrictlyLower<MT2>, IsLower<MT1> > > > >::value >
2349 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF,
typename VT >
2367 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF,
typename VT >
2385 template<
typename VT,
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2403 template<
typename VT,
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2421 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2438 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2455 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2472 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2489 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2506 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF,
bool AF >
2521 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
2522 struct RowExprTrait< DMatTSMatMultExpr<MT1,MT2,SF,HF,LF,UF> >
2535 template<
typename MT1,
typename MT2,
bool SF,
bool HF,
bool LF,
bool UF >
typename SubmatrixExprTrait< MT, AF >::Type SubmatrixExprTrait_
Auxiliary alias declaration for the SubmatrixExprTrait type trait.The SubmatrixExprTrait_ alias decla...
Definition: SubmatrixExprTrait.h:134
#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
Evaluation of the expression type of a dense matrix declupp operation.Via this type trait it is possi...
Definition: DMatDeclUppExprTrait.h:75
Compile time check for row vector types.This type trait tests whether or not the given template argum...
Definition: IsRowVector.h:80
const DMatForEachExpr< MT, Conj, SO > conj(const DenseMatrix< MT, SO > &dm)
Returns a matrix containing the complex conjugate of each single element of dm.
Definition: DMatForEachExpr.h:1214
Header file for auxiliary alias declarations.
Compile time check whether the given type is a computational expression template.This type trait clas...
Definition: IsComputation.h:72
Header file for mathematical functions.
constexpr bool useOptimizedKernels
Configuration switch for optimized kernels.This configuration switch enables/disables all optimized c...
Definition: Optimizations.h:84
Header file for the Rows type trait.
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:87
Header file for basic type definitions.
OppositeType_< ResultType > OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatTSMatMultExpr.h:248
Header file for the DMatDeclDiagExprTrait class template.
MultTrait_< RT1, RT2 > ResultType
Result type for expression template evaluations.
Definition: DMatTSMatMultExpr.h:247
EnableIf_< IsDenseMatrix< MT1 > > smpSubAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:160
size_t columns() const noexcept
Returns the current number of columns of the matrix.
Definition: DMatTSMatMultExpr.h:371
Header file for the IsSparseMatrix type trait.
Header file for the serial shim.
ResultType_< MT1 > RT1
Result type of the left-hand side dense matrix expression.
Definition: DMatTSMatMultExpr.h:152
Header file for the IsDiagonal type trait.
Generic wrapper for a compile time constant integral value.The IntegralConstant class template repres...
Definition: IntegralConstant.h:71
#define BLAZE_CONSTRAINT_MUST_BE_DENSE_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a dense, N-dimensional matrix type...
Definition: DenseMatrix.h:61
Header file for the ColumnExprTrait class template.
Header file for the DeclUpp functor.
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:194
Header file for the IsColumnMajorMatrix type trait.
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:533
DMatTSMatMultExpr(const MT1 &lhs, const MT2 &rhs) noexcept
Constructor for the DMatTSMatMultExpr class.
Definition: DMatTSMatMultExpr.h:282
Header file for the IsRowVector type trait.
LeftOperand leftOperand() const noexcept
Returns the left-hand side dense matrix operand.
Definition: DMatTSMatMultExpr.h:381
typename DisableIf< Condition, T >::Type DisableIf_
Auxiliary type for the DisableIf class template.The DisableIf_ alias declaration provides a convenien...
Definition: DisableIf.h:223
Flag for upper matrices.
Definition: DMatTSMatMultExpr.h:176
Header file for the And class template.
const ElementType_< MT > min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1755
Compile time check for lower triangular matrices.This type trait tests whether or not the given templ...
Definition: IsLower.h:88
ReturnType at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: DMatTSMatMultExpr.h:345
const ResultType CompositeType
Data type for composite expression templates.
Definition: DMatTSMatMultExpr.h:252
bool canSMPAssign() const noexcept
Returns whether the expression can be used in SMP assignments.
Definition: DMatTSMatMultExpr.h:435
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:721
typename MultTrait< T1, T2 >::Type MultTrait_
Auxiliary alias declaration for the MultTrait class template.The MultTrait_ alias declaration provide...
Definition: MultTrait.h:245
Header file for the Computation base class.
Header file for the MatMatMultExpr base class.
DisableIf_< IsSymmetric< MT >, const DMatDeclSymExpr< MT, SO > > declsym(const DenseMatrix< MT, SO > &dm)
Declares the given non-symmetric dense matrix expression dm as symmetric.
Definition: DMatDeclSymExpr.h:841
Evaluation of the expression type of a dense matrix/dense vector multiplication.Via this type trait i...
Definition: DMatDVecMultExprTrait.h:78
Compile time check for upper triangular matrices.This type trait tests whether or not the given templ...
Definition: IsUpper.h:88
Constraints on the storage order of matrix types.
Header file for the RequiresEvaluation type trait.
System settings for performance optimizations.
Header file for the IsUniLower type trait.
typename T::ResultType ResultType_
Alias declaration for nested ResultType type definitions.The ResultType_ alias declaration provides a...
Definition: Aliases.h:323
const ElementType_< MT > max(const DenseMatrix< MT, SO > &dm)
Returns the largest element of the dense matrix.
Definition: DenseMatrix.h:1802
EnableIf_< IsDenseMatrix< MT1 > > smpAddAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP addition assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:129
IfTrue_< evaluateRight, const RT2, CT2 > RT
Type for the assignment of the right-hand side sparse matrix operand.
Definition: DMatTSMatMultExpr.h:264
ElementType_< RT1 > ET1
Element type of the left-hand side dense matrix expression.
Definition: DMatTSMatMultExpr.h:154
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:71
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:119
Constraint on the data type.
typename IfTrue< Condition, T1, T2 >::Type IfTrue_
Auxiliary alias declaration for the IfTrue class template.The IfTrue_ alias declaration provides a co...
Definition: If.h:109
Compile time check for the alignment of data types.This type trait tests whether the given data type ...
Definition: IsAligned.h:87
CompositeType_< MT2 > CT2
Composite type of the right-hand side sparse matrix expression.
Definition: DMatTSMatMultExpr.h:157
Evaluation of the expression type of a dense matrix declsym operation.Via this type trait it is possi...
Definition: DMatDeclSymExprTrait.h:75
Constraint on the data type.
Constraint on the data type.
typename MultExprTrait< T1, T2 >::Type MultExprTrait_
Auxiliary alias declaration for the MultExprTrait class template.The MultExprTrait_ alias declaration...
Definition: MultExprTrait.h:344
Header file for the MultExprTrait class template.
DisableIf_< IsHermitian< MT >, const DMatDeclHermExpr< MT, SO > > declherm(const DenseMatrix< MT, SO > &dm)
Declares the given non-Hermitian dense matrix expression dm as Hermitian.
Definition: DMatDeclHermExpr.h:841
Compile time check to query the requirement to evaluate an expression.Via this type trait it is possi...
Definition: RequiresEvaluation.h:72
SubvectorExprTrait_< VT, unaligned > subvector(Vector< VT, TF > &vector, size_t index, size_t size)
Creating a view on a specific subvector of the given vector.
Definition: Subvector.h:152
RightOperand rhs_
Right-hand side sparse matrix of the multiplication expression.
Definition: DMatTSMatMultExpr.h:443
typename T::CompositeType CompositeType_
Alias declaration for nested CompositeType type definitions.The CompositeType_ alias declaration prov...
Definition: Aliases.h:83
Compile time check for upper unitriangular matrices.This type trait tests whether or not the given te...
Definition: IsUniUpper.h:86
Header file for the DisableIf class template.
Compile time check for dense vector types.This type trait tests whether or not the given template par...
Definition: IsDenseVector.h:78
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:57
Header file for the DeclLow functor.
bool isAliased(const T *alias) const noexcept
Returns whether the expression is aliased with the given address alias.
Definition: DMatTSMatMultExpr.h:415
Header file for the If class template.
Compile time check for row-major matrix types.This type trait tests whether or not the given template...
Definition: IsRowMajorMatrix.h:83
bool canAlias(const T *alias) const noexcept
Returns whether the expression can alias with the given address alias.
Definition: DMatTSMatMultExpr.h:403
#define BLAZE_CONSTRAINT_MUST_BE_COLUMN_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a column-major dense or sparse matri...
Definition: ColumnMajorMatrix.h:61
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2939
Generic wrapper for the decllow() function.
Definition: DeclLow.h:58
EnableIf_< IsDenseMatrix< MT1 > > smpAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:98
Header file for the Or class template.
Header file for the TDVecTSMatMultExprTrait class template.
Flag for lower matrices.
Definition: DMatTSMatMultExpr.h:175
#define BLAZE_THROW_OUT_OF_RANGE(MESSAGE)
Macro for the emission of a std::out_of_range exception.This macro encapsulates the default way of Bl...
Definition: Exception.h:331
Header file for the DenseMatrix base class.
Header file for the DMatDeclLowExprTrait class template.
Header file for the Columns type trait.
Header file for the TSMatDVecMultExprTrait class template.
typename T::ElementType ElementType_
Alias declaration for nested ElementType type definitions.The ElementType_ alias declaration provides...
Definition: Aliases.h:163
Evaluation of the expression type of a dense matrix/sparse vector multiplication.Via this type trait ...
Definition: DMatSVecMultExprTrait.h:80
RightOperand rightOperand() const noexcept
Returns the right-hand side transpose sparse matrix operand.
Definition: DMatTSMatMultExpr.h:391
Compile time check for sparse vector types.This type trait tests whether or not the given template pa...
Definition: IsSparseVector.h:78
Evaluation of the expression type type of a submatrix operation.Via this type trait it is possible to...
Definition: SubmatrixExprTrait.h:80
Header file for the DMatDVecMultExprTrait class template.
Header file for the IsLower type trait.
Header file for the IsAligned type trait.
Compile time check for diagonal matrices.This type trait tests whether or not the given template para...
Definition: IsDiagonal.h:90
DisableIf_< Or< IsComputation< MT >, IsTransExpr< MT >, IsDeclExpr< MT > >, RowExprTrait_< MT > > row(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific row of the given matrix.
Definition: Row.h:128
#define BLAZE_CONSTRAINT_MUST_BE_REFERENCE_TYPE(T)
Constraint on the data type.In case the given data type T is not a reference type, a compilation error is created.
Definition: Reference.h:60
Generic wrapper for the null function.
Definition: Noop.h:58
Header file for the IsTriangular type trait.
Header file for the DMatDeclUppExprTrait class template.
Header file for the DMatDeclSymExprTrait class template.
Compile time check for column vector types.This type trait tests whether or not the given template ar...
Definition: IsColumnVector.h:80
Constraints on the storage order of matrix types.
Compile time check for symmetric matrices.This type trait tests whether or not the given template par...
Definition: IsSymmetric.h:85
Header file for the exception macros of the math module.
DisableIf_< IsLower< MT >, const DMatDeclLowExpr< MT, SO > > decllow(const DenseMatrix< MT, SO > &dm)
Declares the given non-lower dense matrix expression dm as lower.
Definition: DMatDeclLowExpr.h:842
Compile time check for strictly upper triangular matrices.This type trait tests whether or not the gi...
Definition: IsStrictlyUpper.h:86
size_t rows() const noexcept
Returns the current number of rows of the matrix.
Definition: DMatTSMatMultExpr.h:361
Evaluation of the expression type type of a row operation.Via this type trait it is possible to evalu...
Definition: RowExprTrait.h:79
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:260
const ElementType ReturnType
Return type for expression template evaluations.
Definition: DMatTSMatMultExpr.h:251
Header file for the DeclDiag functor.
Evaluation of the expression type of a dense matrix declherm operation.Via this type trait it is poss...
Definition: DMatDeclHermExprTrait.h:75
Compile time check for dense matrix types.This type trait tests whether or not the given template par...
Definition: IsDenseMatrix.h:78
Header file for the RowExprTrait class template.
Header file for all forward declarations for expression class templates.
Header file for the IsDenseMatrix type trait.
bool isAligned() const noexcept
Returns whether the operands of the expression are properly aligned in memory.
Definition: DMatTSMatMultExpr.h:425
DisableIf_< Or< IsComputation< MT >, IsTransExpr< MT >, IsDeclExpr< MT > >, ColumnExprTrait_< MT > > column(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific column of the given matrix.
Definition: Column.h:128
Header file for the EnableIf class template.
Header file for the IsStrictlyLower type trait.
#define BLAZE_CONSTRAINT_MUST_FORM_VALID_MATMATMULTEXPR(T1, T2)
Constraint on the data type.In case the given data types T1 and T2 do not form a valid matrix/matrix ...
Definition: MatMatMultExpr.h:109
Compile time check for lower unitriangular matrices.This type trait tests whether or not the given te...
Definition: IsUniLower.h:86
Header file for the conjugate shim.
Compile time check for resizable data types.This type trait tests whether the given data type is a re...
Definition: IsResizable.h:75
Base class for all matrix/matrix multiplication expression templates.The MatMatMultExpr class serves ...
Definition: MatMatMultExpr.h:65
ResultType_< MT2 > RT2
Result type of the right-hand side sparse matrix expression.
Definition: DMatTSMatMultExpr.h:153
IfTrue_< evaluateLeft, const RT1, CT1 > LT
Type for the assignment of the left-hand side dense matrix operand.
Definition: DMatTSMatMultExpr.h:261
Flag for Hermitian matrices.
Definition: DMatTSMatMultExpr.h:174
Header file for the IsSparseVector type trait.
#define BLAZE_CONSTRAINT_MUST_NOT_BE_SYMMETRIC_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is a symmetric matrix type, a compilation error is created.
Definition: Symmetric.h:79
Header file for the SubmatrixExprTrait class template.
#define BLAZE_CONSTRAINT_MUST_BE_ROW_MAJOR_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a row-major dense or sparse matrix t...
Definition: RowMajorMatrix.h:61
CompositeType_< MT1 > CT1
Composite type of the left-hand side dense matrix expression.
Definition: DMatTSMatMultExpr.h:156
ElementType_< RT2 > ET2
Element type of the right-hand side sparse matrix expression.
Definition: DMatTSMatMultExpr.h:155
Header file for run time assertion macros.
Compile time check for column-major matrix types.This type trait tests whether or not the given templ...
Definition: IsColumnMajorMatrix.h:83
Utility type for generic codes.
typename If< T1, T2, T3 >::Type If_
Auxiliary alias declaration for the If class template.The If_ alias declaration provides a convenient...
Definition: If.h:160
LeftOperand lhs_
Left-hand side dense matrix of the multiplication expression.
Definition: DMatTSMatMultExpr.h:442
Header file for the reset shim.
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:93
Header file for the DMatDeclHermExprTrait class template.
Compile time check for Hermitian matrices.This type trait tests whether or not the given template par...
Definition: IsHermitian.h:85
Base class for matrices.The Matrix class is a base class for all dense and sparse matrix classes with...
Definition: Forward.h:94
Expression object for dense matrix-transpose sparse matrix multiplications.The DMatTSMatMultExpr clas...
Definition: DMatTSMatMultExpr.h:146
typename TDVecTSMatMultExprTrait< VT, MT >::Type TDVecTSMatMultExprTrait_
Auxiliary alias declaration for the TDVecTSMatMultExprTrait class template.The TDVecTSMatMultExprTrai...
Definition: TDVecTSMatMultExprTrait.h:120
Constraints on the storage order of matrix types.
Generic wrapper for the declherm() function.
Definition: DeclHerm.h:58
typename DMatSVecMultExprTrait< MT, VT >::Type DMatSVecMultExprTrait_
Auxiliary alias declaration for the DMatSVecMultExprTrait class template.The DMatSVecMultExprTrait_ a...
Definition: DMatSVecMultExprTrait.h:123
Header file for the Noop functor.
If_< IsExpression< MT2 >, const MT2, const MT2 &> RightOperand
Composite type of the right-hand side sparse matrix expression.
Definition: DMatTSMatMultExpr.h:258
Header file for the RemoveReference type trait.
typename DMatDVecMultExprTrait< MT, VT >::Type DMatDVecMultExprTrait_
Auxiliary alias declaration for the DMatDVecMultExprTrait class template.The DMatDVecMultExprTrait_ a...
Definition: DMatDVecMultExprTrait.h:119
typename EnableIf< Condition, T >::Type EnableIf_
Auxiliary alias declaration for the EnableIf class template.The EnableIf_ alias declaration provides ...
Definition: EnableIf.h:223
typename T::OppositeType OppositeType_
Alias declaration for nested OppositeType type definitions.The OppositeType_ alias declaration provid...
Definition: Aliases.h:243
#define BLAZE_CONSTRAINT_MATRICES_MUST_HAVE_SAME_STORAGE_ORDER(T1, T2)
Constraint on the data type.In case either of the two given data types T1 or T2 is not a matrix type ...
Definition: StorageOrder.h:84
Header file for the IsDenseVector type trait.
ElementType_< ResultType > ElementType
Resulting element type.
Definition: DMatTSMatMultExpr.h:250
If_< IsExpression< MT1 >, const MT1, const MT1 &> LeftOperand
Composite type of the left-hand side dense matrix expression.
Definition: DMatTSMatMultExpr.h:255
Generic wrapper for the declupp() function.
Definition: DeclUpp.h:58
Compile time check for strictly lower triangular matrices.This type trait tests whether or not the gi...
Definition: IsStrictlyLower.h:86
Evaluation of the expression type of a dense vector/dense matrix multiplication.Via this type trait i...
Definition: TDVecDMatMultExprTrait.h:78
typename T::ConstIterator ConstIterator_
Alias declaration for nested ConstIterator type definitions.The ConstIterator_ alias declaration prov...
Definition: Aliases.h:103
Evaluation of the expression type of a sparse vector/dense matrix multiplication.Via this type trait ...
Definition: TSVecDMatMultExprTrait.h:78
TransposeType_< ResultType > TransposeType
Transpose type for expression template evaluations.
Definition: DMatTSMatMultExpr.h:249
Header file for the IsRowMajorMatrix type trait.
const DMatTransExpr< MT,!SO > trans(const DenseMatrix< MT, SO > &dm)
Calculation of the transpose of the given dense matrix.
Definition: DMatTransExpr.h:733
Header file for the IsComputation type trait class.
Header file for the IsBuiltin type trait.
Flag for symmetric matrices.
Definition: DMatTSMatMultExpr.h:173
Base class for all compute expression templates.The Computation class serves as a tag for all computa...
Definition: Computation.h:59
Header file for the TDVecDMatMultExprTrait class template.
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:76
Evaluation of the expression type of a dense matrix decllow operation.Via this type trait it is possi...
Definition: DMatDeclLowExprTrait.h:75
Generic wrapper for the decldiag() function.
Definition: DeclDiag.h:58
Evaluation of the expression type of a dense matrix decldiag operation.Via this type trait it is poss...
Definition: DMatDeclDiagExprTrait.h:75
Compile time evaluation of the number of rows of a matrix.The Rows type trait evaluates the number of...
Definition: Rows.h:76
Header file for the TSVecDMatMultExprTrait class template.
Compile time check for sparse matrix types.This type trait tests whether or not the given template pa...
Definition: IsSparseMatrix.h:78
Header file for the DeclHerm functor.
typename T::TransposeType TransposeType_
Alias declaration for nested TransposeType type definitions.The TransposeType_ alias declaration prov...
Definition: Aliases.h:403
Header file for the IsUpper type trait.
Header file for the DMatSVecMultExprTrait class template.
Header file for the IsColumnVector type trait.
Constraint on the data type.
Generic wrapper for the declsym() function.
Definition: DeclSym.h:58
BLAZE_ALWAYS_INLINE bool isSquare(const Matrix< MT, SO > &matrix) noexcept
Checks if the given matrix is a square matrix.
Definition: Matrix.h:677
Header file for the IsResizable type trait.
const DMatDMatMultExpr< T1, T2, false, false, false, false > operator*(const DenseMatrix< T1, false > &lhs, const DenseMatrix< T2, false > &rhs)
Multiplication operator for the multiplication of two row-major dense matrices ( ).
Definition: DMatDMatMultExpr.h:7505
Header file for the thresholds for matrix/vector and matrix/matrix multiplications.
DisableIf_< IsDiagonal< MT >, const DMatDeclDiagExpr< MT, SO > > decldiag(const DenseMatrix< MT, SO > &dm)
Declares the given non-diagonal dense matrix expression dm as diagonal.
Definition: DMatDeclDiagExpr.h:841
DisableIf_< IsUpper< MT >, const DMatDeclUppExpr< MT, SO > > declupp(const DenseMatrix< MT, SO > &dm)
Declares the given non-upper dense matrix expression dm as upper.
Definition: DMatDeclUppExpr.h:842
Evaluation of the expression type type of a column operation.Via this type trait it is possible to ev...
Definition: ColumnExprTrait.h:78
#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 Bool class template.
DMatTSMatMultExpr< MT1, MT2, SF, HF, LF, UF > This
Type of this DMatTSMatMultExpr instance.
Definition: DMatTSMatMultExpr.h:245
Header file for the DeclSym functor.
#define BLAZE_CONSTRAINT_MUST_BE_SPARSE_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a sparse, N-dimensional matrix type...
Definition: SparseMatrix.h:61
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: DMatTSMatMultExpr.h:297
Header file for the TrueType type/value trait base class.
Header file for the IsExpression type trait class.
Header file for the TSMatSVecMultExprTrait class template.
Header file for the function trace functionality.