35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
110 template<
typename MT
149 template<
typename MT2 >
152 enum { value = useAssign };
165 template<
typename MT2 >
166 struct UseSMPAssign {
167 enum { value = ( !MT2::smpAssignable || !MT::smpAssignable ) && useAssign };
225 : iterator_( iterator )
311 inline IntrinsicType
load()
const {
439 enum { vectorizable = MT::vectorizable &&
444 enum { smpAssignable = MT::smpAssignable };
486 const IntrinsicType xmm1(
matrix_.load(i,j) );
560 template<
typename T >
572 template<
typename T >
574 return matrix_.isAliased( alias );
594 return matrix_.canSMPAssign() ||
619 template<
typename MT2
649 template<
typename MT2
679 template<
typename MT2
681 friend inline typename EnableIf< UseAssign<MT2> >::Type
693 const ResultType tmp(
serial( rhs ) );
717 template<
typename MT2
719 friend inline typename EnableIf< UseAssign<MT2> >::Type
731 const ResultType tmp(
serial( rhs ) );
763 template<
typename MT2
765 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
793 template<
typename MT2
795 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
804 (~lhs) *= rhs.scalar_;
823 template<
typename MT2
825 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
837 const ResultType tmp( rhs );
861 template<
typename MT2
863 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
875 const ResultType tmp( rhs );
930 template<
typename MT
932 inline const DMatScalarMultExpr<MT,typename BaseElementType<MT>::Type,SO>
972 template<
typename T1
975 inline const typename EnableIf< IsNumeric<T2>,
typename MultExprTrait<T1,T2>::Type >::Type
981 return Type( ~mat, scalar );
1007 template<
typename T1
1010 inline const typename EnableIf< IsNumeric<T1>,
typename MultExprTrait<T1,T2>::Type >::Type
1016 return Type( ~mat, scalar );
1041 template<
typename VT
1044 inline const DMatScalarMultExpr<VT,ST,TF>
1045 operator-(
const DMatScalarMultExpr<VT,ST,TF>& dm )
1049 return DMatScalarMultExpr<VT,ST,TF>( dm.leftOperand(), -dm.rightOperand() );
1076 template<
typename MT
1080 inline const typename EnableIf< IsNumeric<ST2>
1081 ,
typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
1082 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
1086 return mat.leftOperand() * ( mat.rightOperand() * scalar );
1105 template<
typename ST1
1109 inline const typename EnableIf< IsNumeric<ST1>
1110 ,
typename MultExprTrait< ST1, DMatScalarMultExpr<MT,ST2,SO> >::Type >::Type
1111 operator*( ST1 scalar,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1115 return mat.leftOperand() * ( scalar * mat.rightOperand() );
1134 template<
typename MT
1138 inline const typename EnableIf< IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>
1139 ,
typename DivExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
1140 operator/(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
1144 return mat.leftOperand() * ( mat.rightOperand() / scalar );
1164 template<
typename MT
1168 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
1169 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const DenseVector<VT,false>& vec )
1173 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
1193 template<
typename VT
1197 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1198 operator*(
const DenseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1202 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1224 template<
typename MT
1229 inline const DVecScalarMultExpr<typename MultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type,
false>
1230 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const DVecScalarMultExpr<VT,ST2,false>& vec )
1234 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1256 template<
typename VT
1261 inline const typename MultExprTrait< DVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1262 operator*(
const DVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1266 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1286 template<
typename MT
1290 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
1291 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const SparseVector<VT,false>& vec )
1295 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
1315 template<
typename VT
1319 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1320 operator*(
const SparseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1324 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1346 template<
typename MT
1351 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, SVecScalarMultExpr<VT,ST2,false> >::Type
1352 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const SVecScalarMultExpr<VT,ST2,false>& vec )
1356 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1378 template<
typename VT
1383 inline const typename MultExprTrait< SVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1384 operator*(
const SVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1388 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1408 template<
typename MT1
1413 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1414 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const DenseMatrix<MT2,SO2>& rhs )
1418 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1438 template<
typename MT1
1443 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1444 operator*(
const DenseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1448 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1468 template<
typename MT1
1474 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1475 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST2,SO2>& rhs )
1479 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1499 template<
typename MT1
1504 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1505 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const SparseMatrix<MT2,SO2>& rhs )
1509 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1529 template<
typename MT1
1534 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1535 operator*(
const SparseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1539 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1560 template<
typename MT1
1566 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, SMatScalarMultExpr<MT2,ST2,SO2> >::Type
1567 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& mat,
const SMatScalarMultExpr<MT2,ST2,SO2>& vec )
1571 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1592 template<
typename MT1
1598 inline const typename MultExprTrait< SMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1599 operator*(
const SMatScalarMultExpr<MT1,ST1,SO1>& mat,
const DMatScalarMultExpr<MT2,ST2,SO2>& vec )
1603 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1619 template<
typename MT,
typename ST,
bool SO >
1636 template<
typename MT,
typename ST,
bool SO >
1653 template<
typename MT,
typename ST,
bool SO >
1654 struct IsSymmetric<
DMatScalarMultExpr<MT,ST,SO> > :
public IsTrue< IsSymmetric<MT>::value >
1670 template<
typename MT,
typename ST,
bool SO >
1687 template<
typename MT,
typename ST,
bool SO >
1688 struct IsStrictlyLower<
DMatScalarMultExpr<MT,ST,SO> > :
public IsTrue< IsStrictlyLower<MT>::value >
1704 template<
typename MT,
typename ST,
bool SO >
1721 template<
typename MT,
typename ST,
bool SO >
1722 struct IsStrictlyUpper<
DMatScalarMultExpr<MT,ST,SO> > :
public IsTrue< IsStrictlyUpper<MT>::value >
1738 template<
typename MT,
typename ST1,
typename ST2 >
1743 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1744 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1745 ,
typename DMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1746 , INVALID_TYPE >::Type Type;
1763 template<
typename MT,
typename ST1,
typename ST2 >
1768 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1769 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1770 ,
typename TDMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1771 , INVALID_TYPE >::Type Type;
1788 template<
typename MT,
typename ST1,
typename ST2 >
1793 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1797 typedef typename DMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1798 typedef typename DMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1803 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1804 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1805 ,
typename SelectType<condition,T1,T2>::Type
1806 , INVALID_TYPE >::Type Type;
1823 template<
typename MT,
typename ST1,
typename ST2 >
1828 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1832 typedef typename TDMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1833 typedef typename TDMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1838 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1839 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1840 ,
typename SelectType<condition,T1,T2>::Type
1841 , INVALID_TYPE >::Type Type;
1858 template<
typename MT,
typename ST,
typename VT >
1863 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1864 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1865 IsNumeric<ST>::value
1866 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1867 , INVALID_TYPE >::Type Type;
1876 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1877 struct DMatDVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,false>, DVecScalarMultExpr<VT,ST2,false> >
1881 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1882 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1883 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1884 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1885 , INVALID_TYPE >::Type Type;
1902 template<
typename MT,
typename ST,
typename VT >
1907 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1908 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1909 IsNumeric<ST>::value
1910 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1911 , INVALID_TYPE >::Type Type;
1920 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1921 struct TDMatDVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,true>, DVecScalarMultExpr<VT,ST2,false> >
1925 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1926 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1927 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1928 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1929 , INVALID_TYPE >::Type Type;
1946 template<
typename VT,
typename MT,
typename ST >
1951 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1952 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1953 IsNumeric<ST>::value
1954 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
1955 , INVALID_TYPE >::Type Type;
1964 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1965 struct TDVecDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,false> >
1969 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1970 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1971 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1972 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1973 , INVALID_TYPE >::Type Type;
1990 template<
typename VT,
typename MT,
typename ST >
1995 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1996 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1997 IsNumeric<ST>::value
1998 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
1999 , INVALID_TYPE >::Type Type;
2008 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
2009 struct TDVecTDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,true> >
2013 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
2014 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2015 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2016 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2017 , INVALID_TYPE >::Type Type;
2034 template<
typename MT,
typename ST,
typename VT >
2039 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2040 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2041 IsNumeric<ST>::value
2042 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
2043 , INVALID_TYPE >::Type Type;
2052 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
2053 struct DMatSVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,false>, SVecScalarMultExpr<VT,ST2,false> >
2057 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2058 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2059 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2060 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2061 , INVALID_TYPE >::Type Type;
2078 template<
typename MT,
typename ST,
typename VT >
2083 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2084 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2085 IsNumeric<ST>::value
2086 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
2087 , INVALID_TYPE >::Type Type;
2096 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
2097 struct TDMatSVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,true>, SVecScalarMultExpr<VT,ST2,false> >
2101 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2102 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2103 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2104 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2105 , INVALID_TYPE >::Type Type;
2122 template<
typename VT,
typename MT,
typename ST >
2127 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2128 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2129 IsNumeric<ST>::value
2130 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
2131 , INVALID_TYPE >::Type Type;
2140 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
2141 struct TSVecDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,false> >
2145 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2146 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2147 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2148 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2149 , INVALID_TYPE >::Type Type;
2166 template<
typename VT,
typename MT,
typename ST >
2171 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2172 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2173 IsNumeric<ST>::value
2174 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
2175 , INVALID_TYPE >::Type Type;
2184 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
2185 struct TSVecTDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,true> >
2189 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2190 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2191 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2192 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2193 , INVALID_TYPE >::Type Type;
2210 template<
typename MT1,
typename ST,
typename MT2 >
2215 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2216 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2217 IsNumeric<ST>::value
2218 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2219 , INVALID_TYPE >::Type Type;
2228 template<
typename MT1,
typename MT2,
typename ST >
2233 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2234 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2235 IsNumeric<ST>::value
2236 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2237 , INVALID_TYPE >::Type Type;
2246 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2251 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2252 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2253 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2254 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2255 , INVALID_TYPE >::Type Type;
2272 template<
typename MT1,
typename ST,
typename MT2 >
2277 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2278 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2279 IsNumeric<ST>::value
2280 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2281 , INVALID_TYPE >::Type Type;
2290 template<
typename MT1,
typename MT2,
typename ST >
2295 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2296 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2297 IsNumeric<ST>::value
2298 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2299 , INVALID_TYPE >::Type Type;
2308 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2313 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2314 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2315 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2316 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2317 , INVALID_TYPE >::Type Type;
2334 template<
typename MT1,
typename ST,
typename MT2 >
2339 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2340 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2341 IsNumeric<ST>::value
2342 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2343 , INVALID_TYPE >::Type Type;
2352 template<
typename MT1,
typename MT2,
typename ST >
2357 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2358 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2359 IsNumeric<ST>::value
2360 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2361 , INVALID_TYPE >::Type Type;
2370 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2375 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2376 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2377 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2378 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2379 , INVALID_TYPE >::Type Type;
2396 template<
typename MT1,
typename ST,
typename MT2 >
2401 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2402 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2403 IsNumeric<ST>::value
2404 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2405 , INVALID_TYPE >::Type Type;
2414 template<
typename MT1,
typename MT2,
typename ST >
2419 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2420 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2421 IsNumeric<ST>::value
2422 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2423 , INVALID_TYPE >::Type Type;
2432 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2437 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2438 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2439 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2440 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2441 , INVALID_TYPE >::Type Type;
2458 template<
typename MT1,
typename ST,
typename MT2 >
2463 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2464 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2465 IsNumeric<ST>::value
2466 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2467 , INVALID_TYPE >::Type Type;
2476 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2477 struct DMatSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,false> >
2481 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2482 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2483 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2484 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2485 , INVALID_TYPE >::Type Type;
2502 template<
typename MT1,
typename ST,
typename MT2 >
2507 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2508 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2509 IsNumeric<ST>::value
2510 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2511 , INVALID_TYPE >::Type Type;
2520 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2521 struct DMatTSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,true> >
2525 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2526 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2527 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2528 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2529 , INVALID_TYPE >::Type Type;
2546 template<
typename MT1,
typename ST,
typename MT2 >
2551 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2552 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2553 IsNumeric<ST>::value
2554 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2555 , INVALID_TYPE >::Type Type;
2564 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2565 struct TDMatSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,false> >
2569 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2570 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2571 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2572 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2573 , INVALID_TYPE >::Type Type;
2590 template<
typename MT1,
typename ST,
typename MT2 >
2595 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2596 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2597 IsNumeric<ST>::value
2598 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2599 , INVALID_TYPE >::Type Type;
2608 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2609 struct TDMatTSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,true> >
2613 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2614 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2615 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2616 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2617 , INVALID_TYPE >::Type Type;
2634 template<
typename MT1,
typename ST,
typename MT2 >
2639 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2640 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2641 IsNumeric<ST>::value
2642 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2643 , INVALID_TYPE >::Type Type;
2652 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2653 struct SMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>,
DMatScalarMultExpr<MT2,ST2,false> >
2657 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2658 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2659 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2660 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2661 , INVALID_TYPE >::Type Type;
2678 template<
typename MT1,
typename ST,
typename MT2 >
2683 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2684 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2685 IsNumeric<ST>::value
2686 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2687 , INVALID_TYPE >::Type Type;
2696 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2697 struct SMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>,
DMatScalarMultExpr<MT2,ST2,true> >
2701 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2702 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2703 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2704 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2705 , INVALID_TYPE >::Type Type;
2722 template<
typename MT1,
typename ST,
typename MT2 >
2727 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2728 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2729 IsNumeric<ST>::value
2730 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2731 , INVALID_TYPE >::Type Type;
2740 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2741 struct TSMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>,
DMatScalarMultExpr<MT2,ST2,false> >
2745 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2746 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2747 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2748 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2749 , INVALID_TYPE >::Type Type;
2766 template<
typename MT1,
typename ST,
typename MT2 >
2771 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2772 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2773 IsNumeric<ST>::value
2774 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2775 , INVALID_TYPE >::Type Type;
2784 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2785 struct TSMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>,
DMatScalarMultExpr<MT2,ST2,true> >
2789 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2790 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2791 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2792 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2793 , INVALID_TYPE >::Type Type;
2810 template<
typename MT,
typename ST,
bool SO,
bool AF >
2815 typedef typename MultExprTrait< typename SubmatrixExprTrait<const MT,AF>::Type, ST >::Type Type;
2832 template<
typename MT,
typename ST,
bool SO >
2837 typedef typename MultExprTrait< typename RowExprTrait<const MT>::Type, ST >::Type Type;
2854 template<
typename MT,
typename ST,
bool SO >
2859 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:539
MT::ConstIterator IteratorType
ConstIterator type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:215
IntrinsicType load() const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:311
Pointer difference type of the Blaze library.
DifferenceType difference_type
Difference between two iterators.
Definition: DMatScalarMultExpr.h:212
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:432
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:8247
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:939
MultExprTrait< RN, ST >::Type ExprReturnType
Expression return type for the subscript operator.
Definition: DMatScalarMultExpr.h:135
Header file for basic type definitions.
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector)
Returns the current size/dimension of the vector.
Definition: Vector.h:264
MT::ResultType RT
Result type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:119
bool isAligned() const
Returns whether the operands of the expression are properly aligned in memory.
Definition: DMatScalarMultExpr.h:583
ReferenceType reference
Reference return type.
Definition: DMatScalarMultExpr.h:211
ConstIterator & operator++()
Pre-increment operator.
Definition: DMatScalarMultExpr.h:259
Header file for the IsSparseMatrix type trait.
const ConstIterator operator--(int)
Post-decrement operator.
Definition: DMatScalarMultExpr.h:291
#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:209
bool operator>=(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:377
#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:602
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2507
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:261
IteratorCategory iterator_category
The iterator category.
Definition: DMatScalarMultExpr.h:208
SelectType< useAssign, const ResultType, const DMatScalarMultExpr & >::Type CompositeType
Data type for composite expression templates.
Definition: DMatScalarMultExpr.h:185
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:120
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:699
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:388
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:301
Constraint on the data type.
Header file for the DivExprTrait class template.
ElementType ValueType
Type of the underlying elements.
Definition: DMatScalarMultExpr.h:202
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:263
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: DMatScalarMultExpr.h:593
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:205
Header file for the multiplication trait.
Header file for the IsStrictlyUpper type trait.
size_t rows() const
Returns the current number of rows of the matrix.
Definition: DMatScalarMultExpr.h:519
Header file for the IsSymmetric type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
#define BLAZE_ALWAYS_INLINE
Platform dependent setup of an enforced inline keyword.
Definition: Inline.h:85
bool operator<(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:344
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:466
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2511
Expression object for dense matrix-scalar multiplications.The DMatScalarMultExpr class represents the...
Definition: DMatScalarMultExpr.h:113
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: DMatScalarMultExpr.h:561
ConstIterator & operator+=(size_t inc)
Addition assignment operator.
Definition: DMatScalarMultExpr.h:236
IteratorType iterator_
Iterator to the current element.
Definition: DMatScalarMultExpr.h:431
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:366
const SelectType< returnExpr, ExprReturnType, ElementType >::Type ReturnType
Return type for expression template evaluations.
Definition: DMatScalarMultExpr.h:182
#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:203
#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:322
SelectType< IsExpression< MT >::value, const MT, const MT & >::Type LeftOperand
Composite type of the left-hand side dense matrix expression.
Definition: DMatScalarMultExpr.h:188
Constraints on the storage order of matrix types.
LeftOperand matrix_
Left-hand side dense matrix of the multiplication expression.
Definition: DMatScalarMultExpr.h:601
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2505
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:509
Header file for the EnableIf class template.
Header file for the IsStrictlyLower type trait.
friend const ConstIterator operator-(const ConstIterator &it, size_t dec)
Subtraction between a ConstIterator and an integral value.
Definition: DMatScalarMultExpr.h:424
Header file for the serial shim.
Header file for the BaseElementType type trait.
BLAZE_ALWAYS_INLINE IntrinsicType load(size_t i, size_t j) const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:480
size_t columns() const
Returns the current number of columns of the matrix.
Definition: DMatScalarMultExpr.h:529
ConstIterator(IteratorType iterator, RightOperand scalar)
Constructor for the ConstIterator class.
Definition: DMatScalarMultExpr.h:224
friend const ConstIterator operator+(size_t inc, const ConstIterator &it)
Addition between an integral value and a ConstIterator.
Definition: DMatScalarMultExpr.h:412
Header file for the IsNumeric type trait.
ResultType::ElementType ElementType
Resulting element type.
Definition: DMatScalarMultExpr.h:178
ElementType & ReferenceType
Reference return type.
Definition: DMatScalarMultExpr.h:204
RightOperand rightOperand() const
Returns the right-hand side scalar operand.
Definition: DMatScalarMultExpr.h:549
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:2506
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:122
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:150
DMatScalarMultExpr(const MT &matrix, ST scalar)
Constructor for the DMatScalarMultExpr class.
Definition: DMatScalarMultExpr.h:453
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:573
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:248
#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:498
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:333
bool operator>(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:355
const ConstIterator operator++(int)
Post-increment operator.
Definition: DMatScalarMultExpr.h:270
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:400
BLAZE_ALWAYS_INLINE EnableIf< And< IsIntegral< T >, HasSize< T, 2UL > >, sse_int16_t >::Type set(T value)
Sets all values in the vector to the given 2-byte integral value.
Definition: Set.h:73
Header file for the IsDenseVector type trait.
Header file for all intrinsic functionality.
ConstIterator & operator--()
Pre-decrement operator.
Definition: DMatScalarMultExpr.h:280
MT::ElementType ET
Element type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:121
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:191
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:177
#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:210
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2502
Header file for the IsTrue value trait.
IntrinsicTrait< ElementType >::Type IntrinsicType
Resulting intrinsic element type.
Definition: DMatScalarMultExpr.h:179
Iterator over the elements of the dense matrix.
Definition: DMatScalarMultExpr.h:197
std::random_access_iterator_tag IteratorCategory
The iterator category.
Definition: DMatScalarMultExpr.h:201
Header file for the IsUpper type trait.
MultTrait< RT, ST >::Type ResultType
Result type for expression template evaluations.
Definition: DMatScalarMultExpr.h:175
ResultType::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatScalarMultExpr.h:176
DMatScalarMultExpr< MT, ST, SO > This
Type of this DMatScalarMultExpr instance.
Definition: DMatScalarMultExpr.h:174
System settings for the inline keywords.
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:209