35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
138 template<
typename MT2 >
141 enum { value = useAssign };
413 enum { vectorizable = MT::vectorizable &&
531 template<
typename T >
543 template<
typename T >
545 return matrix_.isAliased( alias );
569 template<
typename MT2
599 template<
typename MT2
629 template<
typename MT2
631 friend inline typename EnableIf< UseAssign<MT2> >::Type
667 template<
typename MT2
669 friend inline typename EnableIf< UseAssign<MT2> >::Type
736 template<
typename MT
738 inline const DMatScalarMultExpr<MT,typename BaseElementType<MT>::Type,SO>
778 template<
typename T1
781 inline const typename EnableIf< IsNumeric<T2>,
typename MultExprTrait<T1,T2>::Type >::Type
787 return Type( ~mat, scalar );
813 template<
typename T1
816 inline const typename EnableIf< IsNumeric<T1>,
typename MultExprTrait<T1,T2>::Type >::Type
822 return Type( ~mat, scalar );
847 template<
typename VT
850 inline const DMatScalarMultExpr<VT,ST,TF>
851 operator-(
const DMatScalarMultExpr<VT,ST,TF>& dm )
855 return DMatScalarMultExpr<VT,ST,TF>( dm.leftOperand(), -dm.rightOperand() );
882 template<
typename MT
886 inline const typename EnableIf< IsNumeric<ST2>
887 ,
typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
888 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
892 return mat.leftOperand() * ( mat.rightOperand() * scalar );
911 template<
typename ST1
915 inline const typename EnableIf< IsNumeric<ST1>
916 ,
typename MultExprTrait< ST1, DMatScalarMultExpr<MT,ST2,SO> >::Type >::Type
917 operator*( ST1 scalar,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
921 return mat.leftOperand() * ( scalar * mat.rightOperand() );
940 template<
typename MT
944 inline const typename EnableIf< IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>
945 ,
typename DivExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
946 operator/(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
950 return mat.leftOperand() * ( mat.rightOperand() / scalar );
970 template<
typename MT
974 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
975 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const DenseVector<VT,false>& vec )
979 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
999 template<
typename VT
1003 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1004 operator*(
const DenseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1008 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1030 template<
typename MT
1035 inline const DVecScalarMultExpr<typename MultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type,
false>
1036 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const DVecScalarMultExpr<VT,ST2,false>& vec )
1040 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1062 template<
typename VT
1067 inline const typename MultExprTrait< DVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1068 operator*(
const DVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1072 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1092 template<
typename MT
1096 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
1097 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const SparseVector<VT,false>& vec )
1101 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
1121 template<
typename VT
1125 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1126 operator*(
const SparseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1130 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1152 template<
typename MT
1157 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, SVecScalarMultExpr<VT,ST2,false> >::Type
1158 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const SVecScalarMultExpr<VT,ST2,false>& vec )
1162 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1184 template<
typename VT
1189 inline const typename MultExprTrait< SVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1190 operator*(
const SVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1194 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1214 template<
typename MT1
1219 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1220 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const DenseMatrix<MT2,SO2>& rhs )
1224 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1244 template<
typename MT1
1249 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1250 operator*(
const DenseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1254 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1274 template<
typename MT1
1280 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1281 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST2,SO2>& rhs )
1285 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1305 template<
typename MT1
1310 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1311 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const SparseMatrix<MT2,SO2>& rhs )
1315 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1335 template<
typename MT1
1340 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1341 operator*(
const SparseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1345 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1366 template<
typename MT1
1372 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, SMatScalarMultExpr<MT2,ST2,SO2> >::Type
1373 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& mat,
const SMatScalarMultExpr<MT2,ST2,SO2>& vec )
1377 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1398 template<
typename MT1
1404 inline const typename MultExprTrait< SMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1405 operator*(
const SMatScalarMultExpr<MT1,ST1,SO1>& mat,
const DMatScalarMultExpr<MT2,ST2,SO2>& vec )
1409 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1425 template<
typename MT,
typename ST1,
typename ST2 >
1426 struct DMatScalarMultExprTrait< DMatScalarMultExpr<MT,ST1,false>, ST2 >
1430 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1431 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1432 ,
typename DMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1433 , INVALID_TYPE >::Type Type;
1450 template<
typename MT,
typename ST1,
typename ST2 >
1451 struct TDMatScalarMultExprTrait< DMatScalarMultExpr<MT,ST1,true>, ST2 >
1455 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1456 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1457 ,
typename TDMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1458 , INVALID_TYPE >::Type Type;
1475 template<
typename MT,
typename ST1,
typename ST2 >
1476 struct DMatScalarDivExprTrait< DMatScalarMultExpr<MT,ST1,false>, ST2 >
1480 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1484 typedef typename DMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1485 typedef typename DMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1490 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1491 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1492 ,
typename SelectType<condition,T1,T2>::Type
1493 , INVALID_TYPE >::Type Type;
1510 template<
typename MT,
typename ST1,
typename ST2 >
1511 struct TDMatScalarDivExprTrait< DMatScalarMultExpr<MT,ST1,true>, ST2 >
1515 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1519 typedef typename TDMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1520 typedef typename TDMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1525 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1526 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1527 ,
typename SelectType<condition,T1,T2>::Type
1528 , INVALID_TYPE >::Type Type;
1545 template<
typename MT,
typename ST,
typename VT >
1546 struct DMatDVecMultExprTrait< DMatScalarMultExpr<MT,ST,false>, VT >
1550 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1551 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1552 IsNumeric<ST>::value
1553 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1554 , INVALID_TYPE >::Type Type;
1563 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1564 struct DMatDVecMultExprTrait< DMatScalarMultExpr<MT,ST1,false>, DVecScalarMultExpr<VT,ST2,false> >
1568 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1569 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1570 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1571 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1572 , INVALID_TYPE >::Type Type;
1589 template<
typename MT,
typename ST,
typename VT >
1590 struct TDMatDVecMultExprTrait< DMatScalarMultExpr<MT,ST,true>, VT >
1594 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1595 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1596 IsNumeric<ST>::value
1597 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1598 , INVALID_TYPE >::Type Type;
1607 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1608 struct TDMatDVecMultExprTrait< DMatScalarMultExpr<MT,ST1,true>, DVecScalarMultExpr<VT,ST2,false> >
1612 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1613 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1614 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1615 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1616 , INVALID_TYPE >::Type Type;
1633 template<
typename VT,
typename MT,
typename ST >
1634 struct TDVecDMatMultExprTrait< VT, DMatScalarMultExpr<MT,ST,false> >
1638 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1639 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1640 IsNumeric<ST>::value
1641 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
1642 , INVALID_TYPE >::Type Type;
1651 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1652 struct TDVecDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,false> >
1656 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1657 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1658 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1659 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1660 , INVALID_TYPE >::Type Type;
1677 template<
typename VT,
typename MT,
typename ST >
1678 struct TDVecTDMatMultExprTrait< VT, DMatScalarMultExpr<MT,ST,true> >
1682 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1683 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1684 IsNumeric<ST>::value
1685 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
1686 , INVALID_TYPE >::Type Type;
1695 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1696 struct TDVecTDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,true> >
1700 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1701 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1702 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1703 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1704 , INVALID_TYPE >::Type Type;
1721 template<
typename MT,
typename ST,
typename VT >
1722 struct DMatSVecMultExprTrait< DMatScalarMultExpr<MT,ST,false>, VT >
1726 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1727 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1728 IsNumeric<ST>::value
1729 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
1730 , INVALID_TYPE >::Type Type;
1739 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1740 struct DMatSVecMultExprTrait< DMatScalarMultExpr<MT,ST1,false>, SVecScalarMultExpr<VT,ST2,false> >
1744 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1745 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1746 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1747 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1748 , INVALID_TYPE >::Type Type;
1765 template<
typename MT,
typename ST,
typename VT >
1766 struct TDMatSVecMultExprTrait< DMatScalarMultExpr<MT,ST,true>, VT >
1770 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1771 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1772 IsNumeric<ST>::value
1773 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
1774 , INVALID_TYPE >::Type Type;
1783 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1784 struct TDMatSVecMultExprTrait< DMatScalarMultExpr<MT,ST1,true>, SVecScalarMultExpr<VT,ST2,false> >
1788 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1789 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1790 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1791 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1792 , INVALID_TYPE >::Type Type;
1809 template<
typename VT,
typename MT,
typename ST >
1810 struct TSVecDMatMultExprTrait< VT, DMatScalarMultExpr<MT,ST,false> >
1814 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
1815 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1816 IsNumeric<ST>::value
1817 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
1818 , INVALID_TYPE >::Type Type;
1827 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1828 struct TSVecDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,false> >
1832 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
1833 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1834 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1835 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1836 , INVALID_TYPE >::Type Type;
1853 template<
typename VT,
typename MT,
typename ST >
1854 struct TSVecTDMatMultExprTrait< VT, DMatScalarMultExpr<MT,ST,true> >
1858 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
1859 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1860 IsNumeric<ST>::value
1861 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
1862 , INVALID_TYPE >::Type Type;
1871 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1872 struct TSVecTDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,true> >
1876 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
1877 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1878 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1879 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1880 , INVALID_TYPE >::Type Type;
1897 template<
typename MT1,
typename ST,
typename MT2 >
1898 struct DMatDMatMultExprTrait< DMatScalarMultExpr<MT1,ST,false>, MT2 >
1902 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1903 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1904 IsNumeric<ST>::value
1905 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1906 , INVALID_TYPE >::Type Type;
1915 template<
typename MT1,
typename MT2,
typename ST >
1916 struct DMatDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,false> >
1920 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1921 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1922 IsNumeric<ST>::value
1923 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1924 , INVALID_TYPE >::Type Type;
1933 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
1934 struct DMatDMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,false>, DMatScalarMultExpr<MT2,ST2,false> >
1938 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1939 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1940 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1941 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1942 , INVALID_TYPE >::Type Type;
1959 template<
typename MT1,
typename ST,
typename MT2 >
1960 struct DMatTDMatMultExprTrait< DMatScalarMultExpr<MT1,ST,false>, MT2 >
1964 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1965 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1966 IsNumeric<ST>::value
1967 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1968 , INVALID_TYPE >::Type Type;
1977 template<
typename MT1,
typename MT2,
typename ST >
1978 struct DMatTDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,true> >
1982 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1983 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1984 IsNumeric<ST>::value
1985 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1986 , INVALID_TYPE >::Type Type;
1995 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
1996 struct DMatTDMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,false>, DMatScalarMultExpr<MT2,ST2,true> >
2000 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2001 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2002 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2003 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2004 , INVALID_TYPE >::Type Type;
2021 template<
typename MT1,
typename ST,
typename MT2 >
2022 struct TDMatDMatMultExprTrait< DMatScalarMultExpr<MT1,ST,true>, MT2 >
2026 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2027 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2028 IsNumeric<ST>::value
2029 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2030 , INVALID_TYPE >::Type Type;
2039 template<
typename MT1,
typename MT2,
typename ST >
2040 struct TDMatDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,false> >
2044 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2045 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2046 IsNumeric<ST>::value
2047 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2048 , INVALID_TYPE >::Type Type;
2057 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2058 struct TDMatDMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,true>, DMatScalarMultExpr<MT2,ST2,false> >
2062 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2063 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2064 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2065 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2066 , INVALID_TYPE >::Type Type;
2083 template<
typename MT1,
typename ST,
typename MT2 >
2084 struct TDMatTDMatMultExprTrait< DMatScalarMultExpr<MT1,ST,true>, MT2 >
2088 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2089 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2090 IsNumeric<ST>::value
2091 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2092 , INVALID_TYPE >::Type Type;
2101 template<
typename MT1,
typename MT2,
typename ST >
2102 struct TDMatTDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,true> >
2106 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2107 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2108 IsNumeric<ST>::value
2109 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2110 , INVALID_TYPE >::Type Type;
2119 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2120 struct TDMatTDMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,true>, DMatScalarMultExpr<MT2,ST2,true> >
2124 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2125 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2126 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2127 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2128 , INVALID_TYPE >::Type Type;
2145 template<
typename MT1,
typename ST,
typename MT2 >
2146 struct DMatSMatMultExprTrait< DMatScalarMultExpr<MT1,ST,false>, MT2 >
2150 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2151 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2152 IsNumeric<ST>::value
2153 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2154 , INVALID_TYPE >::Type Type;
2163 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2164 struct DMatSMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,false> >
2168 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2169 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2170 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2171 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2172 , INVALID_TYPE >::Type Type;
2189 template<
typename MT1,
typename ST,
typename MT2 >
2190 struct DMatTSMatMultExprTrait< DMatScalarMultExpr<MT1,ST,false>, MT2 >
2194 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2195 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2196 IsNumeric<ST>::value
2197 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2198 , INVALID_TYPE >::Type Type;
2207 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2208 struct DMatTSMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,true> >
2212 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2213 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2214 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2215 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2216 , INVALID_TYPE >::Type Type;
2233 template<
typename MT1,
typename ST,
typename MT2 >
2234 struct TDMatSMatMultExprTrait< DMatScalarMultExpr<MT1,ST,true>, MT2 >
2238 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2239 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2240 IsNumeric<ST>::value
2241 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2242 , INVALID_TYPE >::Type Type;
2251 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2252 struct TDMatSMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,false> >
2256 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2257 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2258 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2259 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2260 , INVALID_TYPE >::Type Type;
2277 template<
typename MT1,
typename ST,
typename MT2 >
2278 struct TDMatTSMatMultExprTrait< DMatScalarMultExpr<MT1,ST,true>, MT2 >
2282 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2283 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2284 IsNumeric<ST>::value
2285 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2286 , INVALID_TYPE >::Type Type;
2295 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2296 struct TDMatTSMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,true> >
2300 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2301 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2302 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2303 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2304 , INVALID_TYPE >::Type Type;
2321 template<
typename MT1,
typename ST,
typename MT2 >
2322 struct SMatDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,false> >
2326 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2327 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2328 IsNumeric<ST>::value
2329 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2330 , INVALID_TYPE >::Type Type;
2339 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2340 struct SMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>, DMatScalarMultExpr<MT2,ST2,false> >
2344 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2345 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2346 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2347 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2348 , INVALID_TYPE >::Type Type;
2365 template<
typename MT1,
typename ST,
typename MT2 >
2366 struct SMatTDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,true> >
2370 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2371 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2372 IsNumeric<ST>::value
2373 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2374 , INVALID_TYPE >::Type Type;
2383 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2384 struct SMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>, DMatScalarMultExpr<MT2,ST2,true> >
2388 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2389 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2390 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2391 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2392 , INVALID_TYPE >::Type Type;
2409 template<
typename MT1,
typename ST,
typename MT2 >
2410 struct TSMatDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,false> >
2414 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2415 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2416 IsNumeric<ST>::value
2417 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2418 , INVALID_TYPE >::Type Type;
2427 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2428 struct TSMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>, DMatScalarMultExpr<MT2,ST2,false> >
2432 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2433 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2434 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2435 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2436 , INVALID_TYPE >::Type Type;
2453 template<
typename MT1,
typename ST,
typename MT2 >
2454 struct TSMatTDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,true> >
2458 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2459 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2460 IsNumeric<ST>::value
2461 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2462 , INVALID_TYPE >::Type Type;
2471 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2472 struct TSMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>, DMatScalarMultExpr<MT2,ST2,true> >
2476 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2477 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2478 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2479 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2480 , INVALID_TYPE >::Type Type;
2497 template<
typename MT,
typename ST,
bool SO >
2498 struct SubmatrixExprTrait< DMatScalarMultExpr<MT,ST,SO> >
2502 typedef typename MultExprTrait< typename SubmatrixExprTrait<const MT>::Type, ST >::Type Type;
2519 template<
typename MT,
typename ST,
bool SO >
2520 struct RowExprTrait< DMatScalarMultExpr<MT,ST,SO> >
2524 typedef typename MultExprTrait< typename RowExprTrait<const MT>::Type, ST >::Type Type;
2541 template<
typename MT,
typename ST,
bool SO >
2542 struct ColumnExprTrait< DMatScalarMultExpr<MT,ST,SO> >
2546 typedef typename MultExprTrait< typename ColumnExprTrait<const MT>::Type, ST >::Type Type;
LeftOperand leftOperand() const
Returns the left-hand side dense matrix operand.
Definition: DMatScalarMultExpr.h:510
MT::ConstIterator IteratorType
ConstIterator type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:189
IntrinsicType load() const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:285
Pointer difference type of the Blaze library.
DifferenceType difference_type
Difference between two iterators.
Definition: DMatScalarMultExpr.h:186
Compile time check whether the given type is a computational expression template.This type trait clas...
Definition: IsComputation.h:89
Constraint on the data type.
Compile time check whether the given type is a temporary vector or matrix type.This type trait class ...
Definition: IsTemporary.h:87
RightOperand scalar_
Scalar of the multiplication expression.
Definition: DMatScalarMultExpr.h:406
const DMatDMatMultExpr< T1, T2 > 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:3703
const EnableIf< IsNumeric< T2 >, typename DivExprTrait< T1, T2 >::Type >::Type operator/(const DenseMatrix< T1, SO > &mat, T2 scalar)
Division operator for the division of a dense matrix by a scalar value ( ).
Definition: DMatScalarDivExpr.h:745
MultExprTrait< RN, ST >::Type ExprReturnType
Expression return type for the subscript operator.
Definition: DMatScalarMultExpr.h:124
MT::ResultType RT
Result type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:108
ReferenceType reference
Reference return type.
Definition: DMatScalarMultExpr.h:185
ConstIterator & operator++()
Pre-increment operator.
Definition: DMatScalarMultExpr.h:233
Header file for the IsSparseMatrix type trait.
const ConstIterator operator--(int)
Post-decrement operator.
Definition: DMatScalarMultExpr.h:265
#define BLAZE_CONSTRAINT_MUST_BE_MATRIX_WITH_STORAGE_ORDER(T, SO)
Constraint on the data type.In case the given data type T is not a dense or sparse matrix type and in...
Definition: StorageOrder.h:242
Efficient implementation of a compressed matrix.The CompressedMatrix class template is the represent...
Definition: CompressedMatrix.h:196
bool operator>=(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:351
#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:79
Header file for the ColumnExprTrait class template.
Header file for the IsSame and IsStrictlySame type traits.
Header file for the IsColumnMajorMatrix type trait.
RightOperand scalar_
Right-hand side scalar of the multiplication expression.
Definition: DMatScalarMultExpr.h:552
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2375
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:248
IteratorCategory iterator_category
The iterator category.
Definition: DMatScalarMultExpr.h:182
SelectType< useAssign, const ResultType, const DMatScalarMultExpr & >::Type CompositeType
Data type for composite expression templates.
Definition: DMatScalarMultExpr.h:159
Base class for all matrix/scalar multiplication expression templates.The MatScalarMultExpr class serv...
Definition: MatScalarMultExpr.h:66
Header file for the DenseVector base class.
MT::ReturnType RN
Return type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:109
Header file for the Computation base class.
Type relationship analysis.This class tests if the two data types A and B are equal. For this type comparison, the cv-qualifiers of both data types are ignored. If A and B are the same data type (ignoring the cv-qualifiers), then the value member enumeration is set to 1, the nested type definition Type is TrueType, and the class derives from TrueType. Otherwise value is set to 0, Type is FalseType, and the class derives from FalseType.
Definition: IsSame.h:158
Header file for the RequiresEvaluation type trait.
DifferenceType operator-(const ConstIterator &rhs) const
Calculating the number of elements between two iterators.
Definition: DMatScalarMultExpr.h:362
Base class for dense matrices.The DenseMatrix class is a base class for all dense matrix classes...
Definition: DenseMatrix.h:70
Base class for sparse matrices.The SparseMatrix class is a base class for all sparse matrix classes...
Definition: Forward.h:104
ReturnType operator*() const
Direct access to the element at the current iterator position.
Definition: DMatScalarMultExpr.h:275
Constraint on the data type.
Header file for the DivExprTrait class template.
ElementType ValueType
Type of the underlying elements.
Definition: DMatScalarMultExpr.h:176
Constraint on the data type.
Header file for the MultExprTrait class template.
Compile time check to query the requirement to evaluate an expression.Via this type trait it is possi...
Definition: RequiresEvaluation.h:90
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:250
Compile time type selection.The SelectType class template selects one of the two given types T1 and T...
Definition: SelectType.h:59
Header file for the IsTemporary type trait class.
ptrdiff_t DifferenceType
Difference between two iterators.
Definition: DMatScalarMultExpr.h:179
Header file for the multiplication trait.
size_t rows() const
Returns the current number of rows of the matrix.
Definition: DMatScalarMultExpr.h:490
bool operator<(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:318
Header file for the IsFloatingPoint type trait.
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: DMatScalarMultExpr.h:437
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2379
Expression object for dense matrix-scalar multiplications.The DMatScalarMultExpr class represents the...
Definition: DMatScalarMultExpr.h:102
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: DMatScalarMultExpr.h:532
ConstIterator & operator+=(size_t inc)
Addition assignment operator.
Definition: DMatScalarMultExpr.h:210
IteratorType iterator_
Iterator to the current element.
Definition: DMatScalarMultExpr.h:405
Header file for the DenseMatrix base class.
bool operator<=(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:340
IntrinsicType load(size_t i, size_t j) const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:451
void assign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the assignment of a matrix to a matrix.
Definition: Matrix.h:179
const SelectType< returnExpr, ExprReturnType, ElementType >::Type ReturnType
Return type for expression template evaluations.
Definition: DMatScalarMultExpr.h:156
#define BLAZE_CONSTRAINT_MUST_BE_SAME_TYPE(A, B)
Data type constraint.In case the two types A and B are not the same (ignoring all cv-qualifiers of bo...
Definition: SameType.h:89
ElementType * PointerType
Pointer return type.
Definition: DMatScalarMultExpr.h:177
#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:78
bool operator==(const ConstIterator &rhs) const
Equality comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:296
SelectType< IsExpression< MT >::value, const MT, const MT & >::Type LeftOperand
Composite type of the left-hand side dense matrix expression.
Definition: DMatScalarMultExpr.h:162
Constraints on the storage order of matrix types.
LeftOperand matrix_
Left-hand side dense matrix of the multiplication expression.
Definition: DMatScalarMultExpr.h:551
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2373
Header file for the SelectType class template.
Header file for the RowExprTrait class template.
Header file for all forward declarations for expression class templates.
Header file for the IsDenseMatrix type trait.
ConstIterator end(size_t i) const
Returns an iterator just past the last non-zero element of row i.
Definition: DMatScalarMultExpr.h:480
Header file for the EnableIf class template.
friend const ConstIterator operator-(const ConstIterator &it, size_t dec)
Subtraction between a ConstIterator and an integral value.
Definition: DMatScalarMultExpr.h:398
Header file for the BaseElementType type trait.
size_t columns() const
Returns the current number of columns of the matrix.
Definition: DMatScalarMultExpr.h:500
ConstIterator(IteratorType iterator, RightOperand scalar)
Constructor for the ConstIterator class.
Definition: DMatScalarMultExpr.h:198
friend const ConstIterator operator+(size_t inc, const ConstIterator &it)
Addition between an integral value and a ConstIterator.
Definition: DMatScalarMultExpr.h:386
Header file for the IsNumeric type trait.
ResultType::ElementType ElementType
Resulting element type.
Definition: DMatScalarMultExpr.h:152
ElementType & ReferenceType
Reference return type.
Definition: DMatScalarMultExpr.h:178
RightOperand rightOperand() const
Returns the right-hand side scalar operand.
Definition: DMatScalarMultExpr.h:520
Header file for the IsSparseVector type trait.
Header file for the SubmatrixExprTrait class template.
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2374
Header file for the MatScalarMultExpr base class.
Intrinsic characteristics of data types.The IntrinsicTrait class template provides the intrinsic char...
Definition: IntrinsicTrait.h:648
MT::CompositeType CT
Composite type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:111
Header file for run time assertion macros.
Utility type for generic codes.
Base template for the MultTrait class.
Definition: MultTrait.h:141
DMatScalarMultExpr(const MT &matrix, ST scalar)
Constructor for the DMatScalarMultExpr class.
Definition: DMatScalarMultExpr.h:424
Header file for the division trait.
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: DMatScalarMultExpr.h:544
void addAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the addition assignment of a matrix to a matrix.
Definition: Matrix.h:209
const DenseIterator< Type > operator-(const DenseIterator< Type > &it, ptrdiff_t inc)
Subtraction between a DenseIterator and an integral value.
Definition: DenseIterator.h:585
Substitution Failure Is Not An Error (SFINAE) class.The EnableIf class template is an auxiliary tool ...
Definition: EnableIf.h:184
ConstIterator & operator-=(size_t dec)
Subtraction assignment operator.
Definition: DMatScalarMultExpr.h:222
#define BLAZE_CONSTRAINT_MUST_BE_NUMERIC_TYPE(T)
Constraint on the data type.In case the given data type T is not a numeric (integral or floating poin...
Definition: Numeric.h:79
void subAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the subtraction assignment of a matrix to matrix.
Definition: Matrix.h:239
ConstIterator begin(size_t i) const
Returns an iterator to the first non-zero element of row i.
Definition: DMatScalarMultExpr.h:469
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:307
bool operator>(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:329
const ConstIterator operator++(int)
Post-increment operator.
Definition: DMatScalarMultExpr.h:244
Evaluation of the base element type of a given data type.Via this type trait it is possible to evalua...
Definition: BaseElementType.h:75
friend const ConstIterator operator+(const ConstIterator &it, size_t inc)
Addition between a ConstIterator and an integral value.
Definition: DMatScalarMultExpr.h:374
Header file for the IsDenseVector type trait.
Header file for all intrinsic functionality.
ConstIterator & operator--()
Pre-decrement operator.
Definition: DMatScalarMultExpr.h:254
MT::ElementType ET
Element type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:110
Header file for the IsRowMajorMatrix type trait.
Header file for the IsComputation type trait class.
ST RightOperand
Composite type of the right-hand side scalar value.
Definition: DMatScalarMultExpr.h:165
Base class for all compute expression templates.The Computation class serves as a tag for all computa...
Definition: Computation.h:59
ResultType::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: DMatScalarMultExpr.h:151
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:157
PointerType pointer
Pointer return type.
Definition: DMatScalarMultExpr.h:184
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2370
Header file for basic type definitions.
IntrinsicTrait< ElementType >::Type IntrinsicType
Resulting intrinsic element type.
Definition: DMatScalarMultExpr.h:153
Iterator over the elements of the dense matrix.
Definition: DMatScalarMultExpr.h:171
std::random_access_iterator_tag IteratorCategory
The iterator category.
Definition: DMatScalarMultExpr.h:175
MultTrait< RT, ST >::Type ResultType
Result type for expression template evaluations.
Definition: DMatScalarMultExpr.h:149
ResultType::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatScalarMultExpr.h:150
DMatScalarMultExpr< MT, ST, SO > This
Type of this DMatScalarMultExpr instance.
Definition: DMatScalarMultExpr.h:148
Evaluation of the resulting expression type of a multiplication.Via this type trait it is possible to...
Definition: MultExprTrait.h:137
#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
EnableIf< IsIntegral< T >, Set< T, sizeof(T)> >::Type::Type set(T value)
Sets all values in the vector to the given integral value.
Definition: Set.h:209
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.
ValueType value_type
Type of the underlying elements.
Definition: DMatScalarMultExpr.h:183