35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
107 template<
typename MT
146 template<
typename MT2 >
149 enum { value = useAssign };
162 template<
typename MT2 >
163 struct UseSMPAssign {
164 enum { value = ( !MT2::smpAssignable || !MT::smpAssignable ) && useAssign };
222 : iterator_( iterator )
436 enum { vectorizable = MT::vectorizable &&
441 enum { smpAssignable = MT::smpAssignable };
557 template<
typename T >
569 template<
typename T >
571 return matrix_.isAliased( alias );
591 return matrix_.canSMPAssign() ||
616 template<
typename MT2
646 template<
typename MT2
676 template<
typename MT2
678 friend inline typename EnableIf< UseAssign<MT2> >::Type
714 template<
typename MT2
716 friend inline typename EnableIf< UseAssign<MT2> >::Type
760 template<
typename MT2
762 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
790 template<
typename MT2
792 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
801 (~lhs) *= rhs.scalar_;
820 template<
typename MT2
822 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
858 template<
typename MT2
860 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
927 template<
typename MT
929 inline const DMatScalarMultExpr<MT,typename BaseElementType<MT>::Type,SO>
969 template<
typename T1
972 inline const typename EnableIf< IsNumeric<T2>,
typename MultExprTrait<T1,T2>::Type >::Type
978 return Type( ~mat, scalar );
1004 template<
typename T1
1007 inline const typename EnableIf< IsNumeric<T1>,
typename MultExprTrait<T1,T2>::Type >::Type
1013 return Type( ~mat, scalar );
1038 template<
typename VT
1041 inline const DMatScalarMultExpr<VT,ST,TF>
1042 operator-(
const DMatScalarMultExpr<VT,ST,TF>& dm )
1046 return DMatScalarMultExpr<VT,ST,TF>( dm.leftOperand(), -dm.rightOperand() );
1073 template<
typename MT
1077 inline const typename EnableIf< IsNumeric<ST2>
1078 ,
typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
1079 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
1083 return mat.leftOperand() * ( mat.rightOperand() * scalar );
1102 template<
typename ST1
1106 inline const typename EnableIf< IsNumeric<ST1>
1107 ,
typename MultExprTrait< ST1, DMatScalarMultExpr<MT,ST2,SO> >::Type >::Type
1108 operator*( ST1 scalar,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1112 return mat.leftOperand() * ( scalar * mat.rightOperand() );
1131 template<
typename MT
1135 inline const typename EnableIf< IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>
1136 ,
typename DivExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
1137 operator/(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
1141 return mat.leftOperand() * ( mat.rightOperand() / scalar );
1161 template<
typename MT
1165 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
1166 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const DenseVector<VT,false>& vec )
1170 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
1190 template<
typename VT
1194 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1195 operator*(
const DenseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1199 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1221 template<
typename MT
1226 inline const DVecScalarMultExpr<typename MultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type,
false>
1227 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const DVecScalarMultExpr<VT,ST2,false>& vec )
1231 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1253 template<
typename VT
1258 inline const typename MultExprTrait< DVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1259 operator*(
const DVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1263 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1283 template<
typename MT
1287 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
1288 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const SparseVector<VT,false>& vec )
1292 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
1312 template<
typename VT
1316 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1317 operator*(
const SparseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1321 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1343 template<
typename MT
1348 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, SVecScalarMultExpr<VT,ST2,false> >::Type
1349 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const SVecScalarMultExpr<VT,ST2,false>& vec )
1353 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1375 template<
typename VT
1380 inline const typename MultExprTrait< SVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1381 operator*(
const SVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1385 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1405 template<
typename MT1
1410 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1411 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const DenseMatrix<MT2,SO2>& rhs )
1415 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1435 template<
typename MT1
1440 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1441 operator*(
const DenseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1445 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1465 template<
typename MT1
1471 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1472 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST2,SO2>& rhs )
1476 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1496 template<
typename MT1
1501 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1502 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const SparseMatrix<MT2,SO2>& rhs )
1506 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1526 template<
typename MT1
1531 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1532 operator*(
const SparseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1536 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1557 template<
typename MT1
1563 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, SMatScalarMultExpr<MT2,ST2,SO2> >::Type
1564 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& mat,
const SMatScalarMultExpr<MT2,ST2,SO2>& vec )
1568 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1589 template<
typename MT1
1595 inline const typename MultExprTrait< SMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1596 operator*(
const SMatScalarMultExpr<MT1,ST1,SO1>& mat,
const DMatScalarMultExpr<MT2,ST2,SO2>& vec )
1600 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1616 template<
typename MT,
typename ST,
bool SO >
1633 template<
typename MT,
typename ST,
bool SO >
1650 template<
typename MT,
typename ST,
bool SO >
1651 struct IsSymmetric<
DMatScalarMultExpr<MT,ST,SO> > :
public IsTrue< IsSymmetric<MT>::value >
1667 template<
typename MT,
typename ST,
bool SO >
1684 template<
typename MT,
typename ST,
bool SO >
1701 template<
typename MT,
typename ST1,
typename ST2 >
1706 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1707 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1708 ,
typename DMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1709 , INVALID_TYPE >::Type Type;
1726 template<
typename MT,
typename ST1,
typename ST2 >
1731 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1732 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1733 ,
typename TDMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1734 , INVALID_TYPE >::Type Type;
1751 template<
typename MT,
typename ST1,
typename ST2 >
1756 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1760 typedef typename DMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1761 typedef typename DMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1766 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1767 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1768 ,
typename SelectType<condition,T1,T2>::Type
1769 , INVALID_TYPE >::Type Type;
1786 template<
typename MT,
typename ST1,
typename ST2 >
1791 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1795 typedef typename TDMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1796 typedef typename TDMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1801 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1802 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1803 ,
typename SelectType<condition,T1,T2>::Type
1804 , INVALID_TYPE >::Type Type;
1821 template<
typename MT,
typename ST,
typename VT >
1826 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1827 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1828 IsNumeric<ST>::value
1829 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1830 , INVALID_TYPE >::Type Type;
1839 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1840 struct DMatDVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,false>, DVecScalarMultExpr<VT,ST2,false> >
1844 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1845 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1846 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1847 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1848 , INVALID_TYPE >::Type Type;
1865 template<
typename MT,
typename ST,
typename VT >
1870 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1871 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1872 IsNumeric<ST>::value
1873 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1874 , INVALID_TYPE >::Type Type;
1883 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1884 struct TDMatDVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,true>, DVecScalarMultExpr<VT,ST2,false> >
1888 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1889 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1890 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1891 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1892 , INVALID_TYPE >::Type Type;
1909 template<
typename VT,
typename MT,
typename ST >
1914 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1915 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1916 IsNumeric<ST>::value
1917 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
1918 , INVALID_TYPE >::Type Type;
1927 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1928 struct TDVecDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,false> >
1932 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1933 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1934 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1935 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1936 , INVALID_TYPE >::Type Type;
1953 template<
typename VT,
typename MT,
typename ST >
1958 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1959 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1960 IsNumeric<ST>::value
1961 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
1962 , INVALID_TYPE >::Type Type;
1971 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1972 struct TDVecTDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,true> >
1976 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1977 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1978 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1979 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1980 , INVALID_TYPE >::Type Type;
1997 template<
typename MT,
typename ST,
typename VT >
2002 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2003 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2004 IsNumeric<ST>::value
2005 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
2006 , INVALID_TYPE >::Type Type;
2015 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
2016 struct DMatSVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,false>, SVecScalarMultExpr<VT,ST2,false> >
2020 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2021 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2022 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2023 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2024 , INVALID_TYPE >::Type Type;
2041 template<
typename MT,
typename ST,
typename VT >
2046 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2047 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2048 IsNumeric<ST>::value
2049 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
2050 , INVALID_TYPE >::Type Type;
2059 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
2060 struct TDMatSVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,true>, SVecScalarMultExpr<VT,ST2,false> >
2064 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2065 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2066 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2067 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2068 , INVALID_TYPE >::Type Type;
2085 template<
typename VT,
typename MT,
typename ST >
2090 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2091 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2092 IsNumeric<ST>::value
2093 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
2094 , INVALID_TYPE >::Type Type;
2103 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
2104 struct TSVecDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,false> >
2108 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2109 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2110 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2111 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2112 , INVALID_TYPE >::Type Type;
2129 template<
typename VT,
typename MT,
typename ST >
2134 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2135 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2136 IsNumeric<ST>::value
2137 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
2138 , INVALID_TYPE >::Type Type;
2147 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
2148 struct TSVecTDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,true> >
2152 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2153 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2154 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2155 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2156 , INVALID_TYPE >::Type Type;
2173 template<
typename MT1,
typename ST,
typename MT2 >
2178 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2179 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2180 IsNumeric<ST>::value
2181 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2182 , INVALID_TYPE >::Type Type;
2191 template<
typename MT1,
typename MT2,
typename ST >
2196 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2197 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2198 IsNumeric<ST>::value
2199 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2200 , INVALID_TYPE >::Type Type;
2209 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2214 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2215 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2216 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2217 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2218 , INVALID_TYPE >::Type Type;
2235 template<
typename MT1,
typename ST,
typename MT2 >
2240 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2241 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2242 IsNumeric<ST>::value
2243 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2244 , INVALID_TYPE >::Type Type;
2253 template<
typename MT1,
typename MT2,
typename ST >
2258 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2259 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2260 IsNumeric<ST>::value
2261 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2262 , INVALID_TYPE >::Type Type;
2271 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2276 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2277 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2278 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2279 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2280 , INVALID_TYPE >::Type Type;
2297 template<
typename MT1,
typename ST,
typename MT2 >
2302 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2303 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2304 IsNumeric<ST>::value
2305 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2306 , INVALID_TYPE >::Type Type;
2315 template<
typename MT1,
typename MT2,
typename ST >
2320 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2321 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2322 IsNumeric<ST>::value
2323 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2324 , INVALID_TYPE >::Type Type;
2333 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2338 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2339 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2340 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2341 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2342 , INVALID_TYPE >::Type Type;
2359 template<
typename MT1,
typename ST,
typename MT2 >
2364 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2365 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2366 IsNumeric<ST>::value
2367 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2368 , INVALID_TYPE >::Type Type;
2377 template<
typename MT1,
typename MT2,
typename ST >
2382 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2383 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2384 IsNumeric<ST>::value
2385 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2386 , INVALID_TYPE >::Type Type;
2395 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2400 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2401 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2402 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2403 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2404 , INVALID_TYPE >::Type Type;
2421 template<
typename MT1,
typename ST,
typename MT2 >
2426 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2427 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2428 IsNumeric<ST>::value
2429 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2430 , INVALID_TYPE >::Type Type;
2439 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2440 struct DMatSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,false> >
2444 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2445 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2446 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2447 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2448 , INVALID_TYPE >::Type Type;
2465 template<
typename MT1,
typename ST,
typename MT2 >
2470 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2471 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2472 IsNumeric<ST>::value
2473 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2474 , INVALID_TYPE >::Type Type;
2483 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2484 struct DMatTSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,true> >
2488 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2489 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2490 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2491 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2492 , INVALID_TYPE >::Type Type;
2509 template<
typename MT1,
typename ST,
typename MT2 >
2514 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2515 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2516 IsNumeric<ST>::value
2517 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2518 , INVALID_TYPE >::Type Type;
2527 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2528 struct TDMatSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,false> >
2532 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2533 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2534 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2535 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2536 , INVALID_TYPE >::Type Type;
2553 template<
typename MT1,
typename ST,
typename MT2 >
2558 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2559 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2560 IsNumeric<ST>::value
2561 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2562 , INVALID_TYPE >::Type Type;
2571 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2572 struct TDMatTSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,true> >
2576 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2577 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2578 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2579 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2580 , INVALID_TYPE >::Type Type;
2597 template<
typename MT1,
typename ST,
typename MT2 >
2602 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2603 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2604 IsNumeric<ST>::value
2605 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2606 , INVALID_TYPE >::Type Type;
2615 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2616 struct SMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>,
DMatScalarMultExpr<MT2,ST2,false> >
2620 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2621 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2622 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2623 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2624 , INVALID_TYPE >::Type Type;
2641 template<
typename MT1,
typename ST,
typename MT2 >
2646 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2647 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2648 IsNumeric<ST>::value
2649 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2650 , INVALID_TYPE >::Type Type;
2659 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2660 struct SMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>,
DMatScalarMultExpr<MT2,ST2,true> >
2664 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2665 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2666 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2667 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2668 , INVALID_TYPE >::Type Type;
2685 template<
typename MT1,
typename ST,
typename MT2 >
2690 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2691 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2692 IsNumeric<ST>::value
2693 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2694 , INVALID_TYPE >::Type Type;
2703 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2704 struct TSMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>,
DMatScalarMultExpr<MT2,ST2,false> >
2708 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2709 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2710 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2711 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2712 , INVALID_TYPE >::Type Type;
2729 template<
typename MT1,
typename ST,
typename MT2 >
2734 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2735 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2736 IsNumeric<ST>::value
2737 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2738 , INVALID_TYPE >::Type Type;
2747 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2748 struct TSMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>,
DMatScalarMultExpr<MT2,ST2,true> >
2752 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2753 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2754 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2755 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2756 , INVALID_TYPE >::Type Type;
2773 template<
typename MT,
typename ST,
bool SO,
bool AF >
2778 typedef typename MultExprTrait< typename SubmatrixExprTrait<const MT,AF>::Type, ST >::Type Type;
2795 template<
typename MT,
typename ST,
bool SO >
2800 typedef typename MultExprTrait< typename RowExprTrait<const MT>::Type, ST >::Type Type;
2817 template<
typename MT,
typename ST,
bool SO >
2822 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:536
MT::ConstIterator IteratorType
ConstIterator type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:212
IntrinsicType load() const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:308
Pointer difference type of the Blaze library.
DifferenceType difference_type
Difference between two iterators.
Definition: DMatScalarMultExpr.h:209
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:429
Header file for the Rows type trait.
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:4838
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:936
MultExprTrait< RN, ST >::Type ExprReturnType
Expression return type for the subscript operator.
Definition: DMatScalarMultExpr.h:132
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector)
Returns the current size/dimension of the vector.
Definition: Vector.h:258
MT::ResultType RT
Result type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:116
bool isAligned() const
Returns whether the operands of the expression are properly aligned in memory.
Definition: DMatScalarMultExpr.h:580
ReferenceType reference
Reference return type.
Definition: DMatScalarMultExpr.h:208
ConstIterator & operator++()
Pre-increment operator.
Definition: DMatScalarMultExpr.h:256
Header file for the IsSparseMatrix type trait.
const ConstIterator operator--(int)
Post-decrement operator.
Definition: DMatScalarMultExpr.h:288
#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:205
bool operator>=(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:374
#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:599
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2478
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:257
IteratorCategory iterator_category
The iterator category.
Definition: DMatScalarMultExpr.h:205
SelectType< useAssign, const ResultType, const DMatScalarMultExpr & >::Type CompositeType
Data type for composite expression templates.
Definition: DMatScalarMultExpr.h:182
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:117
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:695
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:385
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:298
Constraint on the data type.
Header file for the DivExprTrait class template.
ElementType ValueType
Type of the underlying elements.
Definition: DMatScalarMultExpr.h:199
Constraint on the data type.
Header file for the MultExprTrait class template.
Compile time check to query the requirement to evaluate an expression.Via this type trait it is possi...
Definition: RequiresEvaluation.h:90
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:259
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: DMatScalarMultExpr.h:590
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:202
Header file for the multiplication trait.
size_t rows() const
Returns the current number of rows of the matrix.
Definition: DMatScalarMultExpr.h:516
Header file for the IsSymmetric type trait.
bool operator<(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:341
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:463
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2482
Expression object for dense matrix-scalar multiplications.The DMatScalarMultExpr class represents the...
Definition: DMatScalarMultExpr.h:110
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: DMatScalarMultExpr.h:558
ConstIterator & operator+=(size_t inc)
Addition assignment operator.
Definition: DMatScalarMultExpr.h:233
IteratorType iterator_
Iterator to the current element.
Definition: DMatScalarMultExpr.h:428
Header file for the DenseMatrix base class.
BLAZE_ALWAYS_INLINE 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:635
Header file for the Columns type trait.
bool operator<=(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:363
IntrinsicType load(size_t i, size_t j) const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:477
const SelectType< returnExpr, ExprReturnType, ElementType >::Type ReturnType
Return type for expression template evaluations.
Definition: DMatScalarMultExpr.h:179
#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
Header file for the IsLower type trait.
ElementType * PointerType
Pointer return type.
Definition: DMatScalarMultExpr.h:200
#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:319
SelectType< IsExpression< MT >::value, const MT, const MT & >::Type LeftOperand
Composite type of the left-hand side dense matrix expression.
Definition: DMatScalarMultExpr.h:185
Constraints on the storage order of matrix types.
LeftOperand matrix_
Left-hand side dense matrix of the multiplication expression.
Definition: DMatScalarMultExpr.h:598
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2476
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:506
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:421
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:526
ConstIterator(IteratorType iterator, RightOperand scalar)
Constructor for the ConstIterator class.
Definition: DMatScalarMultExpr.h:221
friend const ConstIterator operator+(size_t inc, const ConstIterator &it)
Addition between an integral value and a ConstIterator.
Definition: DMatScalarMultExpr.h:409
Header file for the IsNumeric type trait.
ResultType::ElementType ElementType
Resulting element type.
Definition: DMatScalarMultExpr.h:175
ElementType & ReferenceType
Reference return type.
Definition: DMatScalarMultExpr.h:201
BLAZE_ALWAYS_INLINE 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:211
RightOperand rightOperand() const
Returns the right-hand side scalar operand.
Definition: DMatScalarMultExpr.h:546
EnableIf< IsDenseMatrix< MT1 > >::Type smpSubAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:160
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:2477
Header file for the MatScalarMultExpr base class.
Intrinsic characteristics of data types.The IntrinsicTrait class template provides the intrinsic char...
Definition: IntrinsicTrait.h:749
MT::CompositeType CT
Composite type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:119
Header file for run time assertion macros.
EnableIf< IsDenseMatrix< MT1 > >::Type smpAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:98
Utility type for generic codes.
Base template for the MultTrait class.
Definition: MultTrait.h:142
DMatScalarMultExpr(const MT &matrix, ST scalar)
Constructor for the DMatScalarMultExpr class.
Definition: DMatScalarMultExpr.h:450
BLAZE_ALWAYS_INLINE 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:742
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:570
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:245
#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
ConstIterator begin(size_t i) const
Returns an iterator to the first non-zero element of row i.
Definition: DMatScalarMultExpr.h:495
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:330
bool operator>(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:352
const ConstIterator operator++(int)
Post-increment operator.
Definition: DMatScalarMultExpr.h:267
Evaluation of the base element type of a given data type.Via this type trait it is possible to evalua...
Definition: BaseElementType.h:80
friend const ConstIterator operator+(const ConstIterator &it, size_t inc)
Addition between a ConstIterator and an integral value.
Definition: DMatScalarMultExpr.h:397
Header file for the IsDenseVector type trait.
Header file for all intrinsic functionality.
ConstIterator & operator--()
Pre-decrement operator.
Definition: DMatScalarMultExpr.h:277
MT::ElementType ET
Element type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:118
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:188
Base class for all compute expression templates.The Computation class serves as a tag for all computa...
Definition: Computation.h:59
EnableIf< IsDenseMatrix< MT1 > >::Type smpAddAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP addition assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:129
ResultType::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: DMatScalarMultExpr.h:174
#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:207
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2473
Header file for the IsTrue value trait.
Header file for basic type definitions.
IntrinsicTrait< ElementType >::Type IntrinsicType
Resulting intrinsic element type.
Definition: DMatScalarMultExpr.h:176
Iterator over the elements of the dense matrix.
Definition: DMatScalarMultExpr.h:194
std::random_access_iterator_tag IteratorCategory
The iterator category.
Definition: DMatScalarMultExpr.h:198
Header file for the IsUpper type trait.
MultTrait< RT, ST >::Type ResultType
Result type for expression template evaluations.
Definition: DMatScalarMultExpr.h:172
ResultType::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatScalarMultExpr.h:173
DMatScalarMultExpr< MT, ST, SO > This
Type of this DMatScalarMultExpr instance.
Definition: DMatScalarMultExpr.h:171
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
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.
BLAZE_ALWAYS_INLINE 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:849
ValueType value_type
Type of the underlying elements.
Definition: DMatScalarMultExpr.h:206