35 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECSCALARMULTEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_DVECSCALARMULTEXPR_H_
104 template<
typename VT
143 template<
typename VT2 >
146 enum { value = useAssign };
159 template<
typename VT2 >
160 struct UseSMPAssign {
161 enum { value = ( !VT2::smpAssignable || !VT::smpAssignable ) && useAssign };
218 : iterator_( iterator )
432 enum { vectorizable = VT::vectorizable &&
437 enum { smpAssignable = VT::smpAssignable };
536 template<
typename T >
548 template<
typename T >
550 return vector_.isAliased( alias );
594 template<
typename VT2 >
622 template<
typename VT2 >
650 template<
typename VT2 >
651 friend inline typename EnableIf< UseAssign<VT2> >::Type
686 template<
typename VT2 >
687 friend inline typename EnableIf< UseAssign<VT2> >::Type
722 template<
typename VT2 >
723 friend inline typename EnableIf< UseAssign<VT2> >::Type
758 template<
typename VT2 >
759 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
786 template<
typename VT2 >
787 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
795 (~lhs) *= rhs.scalar_;
814 template<
typename VT2 >
815 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
850 template<
typename VT2 >
851 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
886 template<
typename VT2 >
887 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
945 template<
typename VT
947 inline const DVecScalarMultExpr<VT,typename BaseElementType<VT>::Type,TF>
988 template<
typename T1
991 inline const typename EnableIf< IsNumeric<T2>,
typename MultExprTrait<T1,T2>::Type >::Type
997 return Type( ~vec, scalar );
1024 template<
typename T1
1027 inline const typename EnableIf< IsNumeric<T1>,
typename MultExprTrait<T1,T2>::Type >::Type
1033 return Type( ~vec, scalar );
1064 template<
typename VT
1066 inline const DVecScalarMultExpr<VT,typename VT::ElementType,TF>
1073 const ElementType len (
length( ~vec ) );
1101 template<
typename VT
1104 inline const DVecScalarMultExpr<VT,ST,TF>
1105 operator-(
const DVecScalarMultExpr<VT,ST,TF>& dv )
1109 return DVecScalarMultExpr<VT,ST,TF>( dv.leftOperand(), -dv.rightOperand() );
1136 template<
typename VT
1140 inline const typename EnableIf< IsNumeric<ST2>
1141 ,
typename MultExprTrait< DVecScalarMultExpr<VT,ST1,TF>, ST2 >::Type >::Type
1142 operator*(
const DVecScalarMultExpr<VT,ST1,TF>& vec, ST2 scalar )
1146 return vec.leftOperand() * ( vec.rightOperand() * scalar );
1165 template<
typename ST1
1169 inline const typename EnableIf< IsNumeric<ST1>
1170 ,
typename MultExprTrait< ST1, DVecScalarMultExpr<VT,ST2,TF> >::Type >::Type
1171 operator*( ST1 scalar,
const DVecScalarMultExpr<VT,ST2,TF>& vec )
1175 return vec.leftOperand() * ( scalar * vec.rightOperand() );
1194 template<
typename VT
1198 inline const typename EnableIf< IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>
1199 ,
typename DivExprTrait< DVecScalarMultExpr<VT,ST1,TF>, ST2 >::Type >::Type
1200 operator/(
const DVecScalarMultExpr<VT,ST1,TF>& vec, ST2 scalar )
1204 return vec.leftOperand() * ( vec.rightOperand() / scalar );
1224 template<
typename VT1
1228 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST,TF>, VT2 >::Type
1229 operator*(
const DVecScalarMultExpr<VT1,ST,TF>& lhs,
const DenseVector<VT2,TF>& rhs )
1233 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1253 template<
typename VT1
1257 inline const typename MultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,TF> >::Type
1258 operator*(
const DenseVector<VT1,TF>& lhs,
const DVecScalarMultExpr<VT2,ST,TF>& rhs )
1262 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1282 template<
typename VT1
1287 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST1,TF>, DVecScalarMultExpr<VT2,ST2,TF> >::Type
1288 operator*(
const DVecScalarMultExpr<VT1,ST1,TF>& lhs,
const DVecScalarMultExpr<VT2,ST2,TF>& rhs )
1292 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1312 template<
typename VT1
1315 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST,false>, VT2 >::Type
1316 operator*(
const DVecScalarMultExpr<VT1,ST,false>& lhs,
const DenseVector<VT2,true>& rhs )
1320 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1340 template<
typename VT1
1343 inline const typename MultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,true> >::Type
1344 operator*(
const DenseVector<VT1,false>& lhs,
const DVecScalarMultExpr<VT2,ST,true>& rhs )
1348 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1368 template<
typename VT1
1372 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST1,false>, DVecScalarMultExpr<VT2,ST2,true> >::Type
1373 operator*(
const DVecScalarMultExpr<VT1,ST1,false>& lhs,
const DVecScalarMultExpr<VT2,ST2,true>& rhs )
1377 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1397 template<
typename VT1
1401 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST,TF>, VT2 >::Type
1402 operator*(
const DVecScalarMultExpr<VT1,ST,TF>& lhs,
const SparseVector<VT2,TF>& rhs )
1406 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1426 template<
typename VT1
1430 inline const typename MultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,TF> >::Type
1431 operator*(
const SparseVector<VT1,TF>& lhs,
const DVecScalarMultExpr<VT2,ST,TF>& rhs )
1435 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1456 template<
typename VT1
1461 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST1,TF>, SVecScalarMultExpr<VT2,ST2,TF> >::Type
1462 operator*(
const DVecScalarMultExpr<VT1,ST1,TF>& lhs,
const SVecScalarMultExpr<VT2,ST2,TF>& rhs )
1466 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1487 template<
typename VT1
1492 inline const typename MultExprTrait< SVecScalarMultExpr<VT1,ST1,TF>, DVecScalarMultExpr<VT2,ST2,TF> >::Type
1493 operator*(
const SVecScalarMultExpr<VT1,ST1,TF>& lhs,
const DVecScalarMultExpr<VT2,ST2,TF>& rhs )
1497 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1517 template<
typename VT1
1520 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST,false>, VT2 >::Type
1521 operator*(
const DVecScalarMultExpr<VT1,ST,false>& lhs,
const SparseVector<VT2,true>& rhs )
1525 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1545 template<
typename VT1
1548 inline const typename MultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,true> >::Type
1549 operator*(
const SparseVector<VT1,false>& lhs,
const DVecScalarMultExpr<VT2,ST,true>& rhs )
1553 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1574 template<
typename VT1
1578 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST1,false>, SVecScalarMultExpr<VT2,ST2,true> >::Type
1579 operator*(
const DVecScalarMultExpr<VT1,ST1,false>& lhs,
const SVecScalarMultExpr<VT2,ST2,true>& rhs )
1583 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1604 template<
typename VT1
1608 inline const typename MultExprTrait< SVecScalarMultExpr<VT1,ST1,false>, DVecScalarMultExpr<VT2,ST2,true> >::Type
1609 operator*(
const SVecScalarMultExpr<VT1,ST1,false>& lhs,
const DVecScalarMultExpr<VT2,ST2,true>& rhs )
1613 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1633 template<
typename MT
1637 inline const typename MultExprTrait< MT, DVecScalarMultExpr<VT,ST,false> >::Type
1638 operator*(
const DenseMatrix<MT,SO>& mat,
const DVecScalarMultExpr<VT,ST,false>& vec )
1642 return ( (~mat) * vec.leftOperand() ) * vec.rightOperand();
1662 template<
typename VT
1666 inline const typename MultExprTrait< DVecScalarMultExpr<VT,ST,true>, MT >::Type
1667 operator*(
const DVecScalarMultExpr<VT,ST,true>& vec,
const DenseMatrix<MT,SO>& mat )
1671 return ( vec.leftOperand() * (~mat) ) * vec.rightOperand();
1691 template<
typename MT
1695 inline const typename MultExprTrait< MT, DVecScalarMultExpr<VT,ST,false> >::Type
1696 operator*(
const SparseMatrix<MT,SO>& mat,
const DVecScalarMultExpr<VT,ST,false>& vec )
1700 return ( (~mat) * vec.leftOperand() ) * vec.rightOperand();
1720 template<
typename VT
1724 inline const typename MultExprTrait< DVecScalarMultExpr<VT,ST,true>, MT >::Type
1725 operator*(
const DVecScalarMultExpr<VT,ST,true>& vec,
const SparseMatrix<MT,SO>& mat )
1729 return ( vec.leftOperand() * (~mat) ) * vec.rightOperand();
1745 template<
typename VT,
typename ST1,
typename ST2 >
1750 typedef typename SelectType< IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1751 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1752 ,
typename DVecScalarMultExprTrait<VT,typename MultTrait<ST1,ST2>::Type>::Type
1753 , INVALID_TYPE >::Type Type;
1770 template<
typename VT,
typename ST1,
typename ST2 >
1775 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1776 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1777 ,
typename TDVecScalarMultExprTrait<VT,typename MultTrait<ST1,ST2>::Type>::Type
1778 , INVALID_TYPE >::Type Type;
1795 template<
typename VT,
typename ST1,
typename ST2 >
1800 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1804 typedef typename DVecScalarMultExprTrait<VT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1805 typedef typename DVecScalarDivExprTrait<VT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1810 typedef typename SelectType< IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
1811 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1812 ,
typename SelectType<condition,T1,T2>::Type
1813 , INVALID_TYPE >::Type Type;
1830 template<
typename VT,
typename ST1,
typename ST2 >
1835 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1839 typedef typename TDVecScalarMultExprTrait<VT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1840 typedef typename TDVecScalarDivExprTrait<VT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1845 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
1846 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1847 ,
typename SelectType<condition,T1,T2>::Type
1848 , INVALID_TYPE >::Type Type;
1865 template<
typename VT1,
typename ST,
typename VT2 >
1870 typedef typename SelectType< IsDenseVector<VT1>::value && IsColumnVector<VT1>::value &&
1871 IsDenseVector<VT2>::value && IsColumnVector<VT2>::value &&
1872 IsNumeric<ST>::value
1873 ,
typename DVecScalarMultExprTrait<typename DVecDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1874 , INVALID_TYPE >::Type Type;
1883 template<
typename VT1,
typename VT2,
typename ST >
1888 typedef typename SelectType< IsDenseVector<VT1>::value && IsColumnVector<VT1>::value &&
1889 IsDenseVector<VT2>::value && IsColumnVector<VT2>::value &&
1890 IsNumeric<ST>::value
1891 ,
typename DVecScalarMultExprTrait<typename DVecDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1892 , INVALID_TYPE >::Type Type;
1901 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
1906 typedef typename SelectType< IsDenseVector<VT1>::value && IsColumnVector<VT1>::value &&
1907 IsDenseVector<VT2>::value && IsColumnVector<VT2>::value &&
1908 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1909 ,
typename DVecScalarMultExprTrait<typename DVecDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1910 , INVALID_TYPE >::Type Type;
1927 template<
typename VT1,
typename ST,
typename VT2 >
1932 typedef typename SelectType< IsDenseVector<VT1>::value && IsColumnVector<VT1>::value &&
1933 IsDenseVector<VT2>::value && IsRowVector<VT2>::value &&
1934 IsNumeric<ST>::value
1935 ,
typename DMatScalarMultExprTrait<typename DVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1936 , INVALID_TYPE >::Type Type;
1945 template<
typename VT1,
typename VT2,
typename ST >
1950 typedef typename SelectType< IsDenseVector<VT1>::value && IsColumnVector<VT1>::value &&
1951 IsDenseVector<VT2>::value && IsRowVector<VT2>::value &&
1952 IsNumeric<ST>::value
1953 ,
typename DMatScalarMultExprTrait<typename DVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1954 , INVALID_TYPE >::Type Type;
1963 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
1968 typedef typename SelectType< IsDenseVector<VT1>::value && IsColumnVector<VT1>::value &&
1969 IsDenseVector<VT2>::value && IsRowVector<VT2>::value &&
1970 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1971 ,
typename DMatScalarMultExprTrait<typename DVecTDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1972 , INVALID_TYPE >::Type Type;
1989 template<
typename VT1,
typename ST,
typename VT2 >
1994 typedef typename SelectType< IsDenseVector<VT1>::value && IsRowVector<VT1>::value &&
1995 IsDenseVector<VT2>::value && IsRowVector<VT2>::value &&
1996 IsNumeric<ST>::value
1997 ,
typename TDVecScalarMultExprTrait<typename TDVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1998 , INVALID_TYPE >::Type Type;
2007 template<
typename VT1,
typename VT2,
typename ST >
2012 typedef typename SelectType< IsDenseVector<VT1>::value && IsRowVector<VT1>::value &&
2013 IsDenseVector<VT2>::value && IsRowVector<VT2>::value &&
2014 IsNumeric<ST>::value
2015 ,
typename TDVecScalarMultExprTrait<typename TDVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
2016 , INVALID_TYPE >::Type Type;
2025 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
2030 typedef typename SelectType< IsDenseVector<VT1>::value && IsRowVector<VT1>::value &&
2031 IsDenseVector<VT2>::value && IsRowVector<VT2>::value &&
2032 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2033 ,
typename TDVecScalarMultExprTrait<typename TDVecTDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2034 , INVALID_TYPE >::Type Type;
2051 template<
typename VT1,
typename VT2,
typename ST >
2056 typedef typename SelectType< IsDenseVector<VT1>::value && IsColumnVector<VT1>::value &&
2057 IsSparseVector<VT2>::value && IsColumnVector<VT2>::value &&
2058 IsNumeric<ST>::value
2059 ,
typename SVecScalarMultExprTrait<typename DVecSVecMultExprTrait<VT1,VT2>::Type,ST>::Type
2060 , INVALID_TYPE >::Type Type;
2069 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
2070 struct DVecSVecMultExprTrait<
DVecScalarMultExpr<VT1,ST1,false>, SVecScalarMultExpr<VT2,ST2,false> >
2074 typedef typename SelectType< IsDenseVector<VT1>::value && IsColumnVector<VT1>::value &&
2075 IsSparseVector<VT2>::value && IsColumnVector<VT2>::value &&
2076 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2077 ,
typename SVecScalarMultExprTrait<typename DVecSVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2078 , INVALID_TYPE >::Type Type;
2095 template<
typename VT1,
typename ST,
typename VT2 >
2100 typedef typename SelectType< IsDenseVector<VT1>::value && IsColumnVector<VT1>::value &&
2101 IsSparseVector<VT2>::value && IsRowVector<VT2>::value &&
2102 IsNumeric<ST>::value
2103 ,
typename SMatScalarMultExprTrait<typename DVecTSVecMultExprTrait<VT1,VT2>::Type,ST>::Type
2104 , INVALID_TYPE >::Type Type;
2113 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
2114 struct DVecTSVecMultExprTrait<
DVecScalarMultExpr<VT1,ST1,false>, SVecScalarMultExpr<VT2,ST2,true> >
2118 typedef typename SelectType< IsDenseVector<VT1>::value && IsColumnVector<VT1>::value &&
2119 IsSparseVector<VT2>::value && IsRowVector<VT2>::value &&
2120 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2121 ,
typename SMatScalarMultExprTrait<typename DVecTSVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2122 , INVALID_TYPE >::Type Type;
2139 template<
typename VT1,
typename ST,
typename VT2 >
2144 typedef typename SelectType< IsDenseVector<VT1>::value && IsRowVector<VT1>::value &&
2145 IsSparseVector<VT2>::value && IsRowVector<VT2>::value &&
2146 IsNumeric<ST>::value
2147 ,
typename TSVecScalarMultExprTrait<typename TDVecTSVecMultExprTrait<VT1,VT2>::Type,ST>::Type
2148 , INVALID_TYPE >::Type Type;
2157 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
2158 struct TDVecTSVecMultExprTrait<
DVecScalarMultExpr<VT1,ST1,true>, SVecScalarMultExpr<VT2,ST2,true> >
2162 typedef typename SelectType< IsDenseVector<VT1>::value && IsRowVector<VT1>::value &&
2163 IsSparseVector<VT2>::value && IsRowVector<VT2>::value &&
2164 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2165 ,
typename TSVecScalarMultExprTrait<typename TDVecTSVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2166 , INVALID_TYPE >::Type Type;
2183 template<
typename VT1,
typename VT2,
typename ST >
2188 typedef typename SelectType< IsSparseVector<VT1>::value && IsColumnVector<VT1>::value &&
2189 IsDenseVector<VT2>::value && IsColumnVector<VT2>::value &&
2190 IsNumeric<ST>::value
2191 ,
typename SVecScalarMultExprTrait<typename SVecDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
2192 , INVALID_TYPE >::Type Type;
2201 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
2202 struct SVecDVecMultExprTrait< SVecScalarMultExpr<VT1,ST1,false>,
DVecScalarMultExpr<VT2,ST2,false> >
2206 typedef typename SelectType< IsSparseVector<VT1>::value && IsColumnVector<VT1>::value &&
2207 IsDenseVector<VT2>::value && IsColumnVector<VT2>::value &&
2208 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2209 ,
typename SVecScalarMultExprTrait<typename SVecDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2210 , INVALID_TYPE >::Type Type;
2227 template<
typename VT1,
typename VT2,
typename ST >
2232 typedef typename SelectType< IsSparseVector<VT1>::value && IsColumnVector<VT1>::value &&
2233 IsDenseVector<VT2>::value && IsRowVector<VT2>::value &&
2234 IsNumeric<ST>::value
2235 ,
typename TSMatScalarMultExprTrait<typename SVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
2236 , INVALID_TYPE >::Type Type;
2245 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
2246 struct SVecTDVecMultExprTrait< SVecScalarMultExpr<VT1,ST1,false>,
DVecScalarMultExpr<VT2,ST2,true> >
2250 typedef typename SelectType< IsSparseVector<VT1>::value && IsColumnVector<VT1>::value &&
2251 IsDenseVector<VT2>::value && IsRowVector<VT2>::value &&
2252 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2253 ,
typename TSMatScalarMultExprTrait<typename SVecTDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2254 , INVALID_TYPE >::Type Type;
2271 template<
typename VT1,
typename VT2,
typename ST >
2276 typedef typename SelectType< IsSparseVector<VT1>::value && IsRowVector<VT1>::value &&
2277 IsDenseVector<VT2>::value && IsRowVector<VT2>::value &&
2278 IsNumeric<ST>::value
2279 ,
typename TSVecScalarMultExprTrait<typename TSVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
2280 , INVALID_TYPE >::Type Type;
2289 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
2290 struct TSVecTDVecMultExprTrait< SVecScalarMultExpr<VT1,ST1,true>,
DVecScalarMultExpr<VT2,ST2,true> >
2294 typedef typename SelectType< IsSparseVector<VT1>::value && IsRowVector<VT1>::value &&
2295 IsDenseVector<VT2>::value && IsRowVector<VT2>::value &&
2296 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2297 ,
typename TSVecScalarMultExprTrait<typename TSVecTDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2298 , INVALID_TYPE >::Type Type;
2315 template<
typename MT,
typename VT,
typename ST >
2320 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2321 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
2322 IsNumeric<ST>::value
2323 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
2324 , INVALID_TYPE >::Type Type;
2341 template<
typename MT,
typename VT,
typename ST >
2346 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2347 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
2348 IsNumeric<ST>::value
2349 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
2350 , INVALID_TYPE >::Type Type;
2367 template<
typename VT,
typename MT,
typename ST >
2372 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
2373 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2374 IsNumeric<ST>::value
2375 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
2376 , INVALID_TYPE >::Type Type;
2393 template<
typename VT,
typename MT,
typename ST >
2398 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
2399 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2400 IsNumeric<ST>::value
2401 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
2402 , INVALID_TYPE >::Type Type;
2419 template<
typename MT,
typename VT,
typename ST >
2424 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2425 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
2426 IsNumeric<ST>::value
2427 ,
typename DVecScalarMultExprTrait<typename SMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
2428 , INVALID_TYPE >::Type Type;
2445 template<
typename MT,
typename VT,
typename ST >
2450 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2451 IsDenseVector<VT>::value && IsColumnVector<VT>::value &&
2452 IsNumeric<ST>::value
2453 ,
typename DVecScalarMultExprTrait<typename TSMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
2454 , INVALID_TYPE >::Type Type;
2471 template<
typename VT,
typename MT,
typename ST >
2476 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
2477 IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
2478 IsNumeric<ST>::value
2479 ,
typename TDVecScalarMultExprTrait<typename TDVecSMatMultExprTrait<VT,MT>::Type,ST>::Type
2480 , INVALID_TYPE >::Type Type;
2497 template<
typename VT,
typename MT,
typename ST >
2502 typedef typename SelectType< IsDenseVector<VT>::value && IsRowVector<VT>::value &&
2503 IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
2504 IsNumeric<ST>::value
2505 ,
typename TDVecScalarMultExprTrait<typename TDVecTSMatMultExprTrait<VT,MT>::Type,ST>::Type
2506 , INVALID_TYPE >::Type Type;
2523 template<
typename VT,
typename ST,
bool TF,
bool AF >
2528 typedef typename MultExprTrait< typename SubvectorExprTrait<const VT,AF>::Type, ST >::Type Type;
Pointer difference type of the Blaze library.
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
const DMatDMatMultExpr< T1, T2 > operator*(const DenseMatrix< T1, false > &lhs, const DenseMatrix< T2, false > &rhs)
Multiplication operator for the multiplication of two row-major dense matrices ( ).
Definition: DMatDMatMultExpr.h:4329
const EnableIf< IsNumeric< T2 >, typename DivExprTrait< T1, T2 >::Type >::Type operator/(const DenseMatrix< T1, SO > &mat, T2 scalar)
Division operator for the division of a dense matrix by a scalar value ( ).
Definition: DMatScalarDivExpr.h:930
Header file for the SparseVector base class.
IntrinsicTrait< ElementType >::Type IntrinsicType
Resulting intrinsic element type.
Definition: DVecScalarMultExpr.h:172
ReturnType operator*() const
Direct access to the element at the current iterator position.
Definition: DVecScalarMultExpr.h:294
void smpSubAssign(DenseMatrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:152
Header file for the IsSparseMatrix type trait.
ConstIterator end() const
Returns an iterator just past the last non-zero element of the dense vector.
Definition: DVecScalarMultExpr.h:495
Efficient implementation of a compressed matrix.The CompressedMatrix class template is the represent...
Definition: CompressedMatrix.h:199
const ConstIterator operator++(int)
Post-increment operator.
Definition: DVecScalarMultExpr.h:263
void smpMultAssign(DenseVector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs)
Default implementation of the SMP multiplication assignment of a vector to a dense vector...
Definition: DenseVector.h:179
Header file for the IsSame and IsStrictlySame type traits.
Header file for the IsColumnMajorMatrix type trait.
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2408
Header file for the IsRowVector type trait.
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:251
Header file for the DenseVector base class.
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: DVecScalarMultExpr.h:458
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:690
Header file for the Computation base class.
Type relationship analysis.This class tests if the two data types A and B are equal. For this type comparison, the cv-qualifiers of both data types are ignored. If A and B are the same data type (ignoring the cv-qualifiers), then the value member enumeration is set to 1, the nested type definition Type is TrueType, and the class derives from TrueType. Otherwise value is set to 0, Type is FalseType, and the class derives from FalseType.
Definition: IsSame.h:158
Header file for the RequiresEvaluation type trait.
MultExprTrait< RN, ST >::Type ExprReturnType
Expression return type for the subscript operator.
Definition: DVecScalarMultExpr.h:129
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: DVecScalarMultExpr.h:326
ConstIterator(IteratorType iterator, RightOperand scalar)
Constructor for the ConstIterator class.
Definition: DVecScalarMultExpr.h:217
Header file for the VecScalarMultExpr base class.
LeftOperand leftOperand() const
Returns the left-hand side dense vector operand.
Definition: DVecScalarMultExpr.h:515
ResultType::ElementType ElementType
Resulting element type.
Definition: DVecScalarMultExpr.h:171
Constraint on the data type.
ValueType value_type
Type of the underlying elements.
Definition: DVecScalarMultExpr.h:202
bool operator<=(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DVecScalarMultExpr.h:359
Header file for the SparseMatrix base class.
Header file for the DivExprTrait class template.
bool isAligned() const
Returns whether the operands of the expression are properly aligned in memory.
Definition: DVecScalarMultExpr.h:559
PointerType pointer
Pointer return type.
Definition: DVecScalarMultExpr.h:203
VT::ConstIterator IteratorType
ConstIterator type of the dense vector expression.
Definition: DVecScalarMultExpr.h:208
IntrinsicType load(size_t index) const
Access to the intrinsic elements of the vector.
Definition: DVecScalarMultExpr.h:470
SelectType< IsExpression< VT >::value, const VT, const VT & >::Type LeftOperand
Composite type of the left-hand side dense vector expression.
Definition: DVecScalarMultExpr.h:181
Header file for the MultExprTrait class template.
void smpAddAssign(DenseMatrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP addition assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:122
Compile time check to query the requirement to evaluate an expression.Via this type trait it is possi...
Definition: RequiresEvaluation.h:90
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:253
DVecScalarMultExpr(const VT &vector, ST scalar)
Constructor for the DVecScalarMultExpr class.
Definition: DVecScalarMultExpr.h:446
ptrdiff_t DifferenceType
Difference between two iterators.
Definition: DVecScalarMultExpr.h:198
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.
Header file for the multiplication trait.
Header file for the IsFloatingPoint type trait.
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2412
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: DVecScalarMultExpr.h:537
Iterator over the elements of the dense vector.
Definition: DVecScalarMultExpr.h:190
Header file for the DenseMatrix base class.
const SelectType< returnExpr, ExprReturnType, ElementType >::Type ReturnType
Return type for expression template evaluations.
Definition: DVecScalarMultExpr.h:175
bool operator>(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DVecScalarMultExpr.h:348
ResultType::TransposeType TransposeType
Transpose type for expression template evaluations.
Definition: DVecScalarMultExpr.h:170
void assign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the assignment of a matrix to a matrix.
Definition: Matrix.h:271
bool operator>=(const ConstIterator &rhs) const
Greater-than comparison between two ConstIterator objects.
Definition: DVecScalarMultExpr.h:370
ST RightOperand
Composite type of the right-hand side scalar value.
Definition: DVecScalarMultExpr.h:184
VT::ResultType RT
Result type of the dense vector expression.
Definition: DVecScalarMultExpr.h:113
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
#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
Constraint on the data type.
#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
std::random_access_iterator_tag IteratorCategory
The iterator category.
Definition: DVecScalarMultExpr.h:194
Constraint on the data type.
DVecScalarMultExpr< VT, ST, TF > This
Type of this DVecScalarMultExpr instance.
Definition: DVecScalarMultExpr.h:168
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2406
void multAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the multiplication assignment of a matrix to a matrix.
Definition: Matrix.h:361
bool operator<(const ConstIterator &rhs) const
Less-than comparison between two ConstIterator objects.
Definition: DVecScalarMultExpr.h:337
Header file for the SelectType class template.
LeftOperand vector_
Left-hand side dense vector of the multiplication expression.
Definition: DVecScalarMultExpr.h:576
Header file for all forward declarations for expression class templates.
CMathTrait< typename VT::ElementType >::Type length(const DenseVector< VT, TF > &dv)
Calculation of the dense vector length .
Definition: DenseVector.h:483
Header file for the IsDenseMatrix type trait.
size_t size() const
Returns the current size/dimension of the vector.
Definition: DVecScalarMultExpr.h:505
Header file for the EnableIf class template.
ReferenceType reference
Reference return type.
Definition: DVecScalarMultExpr.h:204
ConstIterator & operator++()
Pre-increment operator.
Definition: DVecScalarMultExpr.h:252
Header file for the serial shim.
Header file for the BaseElementType type trait.
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: DVecScalarMultExpr.h:569
friend const ConstIterator operator+(const ConstIterator &it, size_t inc)
Addition between a ConstIterator and an integral value.
Definition: DVecScalarMultExpr.h:393
void smpAssign(DenseMatrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:92
Header file for the IsNumeric type trait.
RightOperand scalar_
Right-hand side scalar of the multiplication expression.
Definition: DVecScalarMultExpr.h:577
ElementType ValueType
Type of the underlying elements.
Definition: DVecScalarMultExpr.h:195
bool operator==(const ConstIterator &rhs) const
Equality comparison between two ConstIterator objects.
Definition: DVecScalarMultExpr.h:315
Base class for all vector/scalar multiplication expression templates.The VecScalarMultExpr class serv...
Definition: VecScalarMultExpr.h:66
Header file for the IsSparseVector type trait.
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2407
Intrinsic characteristics of data types.The IntrinsicTrait class template provides the intrinsic char...
Definition: IntrinsicTrait.h:748
Header file for run time assertion macros.
Utility type for generic codes.
Base template for the MultTrait class.
Definition: MultTrait.h:141
Header file for the division trait.
IteratorType iterator_
Iterator to the current element.
Definition: DVecScalarMultExpr.h:424
void addAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the addition assignment of a matrix to a matrix.
Definition: Matrix.h:301
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: DVecScalarMultExpr.h:549
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
Constraint on the data type.
#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
RightOperand rightOperand() const
Returns the right-hand side scalar operand.
Definition: DVecScalarMultExpr.h:525
void subAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the subtraction assignment of a matrix to matrix.
Definition: Matrix.h:331
VT::ElementType ET
Element type of the dense vector expression.
Definition: DVecScalarMultExpr.h:115
friend const ConstIterator operator+(size_t inc, const ConstIterator &it)
Addition between an integral value and a ConstIterator.
Definition: DVecScalarMultExpr.h:405
ElementType * PointerType
Pointer return type.
Definition: DVecScalarMultExpr.h:196
const size_t SMP_DVECSCALARMULT_THRESHOLD
SMP dense vector/scalar multiplication/division threshold.This threshold specifies when a dense vecto...
Definition: Thresholds.h:299
Evaluation of the base element type of a given data type.Via this type trait it is possible to evalua...
Definition: BaseElementType.h:75
VT::ReturnType RN
Return type of the dense vector expression.
Definition: DVecScalarMultExpr.h:114
Header file for the IsDenseVector type trait.
friend const ConstIterator operator-(const ConstIterator &it, size_t dec)
Subtraction between a ConstIterator and an integral value.
Definition: DVecScalarMultExpr.h:417
Header file for all intrinsic functionality.
#define BLAZE_CONSTRAINT_MUST_BE_DENSE_VECTOR_TYPE(T)
Constraint on the data type.In case the given data type T is not a dense, N-dimensional vector type...
Definition: DenseVector.h:79
ElementType & ReferenceType
Reference return type.
Definition: DVecScalarMultExpr.h:197
ConstIterator begin() const
Returns an iterator to the first non-zero element of the dense vector.
Definition: DVecScalarMultExpr.h:485
IntrinsicType load() const
Access to the intrinsic elements of the vector.
Definition: DVecScalarMultExpr.h:304
Header file for the IsRowMajorMatrix type trait.
Header file for the IsComputation type trait class.
const ConstIterator operator--(int)
Post-decrement operator.
Definition: DVecScalarMultExpr.h:284
Expression object for dense vector-scalar multiplications.The DVecScalarMultExpr class represents the...
Definition: DVecScalarMultExpr.h:107
ConstIterator & operator+=(size_t inc)
Addition assignment operator.
Definition: DVecScalarMultExpr.h:229
Base class for all compute expression templates.The Computation class serves as a tag for all computa...
Definition: Computation.h:59
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:108
#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
ConstIterator & operator-=(size_t dec)
Subtraction assignment operator.
Definition: DVecScalarMultExpr.h:241
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2403
Header file for basic type definitions.
Header file for the SubvectorExprTrait class template.
SelectType< useAssign, const ResultType, const DVecScalarMultExpr & >::Type CompositeType
Data type for composite expression templates.
Definition: DVecScalarMultExpr.h:178
const DVecScalarMultExpr< VT, typename VT::ElementType, TF > normalize(const DenseVector< VT, TF > &vec)
Normalization of the dense vector ( ).
Definition: DVecScalarMultExpr.h:1067
MultTrait< RT, ST >::Type ResultType
Result type for expression template evaluations.
Definition: DVecScalarMultExpr.h:169
Header file for the IsColumnVector type trait.
IteratorCategory iterator_category
The iterator category.
Definition: DVecScalarMultExpr.h:201
VT::CompositeType CT
Composite type of the dense vector expression.
Definition: DVecScalarMultExpr.h:116
Evaluation of the resulting expression type of a multiplication.Via this type trait it is possible to...
Definition: MultExprTrait.h:137
RightOperand scalar_
Scalar of the multiplication expression.
Definition: DVecScalarMultExpr.h:425
#define BLAZE_CONSTRAINT_MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG(T, TF)
Constraint on the data type.In case the given data type T is not a dense or sparse vector type and in...
Definition: TransposeFlag.h:238
Header file for the thresholds for matrix/vector and matrix/matrix multiplications.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101
EnableIf< IsIntegral< T >, Set< T, sizeof(T)> >::Type::Type set(T value)
Sets all values in the vector to the given integral value.
Definition: Set.h:209
#define BLAZE_CONSTRAINT_MUST_BE_FLOATING_POINT_TYPE(T)
Constraint on the data type.In case the given data type T is not a floating point data type...
Definition: FloatingPoint.h:79
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.
DifferenceType difference_type
Difference between two iterators.
Definition: DVecScalarMultExpr.h:205
DifferenceType operator-(const ConstIterator &rhs) const
Calculating the number of elements between two iterators.
Definition: DVecScalarMultExpr.h:381
ConstIterator & operator--()
Pre-decrement operator.
Definition: DVecScalarMultExpr.h:273