35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
102 template<
typename MT
141 template<
typename MT2 >
144 enum { value = useAssign };
416 enum { vectorizable = MT::vectorizable &&
421 enum { smpAssignable = MT::smpAssignable };
537 template<
typename T >
549 template<
typename T >
551 return matrix_.isAliased( alias );
571 return matrix_.canSMPAssign() ||
596 template<
typename MT2
626 template<
typename MT2
656 template<
typename MT2
658 friend inline typename EnableIf< UseAssign<MT2> >::Type
694 template<
typename MT2
696 friend inline typename EnableIf< UseAssign<MT2> >::Type
763 template<
typename MT
765 inline const DMatScalarMultExpr<MT,typename BaseElementType<MT>::Type,SO>
805 template<
typename T1
808 inline const typename EnableIf< IsNumeric<T2>,
typename MultExprTrait<T1,T2>::Type >::Type
814 return Type( ~mat, scalar );
840 template<
typename T1
843 inline const typename EnableIf< IsNumeric<T1>,
typename MultExprTrait<T1,T2>::Type >::Type
849 return Type( ~mat, scalar );
874 template<
typename VT
877 inline const DMatScalarMultExpr<VT,ST,TF>
878 operator-(
const DMatScalarMultExpr<VT,ST,TF>& dm )
882 return DMatScalarMultExpr<VT,ST,TF>( dm.leftOperand(), -dm.rightOperand() );
909 template<
typename MT
913 inline const typename EnableIf< IsNumeric<ST2>
914 ,
typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
915 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
919 return mat.leftOperand() * ( mat.rightOperand() * scalar );
938 template<
typename ST1
942 inline const typename EnableIf< IsNumeric<ST1>
943 ,
typename MultExprTrait< ST1, DMatScalarMultExpr<MT,ST2,SO> >::Type >::Type
944 operator*( ST1 scalar,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
948 return mat.leftOperand() * ( scalar * mat.rightOperand() );
967 template<
typename MT
971 inline const typename EnableIf< IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>
972 ,
typename DivExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
973 operator/(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
977 return mat.leftOperand() * ( mat.rightOperand() / scalar );
997 template<
typename MT
1001 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
1002 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const DenseVector<VT,false>& vec )
1006 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
1026 template<
typename VT
1030 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1031 operator*(
const DenseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1035 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1057 template<
typename MT
1062 inline const DVecScalarMultExpr<typename MultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type,
false>
1063 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const DVecScalarMultExpr<VT,ST2,false>& vec )
1067 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1089 template<
typename VT
1094 inline const typename MultExprTrait< DVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1095 operator*(
const DVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1099 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1119 template<
typename MT
1123 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
1124 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const SparseVector<VT,false>& vec )
1128 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
1148 template<
typename VT
1152 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1153 operator*(
const SparseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1157 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1179 template<
typename MT
1184 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, SVecScalarMultExpr<VT,ST2,false> >::Type
1185 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const SVecScalarMultExpr<VT,ST2,false>& vec )
1189 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1211 template<
typename VT
1216 inline const typename MultExprTrait< SVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1217 operator*(
const SVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1221 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1241 template<
typename MT1
1246 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1247 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const DenseMatrix<MT2,SO2>& rhs )
1251 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1271 template<
typename MT1
1276 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1277 operator*(
const DenseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1281 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1301 template<
typename MT1
1307 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1308 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST2,SO2>& rhs )
1312 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1332 template<
typename MT1
1337 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1338 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const SparseMatrix<MT2,SO2>& rhs )
1342 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1362 template<
typename MT1
1367 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1368 operator*(
const SparseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1372 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1393 template<
typename MT1
1399 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, SMatScalarMultExpr<MT2,ST2,SO2> >::Type
1400 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& mat,
const SMatScalarMultExpr<MT2,ST2,SO2>& vec )
1404 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1425 template<
typename MT1
1431 inline const typename MultExprTrait< SMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1432 operator*(
const SMatScalarMultExpr<MT1,ST1,SO1>& mat,
const DMatScalarMultExpr<MT2,ST2,SO2>& vec )
1436 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1452 template<
typename MT,
typename ST1,
typename ST2 >
1453 struct DMatScalarMultExprTrait< DMatScalarMultExpr<MT,ST1,false>, ST2 >
1457 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1458 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1459 ,
typename DMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1460 , INVALID_TYPE >::Type Type;
1477 template<
typename MT,
typename ST1,
typename ST2 >
1478 struct TDMatScalarMultExprTrait< DMatScalarMultExpr<MT,ST1,true>, ST2 >
1482 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1483 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1484 ,
typename TDMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1485 , INVALID_TYPE >::Type Type;
1502 template<
typename MT,
typename ST1,
typename ST2 >
1503 struct DMatScalarDivExprTrait< DMatScalarMultExpr<MT,ST1,false>, ST2 >
1507 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1511 typedef typename DMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1512 typedef typename DMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1517 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1518 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1519 ,
typename SelectType<condition,T1,T2>::Type
1520 , INVALID_TYPE >::Type Type;
1537 template<
typename MT,
typename ST1,
typename ST2 >
1538 struct TDMatScalarDivExprTrait< DMatScalarMultExpr<MT,ST1,true>, ST2 >
1542 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1546 typedef typename TDMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1547 typedef typename TDMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1552 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1553 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1554 ,
typename SelectType<condition,T1,T2>::Type
1555 , INVALID_TYPE >::Type Type;
1572 template<
typename MT,
typename ST,
typename VT >
1573 struct DMatDVecMultExprTrait< DMatScalarMultExpr<MT,ST,false>, VT >
1577 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1578 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1579 IsNumeric<ST>::value
1580 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1581 , INVALID_TYPE >::Type Type;
1590 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1591 struct DMatDVecMultExprTrait< DMatScalarMultExpr<MT,ST1,false>, DVecScalarMultExpr<VT,ST2,false> >
1595 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1596 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1597 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1598 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1599 , INVALID_TYPE >::Type Type;
1616 template<
typename MT,
typename ST,
typename VT >
1617 struct TDMatDVecMultExprTrait< DMatScalarMultExpr<MT,ST,true>, VT >
1621 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1622 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1623 IsNumeric<ST>::value
1624 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1625 , INVALID_TYPE >::Type Type;
1634 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1635 struct TDMatDVecMultExprTrait< DMatScalarMultExpr<MT,ST1,true>, DVecScalarMultExpr<VT,ST2,false> >
1639 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1640 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1641 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1642 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1643 , INVALID_TYPE >::Type Type;
1660 template<
typename VT,
typename MT,
typename ST >
1661 struct TDVecDMatMultExprTrait< VT, DMatScalarMultExpr<MT,ST,false> >
1665 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1666 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1667 IsNumeric<ST>::value
1668 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
1669 , INVALID_TYPE >::Type Type;
1678 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1679 struct TDVecDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,false> >
1683 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1684 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1685 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1686 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1687 , INVALID_TYPE >::Type Type;
1704 template<
typename VT,
typename MT,
typename ST >
1705 struct TDVecTDMatMultExprTrait< VT, DMatScalarMultExpr<MT,ST,true> >
1709 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1710 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1711 IsNumeric<ST>::value
1712 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
1713 , INVALID_TYPE >::Type Type;
1722 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1723 struct TDVecTDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,true> >
1727 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1728 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1729 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1730 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1731 , INVALID_TYPE >::Type Type;
1748 template<
typename MT,
typename ST,
typename VT >
1749 struct DMatSVecMultExprTrait< DMatScalarMultExpr<MT,ST,false>, VT >
1753 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1754 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1755 IsNumeric<ST>::value
1756 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
1757 , INVALID_TYPE >::Type Type;
1766 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1767 struct DMatSVecMultExprTrait< DMatScalarMultExpr<MT,ST1,false>, SVecScalarMultExpr<VT,ST2,false> >
1771 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1772 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1773 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1774 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1775 , INVALID_TYPE >::Type Type;
1792 template<
typename MT,
typename ST,
typename VT >
1793 struct TDMatSVecMultExprTrait< DMatScalarMultExpr<MT,ST,true>, VT >
1797 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1798 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1799 IsNumeric<ST>::value
1800 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
1801 , INVALID_TYPE >::Type Type;
1810 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1811 struct TDMatSVecMultExprTrait< DMatScalarMultExpr<MT,ST1,true>, SVecScalarMultExpr<VT,ST2,false> >
1815 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1816 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1817 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1818 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1819 , INVALID_TYPE >::Type Type;
1836 template<
typename VT,
typename MT,
typename ST >
1837 struct TSVecDMatMultExprTrait< VT, DMatScalarMultExpr<MT,ST,false> >
1841 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
1842 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1843 IsNumeric<ST>::value
1844 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
1845 , INVALID_TYPE >::Type Type;
1854 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1855 struct TSVecDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,false> >
1859 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
1860 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1861 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1862 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1863 , INVALID_TYPE >::Type Type;
1880 template<
typename VT,
typename MT,
typename ST >
1881 struct TSVecTDMatMultExprTrait< VT, DMatScalarMultExpr<MT,ST,true> >
1885 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
1886 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1887 IsNumeric<ST>::value
1888 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
1889 , INVALID_TYPE >::Type Type;
1898 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1899 struct TSVecTDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,true> >
1903 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
1904 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1905 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1906 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1907 , INVALID_TYPE >::Type Type;
1924 template<
typename MT1,
typename ST,
typename MT2 >
1925 struct DMatDMatMultExprTrait< DMatScalarMultExpr<MT1,ST,false>, MT2 >
1929 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1930 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1931 IsNumeric<ST>::value
1932 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1933 , INVALID_TYPE >::Type Type;
1942 template<
typename MT1,
typename MT2,
typename ST >
1943 struct DMatDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,false> >
1947 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1948 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1949 IsNumeric<ST>::value
1950 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1951 , INVALID_TYPE >::Type Type;
1960 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
1961 struct DMatDMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,false>, DMatScalarMultExpr<MT2,ST2,false> >
1965 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1966 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1967 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1968 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1969 , INVALID_TYPE >::Type Type;
1986 template<
typename MT1,
typename ST,
typename MT2 >
1987 struct DMatTDMatMultExprTrait< DMatScalarMultExpr<MT1,ST,false>, MT2 >
1991 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1992 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1993 IsNumeric<ST>::value
1994 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1995 , INVALID_TYPE >::Type Type;
2004 template<
typename MT1,
typename MT2,
typename ST >
2005 struct DMatTDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,true> >
2009 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2010 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2011 IsNumeric<ST>::value
2012 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2013 , INVALID_TYPE >::Type Type;
2022 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2023 struct DMatTDMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,false>, DMatScalarMultExpr<MT2,ST2,true> >
2027 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2028 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2029 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2030 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2031 , INVALID_TYPE >::Type Type;
2048 template<
typename MT1,
typename ST,
typename MT2 >
2049 struct TDMatDMatMultExprTrait< DMatScalarMultExpr<MT1,ST,true>, MT2 >
2053 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2054 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2055 IsNumeric<ST>::value
2056 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2057 , INVALID_TYPE >::Type Type;
2066 template<
typename MT1,
typename MT2,
typename ST >
2067 struct TDMatDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,false> >
2071 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2072 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2073 IsNumeric<ST>::value
2074 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2075 , INVALID_TYPE >::Type Type;
2084 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2085 struct TDMatDMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,true>, DMatScalarMultExpr<MT2,ST2,false> >
2089 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2090 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2091 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2092 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2093 , INVALID_TYPE >::Type Type;
2110 template<
typename MT1,
typename ST,
typename MT2 >
2111 struct TDMatTDMatMultExprTrait< DMatScalarMultExpr<MT1,ST,true>, MT2 >
2115 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2116 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2117 IsNumeric<ST>::value
2118 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2119 , INVALID_TYPE >::Type Type;
2128 template<
typename MT1,
typename MT2,
typename ST >
2129 struct TDMatTDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,true> >
2133 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2134 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2135 IsNumeric<ST>::value
2136 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2137 , INVALID_TYPE >::Type Type;
2146 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2147 struct TDMatTDMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,true>, DMatScalarMultExpr<MT2,ST2,true> >
2151 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2152 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2153 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2154 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2155 , INVALID_TYPE >::Type Type;
2172 template<
typename MT1,
typename ST,
typename MT2 >
2173 struct DMatSMatMultExprTrait< DMatScalarMultExpr<MT1,ST,false>, MT2 >
2177 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2178 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2179 IsNumeric<ST>::value
2180 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2181 , INVALID_TYPE >::Type Type;
2190 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2191 struct DMatSMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,false> >
2195 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2196 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2197 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2198 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2199 , INVALID_TYPE >::Type Type;
2216 template<
typename MT1,
typename ST,
typename MT2 >
2217 struct DMatTSMatMultExprTrait< DMatScalarMultExpr<MT1,ST,false>, MT2 >
2221 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2222 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2223 IsNumeric<ST>::value
2224 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2225 , INVALID_TYPE >::Type Type;
2234 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2235 struct DMatTSMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,true> >
2239 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2240 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2241 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2242 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2243 , INVALID_TYPE >::Type Type;
2260 template<
typename MT1,
typename ST,
typename MT2 >
2261 struct TDMatSMatMultExprTrait< DMatScalarMultExpr<MT1,ST,true>, MT2 >
2265 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2266 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2267 IsNumeric<ST>::value
2268 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2269 , INVALID_TYPE >::Type Type;
2278 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2279 struct TDMatSMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,false> >
2283 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2284 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2285 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2286 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2287 , INVALID_TYPE >::Type Type;
2304 template<
typename MT1,
typename ST,
typename MT2 >
2305 struct TDMatTSMatMultExprTrait< DMatScalarMultExpr<MT1,ST,true>, MT2 >
2309 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2310 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2311 IsNumeric<ST>::value
2312 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2313 , INVALID_TYPE >::Type Type;
2322 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2323 struct TDMatTSMatMultExprTrait< DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,true> >
2327 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2328 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2329 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2330 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2331 , INVALID_TYPE >::Type Type;
2348 template<
typename MT1,
typename ST,
typename MT2 >
2349 struct SMatDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,false> >
2353 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2354 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2355 IsNumeric<ST>::value
2356 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2357 , INVALID_TYPE >::Type Type;
2366 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2367 struct SMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>, DMatScalarMultExpr<MT2,ST2,false> >
2371 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2372 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2373 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2374 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2375 , INVALID_TYPE >::Type Type;
2392 template<
typename MT1,
typename ST,
typename MT2 >
2393 struct SMatTDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,true> >
2397 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2398 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2399 IsNumeric<ST>::value
2400 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2401 , INVALID_TYPE >::Type Type;
2410 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2411 struct SMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>, DMatScalarMultExpr<MT2,ST2,true> >
2415 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2416 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2417 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2418 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2419 , INVALID_TYPE >::Type Type;
2436 template<
typename MT1,
typename ST,
typename MT2 >
2437 struct TSMatDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,false> >
2441 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2442 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2443 IsNumeric<ST>::value
2444 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2445 , INVALID_TYPE >::Type Type;
2454 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2455 struct TSMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>, DMatScalarMultExpr<MT2,ST2,false> >
2459 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2460 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2461 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2462 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2463 , INVALID_TYPE >::Type Type;
2480 template<
typename MT1,
typename ST,
typename MT2 >
2481 struct TSMatTDMatMultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,true> >
2485 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2486 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2487 IsNumeric<ST>::value
2488 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2489 , INVALID_TYPE >::Type Type;
2498 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2499 struct TSMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>, DMatScalarMultExpr<MT2,ST2,true> >
2503 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2504 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2505 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2506 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2507 , INVALID_TYPE >::Type Type;
2524 template<
typename MT,
typename ST,
bool SO,
bool AF >
2525 struct SubmatrixExprTrait< DMatScalarMultExpr<MT,ST,SO>, AF >
2529 typedef typename MultExprTrait< typename SubmatrixExprTrait<const MT,AF>::Type, ST >::Type Type;
2546 template<
typename MT,
typename ST,
bool SO >
2547 struct RowExprTrait< DMatScalarMultExpr<MT,ST,SO> >
2551 typedef typename MultExprTrait< typename RowExprTrait<const MT>::Type, ST >::Type Type;
2568 template<
typename MT,
typename ST,
bool SO >
2569 struct ColumnExprTrait< DMatScalarMultExpr<MT,ST,SO> >
2573 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:516
MT::ConstIterator IteratorType
ConstIterator type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:192
IntrinsicType load() const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:288
Pointer difference type of the Blaze library.
DifferenceType difference_type
Difference between two iterators.
Definition: DMatScalarMultExpr.h:189
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:409
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:4075
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:772
MultExprTrait< RN, ST >::Type ExprReturnType
Expression return type for the subscript operator.
Definition: DMatScalarMultExpr.h:127
MT::ResultType RT
Result type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:111
void smpSubAssign(DenseMatrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:151
bool isAligned() const
Returns whether the operands of the expression are properly aligned in memory.
Definition: DMatScalarMultExpr.h:560
ReferenceType reference
Reference return type.
Definition: DMatScalarMultExpr.h:188
ConstIterator & operator++()
Pre-increment operator.
Definition: DMatScalarMultExpr.h:236
Header file for the IsSparseMatrix type trait.
const ConstIterator operator--(int)
Post-decrement operator.
Definition: DMatScalarMultExpr.h:268
#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:197
bool operator>=(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:354
#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:579
Header file for the sparse matrix SMP implementation.
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2384
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:249
IteratorCategory iterator_category
The iterator category.
Definition: DMatScalarMultExpr.h:185
SelectType< useAssign, const ResultType, const DMatScalarMultExpr & >::Type CompositeType
Data type for composite expression templates.
Definition: DMatScalarMultExpr.h:162
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:112
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:365
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:278
Constraint on the data type.
Header file for the DivExprTrait class template.
ElementType ValueType
Type of the underlying elements.
Definition: DMatScalarMultExpr.h:179
Constraint on the data type.
Header file for the MultExprTrait class template.
void smpAddAssign(DenseMatrix< 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:121
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:251
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: DMatScalarMultExpr.h:570
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:182
Header file for the multiplication trait.
size_t rows() const
Returns the current number of rows of the matrix.
Definition: DMatScalarMultExpr.h:496
bool operator<(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:321
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:443
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2388
Expression object for dense matrix-scalar multiplications.The DMatScalarMultExpr class represents the...
Definition: DMatScalarMultExpr.h:105
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: DMatScalarMultExpr.h:538
Header file for the dense matrix SMP implementation.
ConstIterator & operator+=(size_t inc)
Addition assignment operator.
Definition: DMatScalarMultExpr.h:213
IteratorType iterator_
Iterator to the current element.
Definition: DMatScalarMultExpr.h:408
Header file for the DenseMatrix base class.
bool operator<=(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:343
IntrinsicType load(size_t i, size_t j) const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:457
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:159
#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:180
#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:299
SelectType< IsExpression< MT >::value, const MT, const MT & >::Type LeftOperand
Composite type of the left-hand side dense matrix expression.
Definition: DMatScalarMultExpr.h:165
Constraints on the storage order of matrix types.
LeftOperand matrix_
Left-hand side dense matrix of the multiplication expression.
Definition: DMatScalarMultExpr.h:578
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2382
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:486
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:401
Header file for the BaseElementType type trait.
size_t columns() const
Returns the current number of columns of the matrix.
Definition: DMatScalarMultExpr.h:506
ConstIterator(IteratorType iterator, RightOperand scalar)
Constructor for the ConstIterator class.
Definition: DMatScalarMultExpr.h:201
friend const ConstIterator operator+(size_t inc, const ConstIterator &it)
Addition between an integral value and a ConstIterator.
Definition: DMatScalarMultExpr.h:389
Header file for the IsNumeric type trait.
ResultType::ElementType ElementType
Resulting element type.
Definition: DMatScalarMultExpr.h:155
ElementType & ReferenceType
Reference return type.
Definition: DMatScalarMultExpr.h:181
RightOperand rightOperand() const
Returns the right-hand side scalar operand.
Definition: DMatScalarMultExpr.h:526
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:2383
Header file for the MatScalarMultExpr base class.
Intrinsic characteristics of data types.The IntrinsicTrait class template provides the intrinsic char...
Definition: IntrinsicTrait.h:748
MT::CompositeType CT
Composite type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:114
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:430
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:550
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:225
#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:475
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:310
bool operator>(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:332
const ConstIterator operator++(int)
Post-increment operator.
Definition: DMatScalarMultExpr.h:247
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:377
Header file for the IsDenseVector type trait.
Header file for all intrinsic functionality.
ConstIterator & operator--()
Pre-decrement operator.
Definition: DMatScalarMultExpr.h:257
MT::ElementType ET
Element type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:113
Header file for the IsRowMajorMatrix type trait.
const bool rowMajor
Storage order flag for row-major matrices.
Definition: StorageOrder.h:71
Header file for the IsComputation type trait class.
ST RightOperand
Composite type of the right-hand side scalar value.
Definition: DMatScalarMultExpr.h:168
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:154
#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:187
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2379
Header file for basic type definitions.
IntrinsicTrait< ElementType >::Type IntrinsicType
Resulting intrinsic element type.
Definition: DMatScalarMultExpr.h:156
Iterator over the elements of the dense matrix.
Definition: DMatScalarMultExpr.h:174
std::random_access_iterator_tag IteratorCategory
The iterator category.
Definition: DMatScalarMultExpr.h:178
MultTrait< RT, ST >::Type ResultType
Result type for expression template evaluations.
Definition: DMatScalarMultExpr.h:152
ResultType::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatScalarMultExpr.h:153
DMatScalarMultExpr< MT, ST, SO > This
Type of this DMatScalarMultExpr instance.
Definition: DMatScalarMultExpr.h:151
Evaluation of the resulting expression type of a multiplication.Via this type trait it is possible to...
Definition: MultExprTrait.h:137
Header file for the thresholds for matrix/vector and matrix/matrix multiplications.
#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
const size_t SMP_DMATSCALARMULT_THRESHOLD
SMP dense matrix/scalar multiplication/division threshold.This threshold represents the system-specif...
Definition: Thresholds.h:420
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:186