35 #ifndef _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DMATSCALARMULTEXPR_H_
118 template<
typename MT
157 template<
typename MT2 >
160 enum { value = useAssign };
173 template<
typename MT2 >
174 struct UseSMPAssign {
175 enum { value = ( !MT2::smpAssignable || !MT::smpAssignable ) && useAssign };
233 : iterator_( iterator )
319 inline IntrinsicType
load()
const {
447 enum { vectorizable = MT::vectorizable &&
454 enum { smpAssignable = MT::smpAssignable };
491 inline ReturnType
at(
size_t i,
size_t j )
const {
587 template<
typename T >
599 template<
typename T >
601 return matrix_.isAliased( alias );
621 return matrix_.canSMPAssign() ||
646 template<
typename MT2
657 assign( ~lhs, (~lhs) * rhs.
scalar_ );
676 template<
typename MT2
706 template<
typename MT2
708 friend inline typename EnableIf< UseAssign<MT2> >::Type
720 const ResultType tmp(
serial( rhs ) );
721 addAssign( ~lhs, tmp );
744 template<
typename MT2
746 friend inline typename EnableIf< UseAssign<MT2> >::Type
758 const ResultType tmp(
serial( rhs ) );
759 subAssign( ~lhs, tmp );
790 template<
typename MT2
792 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
820 template<
typename MT2
822 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
831 (~lhs) *= rhs.scalar_;
850 template<
typename MT2
852 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
864 const ResultType tmp( rhs );
888 template<
typename MT2
890 friend inline typename EnableIf< UseSMPAssign<MT2> >::Type
902 const ResultType tmp( rhs );
957 template<
typename MT
959 inline const DMatScalarMultExpr<MT,typename UnderlyingBuiltin<MT>::Type,SO>
999 template<
typename T1
1002 inline const typename EnableIf< IsNumeric<T2>,
typename MultExprTrait<T1,T2>::Type >::Type
1008 return Type( ~mat, scalar );
1034 template<
typename T1
1037 inline const typename EnableIf< IsNumeric<T1>,
typename MultExprTrait<T1,T2>::Type >::Type
1043 return Type( ~mat, scalar );
1068 template<
typename VT
1071 inline const DMatScalarMultExpr<VT,ST,TF>
1072 operator-(
const DMatScalarMultExpr<VT,ST,TF>& dm )
1076 return DMatScalarMultExpr<VT,ST,TF>( dm.leftOperand(), -dm.rightOperand() );
1103 template<
typename MT
1107 inline const typename EnableIf< IsNumeric<ST2>
1108 ,
typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
1109 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
1113 return mat.leftOperand() * ( mat.rightOperand() * scalar );
1132 template<
typename ST1
1136 inline const typename EnableIf< IsNumeric<ST1>
1137 ,
typename MultExprTrait< ST1, DMatScalarMultExpr<MT,ST2,SO> >::Type >::Type
1138 operator*( ST1 scalar,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1142 return mat.leftOperand() * ( scalar * mat.rightOperand() );
1161 template<
typename MT
1165 inline const typename EnableIf< And< IsNumeric<ST2>, IsInvertible< typename DivTrait<ST1,ST2>::Type > >
1166 ,
typename DivExprTrait< DMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
1167 operator/(
const DMatScalarMultExpr<MT,ST1,SO>& mat, ST2 scalar )
1171 return mat.leftOperand() * ( mat.rightOperand() / scalar );
1191 template<
typename MT
1195 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
1196 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const DenseVector<VT,false>& vec )
1200 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
1220 template<
typename VT
1224 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1225 operator*(
const DenseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1229 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1251 template<
typename MT
1256 inline const DVecScalarMultExpr<typename MultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type,
false>
1257 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const DVecScalarMultExpr<VT,ST2,false>& vec )
1261 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1283 template<
typename VT
1288 inline const typename MultExprTrait< DVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1289 operator*(
const DVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1293 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1313 template<
typename MT
1317 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST,SO>, VT >::Type
1318 operator*(
const DMatScalarMultExpr<MT,ST,SO>& mat,
const SparseVector<VT,false>& vec )
1322 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
1342 template<
typename VT
1346 inline const typename MultExprTrait< VT, DMatScalarMultExpr<MT,ST,SO> >::Type
1347 operator*(
const SparseVector<VT,true>& vec,
const DMatScalarMultExpr<MT,ST,SO>& mat )
1351 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
1373 template<
typename MT
1378 inline const typename MultExprTrait< DMatScalarMultExpr<MT,ST1,SO>, SVecScalarMultExpr<VT,ST2,false> >::Type
1379 operator*(
const DMatScalarMultExpr<MT,ST1,SO>& mat,
const SVecScalarMultExpr<VT,ST2,false>& vec )
1383 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1405 template<
typename VT
1410 inline const typename MultExprTrait< SVecScalarMultExpr<VT,ST1,true>, DMatScalarMultExpr<MT,ST2,SO> >::Type
1411 operator*(
const SVecScalarMultExpr<VT,ST1,true>& vec,
const DMatScalarMultExpr<MT,ST2,SO>& mat )
1415 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1435 template<
typename MT1
1440 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1441 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const DenseMatrix<MT2,SO2>& rhs )
1445 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1465 template<
typename MT1
1470 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1471 operator*(
const DenseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1475 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1495 template<
typename MT1
1501 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1502 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST2,SO2>& rhs )
1506 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1526 template<
typename MT1
1531 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1532 operator*(
const DMatScalarMultExpr<MT1,ST,SO1>& lhs,
const SparseMatrix<MT2,SO2>& rhs )
1536 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1556 template<
typename MT1
1561 inline const typename MultExprTrait< MT1, DMatScalarMultExpr<MT2,ST,SO2> >::Type
1562 operator*(
const SparseMatrix<MT1,SO1>& lhs,
const DMatScalarMultExpr<MT2,ST,SO2>& rhs )
1566 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1587 template<
typename MT1
1593 inline const typename MultExprTrait< DMatScalarMultExpr<MT1,ST1,SO1>, SMatScalarMultExpr<MT2,ST2,SO2> >::Type
1594 operator*(
const DMatScalarMultExpr<MT1,ST1,SO1>& mat,
const SMatScalarMultExpr<MT2,ST2,SO2>& vec )
1598 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1619 template<
typename MT1
1625 inline const typename MultExprTrait< SMatScalarMultExpr<MT1,ST1,SO1>, DMatScalarMultExpr<MT2,ST2,SO2> >::Type
1626 operator*(
const SMatScalarMultExpr<MT1,ST1,SO1>& mat,
const DMatScalarMultExpr<MT2,ST2,SO2>& vec )
1630 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1646 template<
typename MT,
typename ST,
bool SO >
1663 template<
typename MT,
typename ST,
bool SO >
1680 template<
typename MT,
typename ST,
bool SO >
1681 struct IsAligned<
DMatScalarMultExpr<MT,ST,SO> > :
public IsTrue< IsAligned<MT>::value >
1697 template<
typename MT,
typename ST,
bool SO >
1698 struct IsPadded<
DMatScalarMultExpr<MT,ST,SO> > :
public IsTrue< IsPadded<MT>::value >
1714 template<
typename MT,
typename ST,
bool SO >
1715 struct IsSymmetric<
DMatScalarMultExpr<MT,ST,SO> > :
public IsTrue< IsSymmetric<MT>::value >
1731 template<
typename MT,
typename ST,
bool SO >
1732 struct IsHermitian<
DMatScalarMultExpr<MT,ST,SO> > :
public IsTrue< IsHermitian<MT>::value >
1748 template<
typename MT,
typename ST,
bool SO >
1765 template<
typename MT,
typename ST,
bool SO >
1766 struct IsStrictlyLower<
DMatScalarMultExpr<MT,ST,SO> > :
public IsTrue< IsStrictlyLower<MT>::value >
1782 template<
typename MT,
typename ST,
bool SO >
1799 template<
typename MT,
typename ST,
bool SO >
1800 struct IsStrictlyUpper<
DMatScalarMultExpr<MT,ST,SO> > :
public IsTrue< IsStrictlyUpper<MT>::value >
1816 template<
typename MT,
typename ST1,
typename ST2 >
1821 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1822 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1823 ,
typename DMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1824 , INVALID_TYPE >::Type Type;
1841 template<
typename MT,
typename ST1,
typename ST2 >
1846 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1847 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1848 ,
typename TDMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1849 , INVALID_TYPE >::Type Type;
1866 template<
typename MT,
typename ST1,
typename ST2 >
1871 typedef typename DivTrait<ST1,ST2>::Type ScalarType;
1875 enum { condition = IsInvertible<ScalarType>::value };
1879 typedef typename DMatScalarMultExprTrait<MT,ScalarType>::Type T1;
1880 typedef typename DMatScalarDivExprTrait<MT,ScalarType>::Type T2;
1885 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1886 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1887 ,
typename SelectType<condition,T1,T2>::Type
1888 , INVALID_TYPE >::Type Type;
1905 template<
typename MT,
typename ST1,
typename ST2 >
1910 typedef typename DivTrait<ST1,ST2>::Type ScalarType;
1914 enum { condition = IsInvertible<ScalarType>::value };
1918 typedef typename TDMatScalarMultExprTrait<MT,ScalarType>::Type T1;
1919 typedef typename TDMatScalarDivExprTrait<MT,ScalarType>::Type T2;
1924 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1925 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1926 ,
typename SelectType<condition,T1,T2>::Type
1927 , INVALID_TYPE >::Type Type;
1944 template<
typename MT,
typename ST,
typename VT >
1949 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1950 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1951 IsNumeric<ST>::value
1952 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1953 , INVALID_TYPE >::Type Type;
1962 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1963 struct DMatDVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,false>, DVecScalarMultExpr<VT,ST2,false> >
1967 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1968 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1969 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1970 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1971 , INVALID_TYPE >::Type Type;
1988 template<
typename MT,
typename ST,
typename VT >
1993 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1994 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1995 IsNumeric<ST>::value
1996 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1997 , INVALID_TYPE >::Type Type;
2006 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
2007 struct TDMatDVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,true>, DVecScalarMultExpr<VT,ST2,false> >
2011 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2012 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
2013 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2014 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2015 , INVALID_TYPE >::Type Type;
2032 template<
typename VT,
typename MT,
typename ST >
2037 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
2038 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2039 IsNumeric<ST>::value
2040 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
2041 , INVALID_TYPE >::Type Type;
2050 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
2051 struct TDVecDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,false> >
2055 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
2056 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2057 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2058 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2059 , INVALID_TYPE >::Type Type;
2076 template<
typename VT,
typename MT,
typename ST >
2081 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
2082 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2083 IsNumeric<ST>::value
2084 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
2085 , INVALID_TYPE >::Type Type;
2094 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
2095 struct TDVecTDMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,true> >
2099 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
2100 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2101 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2102 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2103 , INVALID_TYPE >::Type Type;
2120 template<
typename MT,
typename ST,
typename VT >
2125 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2126 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2127 IsNumeric<ST>::value
2128 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
2129 , INVALID_TYPE >::Type Type;
2138 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
2139 struct DMatSVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,false>, SVecScalarMultExpr<VT,ST2,false> >
2143 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2144 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2145 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2146 ,
typename DVecScalarMultExprTrait<typename DMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2147 , INVALID_TYPE >::Type Type;
2164 template<
typename MT,
typename ST,
typename VT >
2169 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2170 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2171 IsNumeric<ST>::value
2172 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
2173 , INVALID_TYPE >::Type Type;
2182 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
2183 struct TDMatSVecMultExprTrait<
DMatScalarMultExpr<MT,ST1,true>, SVecScalarMultExpr<VT,ST2,false> >
2187 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2188 IsSparseVector<VT>::value && IsColumnVector<VT>::value &&
2189 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2190 ,
typename DVecScalarMultExprTrait<typename TDMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2191 , INVALID_TYPE >::Type Type;
2208 template<
typename VT,
typename MT,
typename ST >
2213 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2214 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2215 IsNumeric<ST>::value
2216 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
2217 , INVALID_TYPE >::Type Type;
2226 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
2227 struct TSVecDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,false> >
2231 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2232 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2233 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2234 ,
typename TDVecScalarMultExprTrait<typename TSVecDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2235 , INVALID_TYPE >::Type Type;
2252 template<
typename VT,
typename MT,
typename ST >
2257 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2258 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2259 IsNumeric<ST>::value
2260 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
2261 , INVALID_TYPE >::Type Type;
2270 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
2271 struct TSVecTDMatMultExprTrait< SVecScalarMultExpr<VT,ST1,true>,
DMatScalarMultExpr<MT,ST2,true> >
2275 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value &&
2276 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2277 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2278 ,
typename TDVecScalarMultExprTrait<typename TSVecTDMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2279 , INVALID_TYPE >::Type Type;
2296 template<
typename MT1,
typename ST,
typename MT2 >
2301 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2302 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2303 IsNumeric<ST>::value
2304 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2305 , INVALID_TYPE >::Type Type;
2314 template<
typename MT1,
typename MT2,
typename ST >
2319 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2320 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2321 IsNumeric<ST>::value
2322 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2323 , INVALID_TYPE >::Type Type;
2332 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2337 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2338 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2339 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2340 ,
typename DMatScalarMultExprTrait<typename DMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2341 , INVALID_TYPE >::Type Type;
2358 template<
typename MT1,
typename ST,
typename MT2 >
2363 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2364 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2365 IsNumeric<ST>::value
2366 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2367 , INVALID_TYPE >::Type Type;
2376 template<
typename MT1,
typename MT2,
typename ST >
2381 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2382 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2383 IsNumeric<ST>::value
2384 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2385 , INVALID_TYPE >::Type Type;
2394 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2399 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2400 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2401 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2402 ,
typename DMatScalarMultExprTrait<typename DMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2403 , INVALID_TYPE >::Type Type;
2420 template<
typename MT1,
typename ST,
typename MT2 >
2425 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2426 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2427 IsNumeric<ST>::value
2428 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2429 , INVALID_TYPE >::Type Type;
2438 template<
typename MT1,
typename MT2,
typename ST >
2443 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2444 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2445 IsNumeric<ST>::value
2446 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2447 , INVALID_TYPE >::Type Type;
2456 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2461 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2462 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2463 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2464 ,
typename TDMatScalarMultExprTrait<typename TDMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2465 , INVALID_TYPE >::Type Type;
2482 template<
typename MT1,
typename ST,
typename MT2 >
2487 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2488 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2489 IsNumeric<ST>::value
2490 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2491 , INVALID_TYPE >::Type Type;
2500 template<
typename MT1,
typename MT2,
typename ST >
2505 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2506 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2507 IsNumeric<ST>::value
2508 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2509 , INVALID_TYPE >::Type Type;
2518 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2523 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2524 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2525 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2526 ,
typename TDMatScalarMultExprTrait<typename TDMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2527 , INVALID_TYPE >::Type Type;
2544 template<
typename MT1,
typename ST,
typename MT2 >
2549 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2550 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2551 IsNumeric<ST>::value
2552 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2553 , INVALID_TYPE >::Type Type;
2562 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2563 struct DMatSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,false> >
2567 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2568 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2569 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2570 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2571 , INVALID_TYPE >::Type Type;
2588 template<
typename MT1,
typename ST,
typename MT2 >
2593 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2594 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2595 IsNumeric<ST>::value
2596 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2597 , INVALID_TYPE >::Type Type;
2606 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2607 struct DMatTSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,false>, SMatScalarMultExpr<MT2,ST2,true> >
2611 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2612 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2613 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2614 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2615 , INVALID_TYPE >::Type Type;
2632 template<
typename MT1,
typename ST,
typename MT2 >
2637 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2638 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2639 IsNumeric<ST>::value
2640 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2641 , INVALID_TYPE >::Type Type;
2650 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2651 struct TDMatSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,false> >
2655 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2656 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2657 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2658 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2659 , INVALID_TYPE >::Type Type;
2676 template<
typename MT1,
typename ST,
typename MT2 >
2681 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2682 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2683 IsNumeric<ST>::value
2684 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2685 , INVALID_TYPE >::Type Type;
2694 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2695 struct TDMatTSMatMultExprTrait<
DMatScalarMultExpr<MT1,ST1,true>, SMatScalarMultExpr<MT2,ST2,true> >
2699 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2700 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2701 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2702 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2703 , INVALID_TYPE >::Type Type;
2720 template<
typename MT1,
typename ST,
typename MT2 >
2725 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2726 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2727 IsNumeric<ST>::value
2728 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2729 , INVALID_TYPE >::Type Type;
2738 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2739 struct SMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>,
DMatScalarMultExpr<MT2,ST2,false> >
2743 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2744 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2745 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2746 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2747 , INVALID_TYPE >::Type Type;
2764 template<
typename MT1,
typename ST,
typename MT2 >
2769 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2770 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2771 IsNumeric<ST>::value
2772 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2773 , INVALID_TYPE >::Type Type;
2782 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2783 struct SMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,false>,
DMatScalarMultExpr<MT2,ST2,true> >
2787 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
2788 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2789 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2790 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2791 , INVALID_TYPE >::Type Type;
2808 template<
typename MT1,
typename ST,
typename MT2 >
2813 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2814 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2815 IsNumeric<ST>::value
2816 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2817 , INVALID_TYPE >::Type Type;
2826 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2827 struct TSMatDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>,
DMatScalarMultExpr<MT2,ST2,false> >
2831 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2832 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2833 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2834 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2835 , INVALID_TYPE >::Type Type;
2852 template<
typename MT1,
typename ST,
typename MT2 >
2857 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2858 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2859 IsNumeric<ST>::value
2860 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2861 , INVALID_TYPE >::Type Type;
2870 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2871 struct TSMatTDMatMultExprTrait< SMatScalarMultExpr<MT1,ST1,true>,
DMatScalarMultExpr<MT2,ST2,true> >
2875 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2876 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2877 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2878 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2879 , INVALID_TYPE >::Type Type;
2896 template<
typename MT,
typename ST,
bool SO,
bool AF >
2901 typedef typename MultExprTrait< typename SubmatrixExprTrait<const MT,AF>::Type, ST >::Type Type;
2918 template<
typename MT,
typename ST,
bool SO >
2923 typedef typename MultExprTrait< typename RowExprTrait<const MT>::Type, ST >::Type Type;
2940 template<
typename MT,
typename ST,
bool SO >
2945 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:566
MT::ConstIterator IteratorType
ConstIterator type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:223
IntrinsicType load() const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:319
Pointer difference type of the Blaze library.
DifferenceType difference_type
Difference between two iterators.
Definition: DMatScalarMultExpr.h:220
BLAZE_ALWAYS_INLINE EnableIf< And< IsIntegral< T >, HasSize< T, 2UL > >, simd_int16_t >::Type set(T value)
Sets all values in the vector to the given 2-byte integral value.
Definition: Set.h:73
Compile time check whether the given type is a computational expression template.This type trait clas...
Definition: IsComputation.h:89
Compile time check for numeric types.This type trait tests whether or not the given template paramete...
Definition: IsNumeric.h:98
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:440
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:7820
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:962
MultExprTrait< RN, ST >::Type ExprReturnType
Expression return type for the subscript operator.
Definition: DMatScalarMultExpr.h:143
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:252
MT::ResultType RT
Result type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:127
bool isAligned() const
Returns whether the operands of the expression are properly aligned in memory.
Definition: DMatScalarMultExpr.h:610
ReferenceType reference
Reference return type.
Definition: DMatScalarMultExpr.h:219
ConstIterator & operator++()
Pre-increment operator.
Definition: DMatScalarMultExpr.h:267
Header file for the IsSparseMatrix type trait.
const ConstIterator operator--(int)
Post-decrement operator.
Definition: DMatScalarMultExpr.h:299
#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:81
Efficient implementation of a compressed matrix.The CompressedMatrix class template is the represent...
Definition: CompressedMatrix.h:207
bool operator>=(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:385
#define BLAZE_CONSTRAINT_MUST_BE_DENSE_MATRIX_TYPE(T)
Constraint on the data type.In case the given data type T is not a dense, N-dimensional matrix type...
Definition: DenseMatrix.h:79
Header file for the ColumnExprTrait class template.
Header file for the IsSame and IsStrictlySame type traits.
Header file for the IsColumnMajorMatrix type trait.
RightOperand scalar_
Right-hand side scalar of the multiplication expression.
Definition: DMatScalarMultExpr.h:629
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2588
Header file for the IsRowVector type trait.
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:259
IteratorCategory iterator_category
The iterator category.
Definition: DMatScalarMultExpr.h:216
SelectType< useAssign, const ResultType, const DMatScalarMultExpr & >::Type CompositeType
Data type for composite expression templates.
Definition: DMatScalarMultExpr.h:193
Base class for all matrix/scalar multiplication expression templates.The MatScalarMultExpr class serv...
Definition: MatScalarMultExpr.h:66
Header file for the And class template.
Header file for the DenseVector base class.
MT::ReturnType RN
Return type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:128
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:721
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 UnderlyingElement type trait.
Header file for the RequiresEvaluation type trait.
DifferenceType operator-(const ConstIterator &rhs) const
Calculating the number of elements between two iterators.
Definition: DMatScalarMultExpr.h:396
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:117
ReturnType operator*() const
Direct access to the element at the current iterator position.
Definition: DMatScalarMultExpr.h:309
Constraint on the data type.
Header file for the DivExprTrait class template.
ElementType ValueType
Type of the underlying elements.
Definition: DMatScalarMultExpr.h:210
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:261
Evaluation of the underlying builtin element type of a given data type.Via this type trait it is poss...
Definition: UnderlyingBuiltin.h:80
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: DMatScalarMultExpr.h:620
ReturnType at(size_t i, size_t j) const
Checked access to the matrix elements.
Definition: DMatScalarMultExpr.h:491
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:213
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:546
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:352
ReturnType operator()(size_t i, size_t j) const
2D-access to the matrix elements.
Definition: DMatScalarMultExpr.h:476
Header file for the UnderlyingBuiltin type trait.
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2592
Expression object for dense matrix-scalar multiplications.The DMatScalarMultExpr class represents the...
Definition: DMatScalarMultExpr.h:121
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: DMatScalarMultExpr.h:588
ConstIterator & operator+=(size_t inc)
Addition assignment operator.
Definition: DMatScalarMultExpr.h:244
#define BLAZE_THROW_OUT_OF_RANGE(MESSAGE)
Macro for the emission of a std::out_of_range exceptionThis macro encapsulates the default way of Bla...
Definition: Exception.h:331
IteratorType iterator_
Iterator to the current element.
Definition: DMatScalarMultExpr.h:439
Header file for the DenseMatrix base class.
Header file for the Columns type trait.
bool operator<=(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:374
const SelectType< returnExpr, ExprReturnType, ElementType >::Type ReturnType
Return type for expression template evaluations.
Definition: DMatScalarMultExpr.h:190
#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:211
Header file for the IsAligned type trait.
const DenseIterator< Type, AF > operator-(const DenseIterator< Type, AF > &it, ptrdiff_t inc)
Subtraction between a DenseIterator and an integral value.
Definition: DenseIterator.h:642
#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:330
SelectType< IsExpression< MT >::value, const MT, const MT & >::Type LeftOperand
Composite type of the left-hand side dense matrix expression.
Definition: DMatScalarMultExpr.h:196
Constraints on the storage order of matrix types.
LeftOperand matrix_
Left-hand side dense matrix of the multiplication expression.
Definition: DMatScalarMultExpr.h:628
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
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:536
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:432
Header file for the IsPadded type trait.
Header file for the serial shim.
BLAZE_ALWAYS_INLINE IntrinsicType load(size_t i, size_t j) const
Access to the intrinsic elements of the matrix.
Definition: DMatScalarMultExpr.h:509
size_t columns() const
Returns the current number of columns of the matrix.
Definition: DMatScalarMultExpr.h:556
ConstIterator(IteratorType iterator, RightOperand scalar)
Constructor for the ConstIterator class.
Definition: DMatScalarMultExpr.h:232
friend const ConstIterator operator+(size_t inc, const ConstIterator &it)
Addition between an integral value and a ConstIterator.
Definition: DMatScalarMultExpr.h:420
Header file for the IsNumeric type trait.
ResultType::ElementType ElementType
Resulting element type.
Definition: DMatScalarMultExpr.h:186
ElementType & ReferenceType
Reference return type.
Definition: DMatScalarMultExpr.h:212
RightOperand rightOperand() const
Returns the right-hand side scalar operand.
Definition: DMatScalarMultExpr.h:576
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:2587
Header file for the MatScalarMultExpr base class.
Intrinsic characteristics of data types.The IntrinsicTrait class template provides the intrinsic char...
Definition: IntrinsicTrait.h:1232
MT::CompositeType CT
Composite type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:130
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:138
DMatScalarMultExpr(const MT &matrix, ST scalar)
Constructor for the DMatScalarMultExpr class.
Definition: DMatScalarMultExpr.h:463
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:600
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:256
#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:525
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:341
bool operator>(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DMatScalarMultExpr.h:363
const ConstIterator operator++(int)
Post-increment operator.
Definition: DMatScalarMultExpr.h:278
friend const ConstIterator operator+(const ConstIterator &it, size_t inc)
Addition between a ConstIterator and an integral value.
Definition: DMatScalarMultExpr.h:408
Header file for the IsInvertible type trait.
Header file for the IsDenseVector type trait.
Header file for all intrinsic functionality.
ConstIterator & operator--()
Pre-decrement operator.
Definition: DMatScalarMultExpr.h:288
MT::ElementType ET
Element type of the dense matrix expression.
Definition: DMatScalarMultExpr.h:129
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:199
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:185
#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:218
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2583
Header file for the IsTrue value trait.
IntrinsicTrait< ElementType >::Type IntrinsicType
Resulting intrinsic element type.
Definition: DMatScalarMultExpr.h:187
Iterator over the elements of the dense matrix.
Definition: DMatScalarMultExpr.h:205
std::random_access_iterator_tag IteratorCategory
The iterator category.
Definition: DMatScalarMultExpr.h:209
Header file for the IsUpper type trait.
Header file for exception macros.
MultTrait< RT, ST >::Type ResultType
Result type for expression template evaluations.
Definition: DMatScalarMultExpr.h:183
Header file for the IsColumnVector type trait.
ResultType::OppositeType OppositeType
Result type with opposite storage order for expression template evaluations.
Definition: DMatScalarMultExpr.h:184
DMatScalarMultExpr< MT, ST, SO > This
Type of this DMatScalarMultExpr instance.
Definition: DMatScalarMultExpr.h:182
Header file for the IsHermitian type trait.
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.
ValueType value_type
Type of the underlying elements.
Definition: DMatScalarMultExpr.h:217