35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
101 template<
typename MT
140 template<
typename MT2 >
143 enum { value = useAssign };
156 template<
typename MT2 >
157 struct UseSMPAssign {
158 enum { value = ( !MT2::smpAssignable || !MT::smpAssignable ) && useAssign };
216 : iterator_( iterator )
430 enum { vectorizable = MT::vectorizable &&
435 enum { smpAssignable = MT::smpAssignable };
551 template<
typename T >
563 template<
typename T >
565 return matrix_.isAliased( alias );
585 return matrix_.canSMPAssign() ||
610 template<
typename MT2
640 template<
typename MT2
670 template<
typename MT2
672 friend inline typename EnableIf< UseAssign<MT2> >::Type
708 template<
typename MT2
710 friend inline typename EnableIf< UseAssign<MT2> >::Type
754 template<
typename MT2
756 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
784 template<
typename MT2
786 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
795 (~lhs) *= rhs.scalar_;
814 template<
typename MT2
816 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
852 template<
typename MT2
854 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
921 template<
typename MT
923 inline const DMatScalarMultExpr<MT,typename BaseElementType<MT>::Type,SO>
963 template<
typename T1
966 inline const typename EnableIf< IsNumeric<T2>,
typename MultExprTrait<T1,T2>::Type >::Type
972 return Type( ~mat, scalar );
998 template<
typename T1
1001 inline const typename EnableIf< IsNumeric<T1>,
typename MultExprTrait<T1,T2>::Type >::Type
1007 return Type( ~mat, scalar );
1032 template<
typename VT
1035 inline const DMatScalarMultExpr<VT,ST,TF>
1036 operator-(
const DMatScalarMultExpr<VT,ST,TF>& dm )
1040 return DMatScalarMultExpr<VT,ST,TF>( dm.leftOperand(), -dm.rightOperand() );
1067 template<
typename MT
1071 inline const typename EnableIf< IsNumeric<ST2>
1072 ,
typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
1073 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
1077 return mat.leftOperand() * ( mat.rightOperand() * scalar );
1096 template<
typename ST1
1100 inline const typename EnableIf< IsNumeric<ST1>
1101 ,
typename MultExprTrait< ST1, DMatScalarMultExpr<MT,ST2,SO> >::Type >::Type
1102 operator*( ST1 scalar,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1106 return mat.leftOperand() * ( scalar * mat.rightOperand() );
1125 template<
typename MT
1129 inline const typename EnableIf< IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>
1130 ,
typename DivExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
1131 operator/(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
1135 return mat.leftOperand() * ( mat.rightOperand() / scalar );
1155 template<
typename MT
1159 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
1160 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const DenseVector<VT,false>& vec )
1164 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
1184 template<
typename VT
1188 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1189 operator*(
const DenseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1193 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1215 template<
typename MT
1220 inline const DVecScalarMultExpr<typename MultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type,
false>
1221 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const DVecScalarMultExpr<VT,ST2,false>& vec )
1225 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1247 template<
typename VT
1252 inline const typename MultExprTrait< DVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1253 operator*(
const DVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1257 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1277 template<
typename MT
1281 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
1282 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const SparseVector<VT,false>& vec )
1286 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
1306 template<
typename VT
1310 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1311 operator*(
const SparseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1315 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1337 template<
typename MT
1342 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, SVecScalarMultExpr<VT,ST2,false> >::Type
1343 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const SVecScalarMultExpr<VT,ST2,false>& vec )
1347 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1369 template<
typename VT
1374 inline const typename MultExprTrait< SVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1375 operator*(
const SVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1379 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1399 template<
typename MT1
1404 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1405 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const DenseMatrix<MT2,SO2>& rhs )
1409 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1429 template<
typename MT1
1434 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1435 operator*(
const DenseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1439 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1459 template<
typename MT1
1465 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1466 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST2,SO2>& rhs )
1470 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1490 template<
typename MT1
1495 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1496 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const SparseMatrix<MT2,SO2>& rhs )
1500 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1520 template<
typename MT1
1525 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1526 operator*(
const SparseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1530 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1551 template<
typename MT1
1557 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, SMatScalarMultExpr<MT2,ST2,SO2> >::Type
1558 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& mat,
const SMatScalarMultExpr<MT2,ST2,SO2>& vec )
1562 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1583 template<
typename MT1
1589 inline const typename MultExprTrait< SMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1590 operator*(
const SMatScalarMultExpr<MT1,ST1,SO1>& mat,
const DMatScalarMultExpr<MT2,ST2,SO2>& vec )
1594 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1610 template<
typename MT,
typename ST1,
typename ST2 >
1615 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1616 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1617 ,
typename DMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1618 , INVALID_TYPE >::Type Type;
1635 template<
typename MT,
typename ST1,
typename ST2 >
1640 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1641 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1642 ,
typename TDMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1643 , INVALID_TYPE >::Type Type;
1660 template<
typename MT,
typename ST1,
typename ST2 >
1665 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1669 typedef typename DMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1670 typedef typename DMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1675 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1676 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1677 ,
typename SelectType<condition,T1,T2>::Type
1678 , INVALID_TYPE >::Type Type;
1695 template<
typename MT,
typename ST1,
typename ST2 >
1700 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1704 typedef typename TDMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1705 typedef typename TDMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1710 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1711 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1712 ,
typename SelectType<condition,T1,T2>::Type
1713 , INVALID_TYPE >::Type Type;
1730 template<
typename MT,
typename ST,
typename VT >
1735 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1736 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1737 IsNumeric<ST>::value
1738 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1739 , INVALID_TYPE >::Type Type;
1748 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1749 struct DMatDVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,false>, DVecScalarMultExpr<VT,ST2,false> >
1753 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1754 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1755 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1756 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1757 , INVALID_TYPE >::Type Type;
1774 template<
typename MT,
typename ST,
typename VT >
1779 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1780 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1781 IsNumeric<ST>::value
1782 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1783 , INVALID_TYPE >::Type Type;
1792 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1793 struct TDMatDVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,true>, DVecScalarMultExpr<VT,ST2,false> >
1797 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1798 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1799 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1800 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1801 , INVALID_TYPE >::Type Type;
1818 template<
typename VT,
typename MT,
typename ST >
1823 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1824 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1825 IsNumeric<ST>::value
1826 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
1827 , INVALID_TYPE >::Type Type;
1836 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1837 struct TDVecDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,false> >
1841 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1842 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1843 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1844 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1845 , INVALID_TYPE >::Type Type;
1862 template<
typename VT,
typename MT,
typename ST >
1867 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1868 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1869 IsNumeric<ST>::value
1870 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
1871 , INVALID_TYPE >::Type Type;
1880 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1881 struct TDVecTDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,true> >
1885 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1886 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1887 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1888 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1889 , INVALID_TYPE >::Type Type;
1906 template<
typename MT,
typename ST,
typename VT >
1911 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1912 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1913 IsNumeric<ST>::value
1914 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
1915 , INVALID_TYPE >::Type Type;
1924 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1925 struct DMatSVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,false>, SVecScalarMultExpr<VT,ST2,false> >
1929 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1930 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1931 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1932 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1933 , INVALID_TYPE >::Type Type;
1950 template<
typename MT,
typename ST,
typename VT >
1955 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1956 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1957 IsNumeric<ST>::value
1958 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
1959 , INVALID_TYPE >::Type Type;
1968 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1969 struct TDMatSVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,true>, SVecScalarMultExpr<VT,ST2,false> >
1973 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1974 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
1975 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1976 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1977 , INVALID_TYPE >::Type Type;
1994 template<
typename VT,
typename MT,
typename ST >
1999 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2000 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2001 IsNumeric<ST>::value
2002 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
2003 , INVALID_TYPE >::Type Type;
2012 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
2013 struct TSVecDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,false> >
2017 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2018 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2019 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2020 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2021 , INVALID_TYPE >::Type Type;
2038 template<
typename VT,
typename MT,
typename ST >
2043 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2044 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2045 IsNumeric<ST>::value
2046 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
2047 , INVALID_TYPE >::Type Type;
2056 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
2057 struct TSVecTDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,true> >
2061 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2062 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2063 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2064 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2065 , INVALID_TYPE >::Type Type;
2082 template<
typename MT1,
typename ST,
typename MT2 >
2087 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2088 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2089 IsNumeric<ST>::value
2090 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2091 , INVALID_TYPE >::Type Type;
2100 template<
typename MT1,
typename MT2,
typename ST >
2105 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2106 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2107 IsNumeric<ST>::value
2108 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2109 , INVALID_TYPE >::Type Type;
2118 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2123 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2124 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2125 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2126 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2127 , INVALID_TYPE >::Type Type;
2144 template<
typename MT1,
typename ST,
typename MT2 >
2149 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2150 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2151 IsNumeric<ST>::value
2152 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2153 , INVALID_TYPE >::Type Type;
2162 template<
typename MT1,
typename MT2,
typename ST >
2167 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2168 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2169 IsNumeric<ST>::value
2170 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2171 , INVALID_TYPE >::Type Type;
2180 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2185 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2186 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2187 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2188 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2189 , INVALID_TYPE >::Type Type;
2206 template<
typename MT1,
typename ST,
typename MT2 >
2211 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2212 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2213 IsNumeric<ST>::value
2214 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2215 , INVALID_TYPE >::Type Type;
2224 template<
typename MT1,
typename MT2,
typename ST >
2229 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2230 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2231 IsNumeric<ST>::value
2232 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2233 , INVALID_TYPE >::Type Type;
2242 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2247 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2248 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2249 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2250 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2251 , INVALID_TYPE >::Type Type;
2268 template<
typename MT1,
typename ST,
typename MT2 >
2273 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2274 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2275 IsNumeric<ST>::value
2276 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2277 , INVALID_TYPE >::Type Type;
2286 template<
typename MT1,
typename MT2,
typename ST >
2291 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2292 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2293 IsNumeric<ST>::value
2294 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2295 , INVALID_TYPE >::Type Type;
2304 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2309 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2310 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2311 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2312 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2313 , INVALID_TYPE >::Type Type;
2330 template<
typename MT1,
typename ST,
typename MT2 >
2335 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2336 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2337 IsNumeric<ST>::value
2338 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2339 , INVALID_TYPE >::Type Type;
2348 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2349 struct DMatSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,false> >
2353 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2354 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2355 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2356 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2357 , INVALID_TYPE >::Type Type;
2374 template<
typename MT1,
typename ST,
typename MT2 >
2379 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2380 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2381 IsNumeric<ST>::value
2382 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2383 , INVALID_TYPE >::Type Type;
2392 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2393 struct DMatTSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,true> >
2397 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2398 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2399 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2400 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2401 , INVALID_TYPE >::Type Type;
2418 template<
typename MT1,
typename ST,
typename MT2 >
2423 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2424 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2425 IsNumeric<ST>::value
2426 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2427 , INVALID_TYPE >::Type Type;
2436 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2437 struct TDMatSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,false> >
2441 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2442 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2443 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2444 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2445 , INVALID_TYPE >::Type Type;
2462 template<
typename MT1,
typename ST,
typename MT2 >
2467 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2468 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2469 IsNumeric<ST>::value
2470 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2471 , INVALID_TYPE >::Type Type;
2480 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2481 struct TDMatTSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,true> >
2485 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2486 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2487 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2488 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2489 , INVALID_TYPE >::Type Type;
2506 template<
typename MT1,
typename ST,
typename MT2 >
2511 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2512 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2513 IsNumeric<ST>::value
2514 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2515 , INVALID_TYPE >::Type Type;
2524 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2525 struct SMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>,
DMatScalarMultExpr<MT2,ST2,false> >
2529 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2530 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2531 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2532 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2533 , INVALID_TYPE >::Type Type;
2550 template<
typename MT1,
typename ST,
typename MT2 >
2555 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2556 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2557 IsNumeric<ST>::value
2558 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2559 , INVALID_TYPE >::Type Type;
2568 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2569 struct SMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>,
DMatScalarMultExpr<MT2,ST2,true> >
2573 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2574 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2575 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2576 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2577 , INVALID_TYPE >::Type Type;
2594 template<
typename MT1,
typename ST,
typename MT2 >
2599 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2600 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2601 IsNumeric<ST>::value
2602 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2603 , INVALID_TYPE >::Type Type;
2612 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2613 struct TSMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>,
DMatScalarMultExpr<MT2,ST2,false> >
2617 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2618 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2619 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2620 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2621 , INVALID_TYPE >::Type Type;
2638 template<
typename MT1,
typename ST,
typename MT2 >
2643 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2644 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2645 IsNumeric<ST>::value
2646 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2647 , INVALID_TYPE >::Type Type;
2656 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2657 struct TSMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>,
DMatScalarMultExpr<MT2,ST2,true> >
2661 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2662 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2663 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2664 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2665 , INVALID_TYPE >::Type Type;
2682 template<
typename MT,
typename ST,
bool SO,
bool AF >
2687 typedef typename MultExprTrait< typename SubmatrixExprTrait<const MT,AF>::Type, ST >::Type Type;
2704 template<
typename MT,
typename ST,
bool SO >
2709 typedef typename MultExprTrait< typename RowExprTrait<const MT>::Type, ST >::Type Type;
2726 template<
typename MT,
typename ST,
bool SO >
2731 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:530
MT::ConstIterator IteratorType
ConstIterator type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:206
IntrinsicType load() const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:302
Pointer difference type of the Blaze library.
DifferenceType difference_type
Difference between two iterators.
Definition: DMatScalarMultExpr.h:203
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:423
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:4329
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:930
MultExprTrait< RN, ST >::Type ExprReturnType
Expression return type for the subscript operator.
Definition: DMatScalarMultExpr.h:126
MT::ResultType RT
Result type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:110
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:152
bool isAligned() const
Returns whether the operands of the expression are properly aligned in memory.
Definition: DMatScalarMultExpr.h:574
ReferenceType reference
Reference return type.
Definition: DMatScalarMultExpr.h:202
ConstIterator & operator++()
Pre-increment operator.
Definition: DMatScalarMultExpr.h:250
Header file for the IsSparseMatrix type trait.
const ConstIterator operator--(int)
Post-decrement operator.
Definition: DMatScalarMultExpr.h:282
#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:199
bool operator>=(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:368
#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.
const size_t SMP_DMATSCALARMULT_THRESHOLD
SMP dense matrix/scalar multiplication/division threshold.This threshold specifies when a dense matri...
Definition: Thresholds.h:811
Header file for the IsColumnMajorMatrix type trait.
RightOperand scalar_
Right-hand side scalar of the multiplication expression.
Definition: DMatScalarMultExpr.h:593
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2408
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:251
IteratorCategory iterator_category
The iterator category.
Definition: DMatScalarMultExpr.h:199
SelectType< useAssign, const ResultType, const DMatScalarMultExpr & >::Type CompositeType
Data type for composite expression templates.
Definition: DMatScalarMultExpr.h:176
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:111
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:690
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:379
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:107
ReturnType operator*() const
Direct access to the element at the current iterator position.
Definition: DMatScalarMultExpr.h:292
Constraint on the data type.
Header file for the DivExprTrait class template.
ElementType ValueType
Type of the underlying elements.
Definition: DMatScalarMultExpr.h:193
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:122
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:253
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: DMatScalarMultExpr.h:584
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:196
Header file for the multiplication trait.
size_t rows() const
Returns the current number of rows of the matrix.
Definition: DMatScalarMultExpr.h:510
bool operator<(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:335
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:457
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2412
Expression object for dense matrix-scalar multiplications.The DMatScalarMultExpr class represents the...
Definition: DMatScalarMultExpr.h:104
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: DMatScalarMultExpr.h:552
ConstIterator & operator+=(size_t inc)
Addition assignment operator.
Definition: DMatScalarMultExpr.h:227
IteratorType iterator_
Iterator to the current element.
Definition: DMatScalarMultExpr.h:422
Header file for the DenseMatrix base class.
bool operator<=(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:357
IntrinsicType load(size_t i, size_t j) const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:471
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:271
const SelectType< returnExpr, ExprReturnType, ElementType >::Type ReturnType
Return type for expression template evaluations.
Definition: DMatScalarMultExpr.h:173
#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:194
#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:313
SelectType< IsExpression< MT >::value, const MT, const MT & >::Type LeftOperand
Composite type of the left-hand side dense matrix expression.
Definition: DMatScalarMultExpr.h:179
Constraints on the storage order of matrix types.
LeftOperand matrix_
Left-hand side dense matrix of the multiplication expression.
Definition: DMatScalarMultExpr.h:592
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2406
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:500
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:415
Header file for the serial shim.
Header file for the BaseElementType type trait.
size_t columns() const
Returns the current number of columns of the matrix.
Definition: DMatScalarMultExpr.h:520
ConstIterator(IteratorType iterator, RightOperand scalar)
Constructor for the ConstIterator class.
Definition: DMatScalarMultExpr.h:215
void smpAssign(DenseMatrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:92
friend const ConstIterator operator+(size_t inc, const ConstIterator &it)
Addition between an integral value and a ConstIterator.
Definition: DMatScalarMultExpr.h:403
Header file for the IsNumeric type trait.
ResultType::ElementType ElementType
Resulting element type.
Definition: DMatScalarMultExpr.h:169
ElementType & ReferenceType
Reference return type.
Definition: DMatScalarMultExpr.h:195
RightOperand rightOperand() const
Returns the right-hand side scalar operand.
Definition: DMatScalarMultExpr.h:540
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:2407
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:113
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:444
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:564
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:301
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:239
#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:331
ConstIterator begin(size_t i) const
Returns an iterator to the first non-zero element of row i.
Definition: DMatScalarMultExpr.h:489
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:324
bool operator>(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:346
const ConstIterator operator++(int)
Post-increment operator.
Definition: DMatScalarMultExpr.h:261
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:391
Header file for the IsDenseVector type trait.
Header file for all intrinsic functionality.
ConstIterator & operator--()
Pre-decrement operator.
Definition: DMatScalarMultExpr.h:271
MT::ElementType ET
Element type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:112
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:182
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:168
#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:201
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2403
Header file for basic type definitions.
IntrinsicTrait< ElementType >::Type IntrinsicType
Resulting intrinsic element type.
Definition: DMatScalarMultExpr.h:170
Iterator over the elements of the dense matrix.
Definition: DMatScalarMultExpr.h:188
std::random_access_iterator_tag IteratorCategory
The iterator category.
Definition: DMatScalarMultExpr.h:192
MultTrait< RT, ST >::Type ResultType
Result type for expression template evaluations.
Definition: DMatScalarMultExpr.h:166
ResultType::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatScalarMultExpr.h:167
DMatScalarMultExpr< MT, ST, SO > This
Type of this DMatScalarMultExpr instance.
Definition: DMatScalarMultExpr.h:165
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
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:200