22 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECSCALARMULTEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_DVECSCALARMULTEXPR_H_
93 typedef typename VT::ResultType
RT;
94 typedef typename VT::ReturnType
RN;
95 typedef typename VT::ElementType
ET;
96 typedef typename VT::CompositeType
CT;
124 template<
typename VT2 >
126 enum { value = useAssign };
154 enum { vectorizable = VT::vectorizable &&
238 template<
typename T >
264 template<
typename VT2 >
273 for(
size_t i=0UL; i<
size; ++i )
293 template<
typename VT2 >
301 typename VT2::Iterator begin( (~lhs).begin() );
302 const typename VT2::Iterator end( (~lhs).end() );
304 for( ; begin!=end; ++begin )
324 template<
typename VT2 >
325 friend inline typename EnableIf< UseAssign<VT2> >::Type
358 template<
typename VT2 >
359 friend inline typename EnableIf< UseAssign<VT2> >::Type
392 template<
typename VT2 >
393 friend inline typename EnableIf< UseAssign<VT2> >::Type
449 template<
typename VT
451 inline const DVecScalarMultExpr<VT,typename BaseElementType<VT>::Type,TF>
490 template<
typename T1
493 inline const typename EnableIf< IsNumeric<T2>,
typename MultExprTrait<T1,T2>::Type >::Type
497 return Type( ~vec, scalar );
524 template<
typename T1
527 inline const typename EnableIf< IsNumeric<T1>,
typename MultExprTrait<T1,T2>::Type >::Type
531 return Type( ~vec, scalar );
556 template<
typename VT
559 inline const DVecScalarMultExpr<VT,ST,TF>
560 operator-(
const DVecScalarMultExpr<VT,ST,TF>& dv )
562 return DVecScalarMultExpr<VT,ST,TF>( dv.leftOperand(), -dv.rightOperand() );
589 template<
typename VT
593 inline const typename EnableIf< IsNumeric<ST2>
594 ,
typename MultExprTrait< DVecScalarMultExpr<VT,ST1,TF>, ST2 >::Type >::Type
595 operator*(
const DVecScalarMultExpr<VT,ST1,TF>& vec, ST2 scalar )
597 return vec.leftOperand() * ( vec.rightOperand() * scalar );
616 template<
typename ST1
620 inline const typename EnableIf< IsNumeric<ST1>
621 ,
typename MultExprTrait< ST1, DVecScalarMultExpr<VT,ST2,TF> >::Type >::Type
622 operator*( ST1 scalar,
const DVecScalarMultExpr<VT,ST2,TF>& vec )
624 return vec.leftOperand() * ( scalar * vec.rightOperand() );
643 template<
typename VT
647 inline const typename EnableIf< IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>
648 ,
typename DivExprTrait< DVecScalarMultExpr<VT,ST1,TF>, ST2 >::Type >::Type
649 operator/(
const DVecScalarMultExpr<VT,ST1,TF>& vec, ST2 scalar )
651 return vec.leftOperand() * ( vec.rightOperand() / scalar );
671 template<
typename VT1
675 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST,TF>, VT2 >::Type
676 operator*(
const DVecScalarMultExpr<VT1,ST,TF>& lhs,
const DenseVector<VT2,TF>& rhs )
678 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
698 template<
typename VT1
702 inline const typename MultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,TF> >::Type
703 operator*(
const DenseVector<VT1,TF>& lhs,
const DVecScalarMultExpr<VT2,ST,TF>& rhs )
705 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
725 template<
typename VT1
730 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST1,TF>, DVecScalarMultExpr<VT2,ST2,TF> >::Type
731 operator*(
const DVecScalarMultExpr<VT1,ST1,TF>& lhs,
const DVecScalarMultExpr<VT2,ST2,TF>& rhs )
733 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
753 template<
typename VT1
756 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST,false>, VT2 >::Type
757 operator*(
const DVecScalarMultExpr<VT1,ST,false>& lhs,
const DenseVector<VT2,true>& rhs )
759 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
779 template<
typename VT1
782 inline const typename MultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,true> >::Type
783 operator*(
const DenseVector<VT1,false>& lhs,
const DVecScalarMultExpr<VT2,ST,true>& rhs )
785 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
805 template<
typename VT1
809 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST1,false>, DVecScalarMultExpr<VT2,ST2,true> >::Type
810 operator*(
const DVecScalarMultExpr<VT1,ST1,false>& lhs,
const DVecScalarMultExpr<VT2,ST2,true>& rhs )
812 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
832 template<
typename VT1
836 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST,TF>, VT2 >::Type
839 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
859 template<
typename VT1
863 inline const typename MultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,TF> >::Type
866 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
887 template<
typename VT1
895 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
916 template<
typename VT1
921 inline const typename MultExprTrait< SVecScalarMultExpr<VT1,ST1,TF>, DVecScalarMultExpr<VT2,ST2,TF> >::Type
924 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
944 template<
typename VT1
947 inline const typename MultExprTrait< DVecScalarMultExpr<VT1,ST,false>, VT2 >::Type
950 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
970 template<
typename VT1
973 inline const typename MultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,true> >::Type
976 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
997 template<
typename VT1
1004 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1025 template<
typename VT1
1029 inline const typename MultExprTrait< SVecScalarMultExpr<VT1,ST1,false>, DVecScalarMultExpr<VT2,ST2,true> >::Type
1032 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1052 template<
typename MT
1056 inline const typename MultExprTrait< MT, DVecScalarMultExpr<VT,ST,false> >::Type
1057 operator*(
const DenseMatrix<MT,SO>& mat,
const DVecScalarMultExpr<VT,ST,false>& vec )
1059 return ( (~mat) * vec.leftOperand() ) * vec.rightOperand();
1079 template<
typename VT
1083 inline const typename MultExprTrait< DVecScalarMultExpr<VT,ST,true>, MT >::Type
1084 operator*(
const DVecScalarMultExpr<VT,ST,true>& vec,
const DenseMatrix<MT,SO>& mat )
1086 return ( vec.leftOperand() * (~mat) ) * vec.rightOperand();
1106 template<
typename MT
1110 inline const typename MultExprTrait< MT, DVecScalarMultExpr<VT,ST,false> >::Type
1113 return ( (~mat) * vec.leftOperand() ) * vec.rightOperand();
1133 template<
typename VT
1137 inline const typename MultExprTrait< DVecScalarMultExpr<VT,ST,true>, MT >::Type
1140 return ( vec.leftOperand() * (~mat) ) * vec.rightOperand();
1156 template<
typename VT,
typename ST1,
typename ST2 >
1157 struct DVecScalarMultExprTrait< DVecScalarMultExpr<VT,ST1,false>, ST2 >
1161 typedef typename SelectType< IsDenseVector<VT>::value && !IsTransposeVector<VT>::value &&
1162 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1163 ,
typename DVecScalarMultExprTrait<VT,typename MultTrait<ST1,ST2>::Type>::Type
1164 , INVALID_TYPE >::Type Type;
1181 template<
typename VT,
typename ST1,
typename ST2 >
1182 struct TDVecScalarMultExprTrait< DVecScalarMultExpr<VT,ST1,true>, ST2 >
1186 typedef typename SelectType< IsDenseVector<VT>::value && IsTransposeVector<VT>::value &&
1187 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1188 ,
typename TDVecScalarMultExprTrait<VT,typename MultTrait<ST1,ST2>::Type>::Type
1189 , INVALID_TYPE >::Type Type;
1206 template<
typename VT,
typename ST1,
typename ST2 >
1207 struct DVecScalarDivExprTrait< DVecScalarMultExpr<VT,ST1,false>, ST2 >
1211 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1215 typedef typename DVecScalarMultExprTrait<VT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1216 typedef typename DVecScalarDivExprTrait<VT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1221 typedef typename SelectType< IsDenseVector<VT>::value && !IsTransposeVector<VT>::value &&
1222 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1223 ,
typename SelectType<condition,T1,T2>::Type
1224 , INVALID_TYPE >::Type Type;
1241 template<
typename VT,
typename ST1,
typename ST2 >
1242 struct TDVecScalarDivExprTrait< DVecScalarMultExpr<VT,ST1,true>, ST2 >
1246 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1250 typedef typename TDVecScalarMultExprTrait<VT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1251 typedef typename TDVecScalarDivExprTrait<VT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1256 typedef typename SelectType< IsDenseVector<VT>::value && IsTransposeVector<VT>::value &&
1257 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1258 ,
typename SelectType<condition,T1,T2>::Type
1259 , INVALID_TYPE >::Type Type;
1276 template<
typename VT1,
typename ST,
typename VT2 >
1277 struct DVecDVecMultExprTrait< DVecScalarMultExpr<VT1,ST,false>, VT2 >
1281 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1282 IsDenseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
1283 IsNumeric<ST>::value
1284 ,
typename DVecScalarMultExprTrait<typename DVecDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1285 , INVALID_TYPE >::Type Type;
1294 template<
typename VT1,
typename VT2,
typename ST >
1295 struct DVecDVecMultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,false> >
1299 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1300 IsDenseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
1301 IsNumeric<ST>::value
1302 ,
typename DVecScalarMultExprTrait<typename DVecDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1303 , INVALID_TYPE >::Type Type;
1312 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
1313 struct DVecDVecMultExprTrait< DVecScalarMultExpr<VT1,ST1,false>, DVecScalarMultExpr<VT2,ST2,false> >
1317 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1318 IsDenseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
1319 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1320 ,
typename DVecScalarMultExprTrait<typename DVecDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1321 , INVALID_TYPE >::Type Type;
1338 template<
typename VT1,
typename ST,
typename VT2 >
1339 struct DVecTDVecMultExprTrait< DVecScalarMultExpr<VT1,ST,false>, VT2 >
1343 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1344 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1345 IsNumeric<ST>::value
1346 ,
typename DMatScalarMultExprTrait<typename DVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1347 , INVALID_TYPE >::Type Type;
1356 template<
typename VT1,
typename VT2,
typename ST >
1357 struct DVecTDVecMultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,true> >
1361 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1362 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1363 IsNumeric<ST>::value
1364 ,
typename DMatScalarMultExprTrait<typename DVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1365 , INVALID_TYPE >::Type Type;
1374 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
1375 struct DVecTDVecMultExprTrait< DVecScalarMultExpr<VT1,ST1,false>, DVecScalarMultExpr<VT2,ST2,true> >
1379 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1380 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1381 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1382 ,
typename DMatScalarMultExprTrait<typename DVecTDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1383 , INVALID_TYPE >::Type Type;
1400 template<
typename VT1,
typename ST,
typename VT2 >
1401 struct TDVecTDVecMultExprTrait< DVecScalarMultExpr<VT1,ST,true>, VT2 >
1405 typedef typename SelectType< IsDenseVector<VT1>::value && IsTransposeVector<VT1>::value &&
1406 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1407 IsNumeric<ST>::value
1408 ,
typename TDVecScalarMultExprTrait<typename TDVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1409 , INVALID_TYPE >::Type Type;
1418 template<
typename VT1,
typename VT2,
typename ST >
1419 struct TDVecTDVecMultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,true> >
1423 typedef typename SelectType< IsDenseVector<VT1>::value && IsTransposeVector<VT1>::value &&
1424 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1425 IsNumeric<ST>::value
1426 ,
typename TDVecScalarMultExprTrait<typename TDVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1427 , INVALID_TYPE >::Type Type;
1436 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
1437 struct TDVecTDVecMultExprTrait< DVecScalarMultExpr<VT1,ST1,true>, DVecScalarMultExpr<VT2,ST2,true> >
1441 typedef typename SelectType< IsDenseVector<VT1>::value && IsTransposeVector<VT1>::value &&
1442 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1443 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1444 ,
typename TDVecScalarMultExprTrait<typename TDVecTDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1445 , INVALID_TYPE >::Type Type;
1462 template<
typename VT1,
typename VT2,
typename ST >
1463 struct DVecSVecMultExprTrait< DVecScalarMultExpr<VT1,ST,false>, VT2 >
1467 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1468 IsSparseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
1469 IsNumeric<ST>::value
1470 ,
typename SVecScalarMultExprTrait<typename DVecSVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1471 , INVALID_TYPE >::Type Type;
1480 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
1481 struct DVecSVecMultExprTrait< DVecScalarMultExpr<VT1,ST1,false>,
SVecScalarMultExpr<VT2,ST2,false> >
1485 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1486 IsSparseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
1487 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1488 ,
typename SVecScalarMultExprTrait<typename DVecSVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1489 , INVALID_TYPE >::Type Type;
1506 template<
typename VT1,
typename ST,
typename VT2 >
1507 struct DVecTSVecMultExprTrait< DVecScalarMultExpr<VT1,ST,false>, VT2 >
1511 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1512 IsSparseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1513 IsNumeric<ST>::value
1514 ,
typename SMatScalarMultExprTrait<typename DVecTSVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1515 , INVALID_TYPE >::Type Type;
1524 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
1525 struct DVecTSVecMultExprTrait< DVecScalarMultExpr<VT1,ST1,false>,
SVecScalarMultExpr<VT2,ST2,true> >
1529 typedef typename SelectType< IsDenseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1530 IsSparseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1531 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1532 ,
typename SMatScalarMultExprTrait<typename DVecTSVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1533 , INVALID_TYPE >::Type Type;
1550 template<
typename VT1,
typename ST,
typename VT2 >
1551 struct TDVecTSVecMultExprTrait< DVecScalarMultExpr<VT1,ST,true>, VT2 >
1555 typedef typename SelectType< IsDenseVector<VT1>::value && IsTransposeVector<VT1>::value &&
1556 IsSparseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1557 IsNumeric<ST>::value
1558 ,
typename TSVecScalarMultExprTrait<typename TDVecTSVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1559 , INVALID_TYPE >::Type Type;
1568 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
1569 struct TDVecTSVecMultExprTrait< DVecScalarMultExpr<VT1,ST1,true>,
SVecScalarMultExpr<VT2,ST2,true> >
1573 typedef typename SelectType< IsDenseVector<VT1>::value && IsTransposeVector<VT1>::value &&
1574 IsSparseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1575 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1576 ,
typename TSVecScalarMultExprTrait<typename TDVecTSVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1577 , INVALID_TYPE >::Type Type;
1594 template<
typename VT1,
typename VT2,
typename ST >
1595 struct SVecDVecMultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,false> >
1599 typedef typename SelectType< IsSparseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1600 IsDenseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
1601 IsNumeric<ST>::value
1602 ,
typename SVecScalarMultExprTrait<typename SVecDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1603 , INVALID_TYPE >::Type Type;
1612 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
1613 struct SVecDVecMultExprTrait<
SVecScalarMultExpr<VT1,ST1,false>, DVecScalarMultExpr<VT2,ST2,false> >
1617 typedef typename SelectType< IsSparseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1618 IsDenseVector<VT2>::value && !IsTransposeVector<VT2>::value &&
1619 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1620 ,
typename SVecScalarMultExprTrait<typename SVecDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1621 , INVALID_TYPE >::Type Type;
1638 template<
typename VT1,
typename VT2,
typename ST >
1639 struct SVecTDVecMultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,true> >
1643 typedef typename SelectType< IsSparseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1644 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1645 IsNumeric<ST>::value
1646 ,
typename TSMatScalarMultExprTrait<typename SVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1647 , INVALID_TYPE >::Type Type;
1656 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
1657 struct SVecTDVecMultExprTrait<
SVecScalarMultExpr<VT1,ST1,false>, DVecScalarMultExpr<VT2,ST2,true> >
1661 typedef typename SelectType< IsSparseVector<VT1>::value && !IsTransposeVector<VT1>::value &&
1662 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1663 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1664 ,
typename TSMatScalarMultExprTrait<typename SVecTDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1665 , INVALID_TYPE >::Type Type;
1682 template<
typename VT1,
typename VT2,
typename ST >
1683 struct TSVecTDVecMultExprTrait< VT1, DVecScalarMultExpr<VT2,ST,true> >
1687 typedef typename SelectType< IsSparseVector<VT1>::value && IsTransposeVector<VT1>::value &&
1688 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1689 IsNumeric<ST>::value
1690 ,
typename TSVecScalarMultExprTrait<typename TSVecTDVecMultExprTrait<VT1,VT2>::Type,ST>::Type
1691 , INVALID_TYPE >::Type Type;
1700 template<
typename VT1,
typename ST1,
typename VT2,
typename ST2 >
1701 struct TSVecTDVecMultExprTrait<
SVecScalarMultExpr<VT1,ST1,true>, DVecScalarMultExpr<VT2,ST2,true> >
1705 typedef typename SelectType< IsSparseVector<VT1>::value && IsTransposeVector<VT1>::value &&
1706 IsDenseVector<VT2>::value && IsTransposeVector<VT2>::value &&
1707 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1708 ,
typename TSVecScalarMultExprTrait<typename TSVecTDVecMultExprTrait<VT1,VT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1709 , INVALID_TYPE >::Type Type;
1726 template<
typename MT,
typename VT,
typename ST >
1727 struct DMatDVecMultExprTrait< MT, DVecScalarMultExpr<VT,ST,false> >
1731 typedef typename SelectType< IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1732 IsDenseVector<VT>::value && !IsTransposeVector<VT>::value &&
1733 IsNumeric<ST>::value
1734 ,
typename DVecScalarMultExprTrait<typename DMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1735 , INVALID_TYPE >::Type Type;
1752 template<
typename MT,
typename VT,
typename ST >
1753 struct TDMatDVecMultExprTrait< MT, DVecScalarMultExpr<VT,ST,false> >
1757 typedef typename SelectType< IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1758 IsDenseVector<VT>::value && !IsTransposeVector<VT>::value &&
1759 IsNumeric<ST>::value
1760 ,
typename DVecScalarMultExprTrait<typename TDMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1761 , INVALID_TYPE >::Type Type;
1778 template<
typename VT,
typename MT,
typename ST >
1779 struct TDVecDMatMultExprTrait< DVecScalarMultExpr<VT,ST,true>, MT >
1783 typedef typename SelectType< IsDenseVector<VT>::value && IsTransposeVector<VT>::value &&
1784 IsDenseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1785 IsNumeric<ST>::value
1786 ,
typename TDVecScalarMultExprTrait<typename TDVecDMatMultExprTrait<VT,MT>::Type,ST>::Type
1787 , INVALID_TYPE >::Type Type;
1804 template<
typename VT,
typename MT,
typename ST >
1805 struct TDVecTDMatMultExprTrait< DVecScalarMultExpr<VT,ST,true>, MT >
1809 typedef typename SelectType< IsDenseVector<VT>::value && IsTransposeVector<VT>::value &&
1810 IsDenseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1811 IsNumeric<ST>::value
1812 ,
typename TDVecScalarMultExprTrait<typename TDVecTDMatMultExprTrait<VT,MT>::Type,ST>::Type
1813 , INVALID_TYPE >::Type Type;
1830 template<
typename MT,
typename VT,
typename ST >
1831 struct SMatDVecMultExprTrait< MT, DVecScalarMultExpr<VT,ST,false> >
1835 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1836 IsDenseVector<VT>::value && !IsTransposeVector<VT>::value &&
1837 IsNumeric<ST>::value
1838 ,
typename DVecScalarMultExprTrait<typename SMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1839 , INVALID_TYPE >::Type Type;
1856 template<
typename MT,
typename VT,
typename ST >
1857 struct TSMatDVecMultExprTrait< MT, DVecScalarMultExpr<VT,ST,false> >
1861 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1862 IsDenseVector<VT>::value && !IsTransposeVector<VT>::value &&
1863 IsNumeric<ST>::value
1864 ,
typename DVecScalarMultExprTrait<typename TSMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1865 , INVALID_TYPE >::Type Type;
1882 template<
typename VT,
typename MT,
typename ST >
1883 struct TDVecSMatMultExprTrait< DVecScalarMultExpr<VT,ST,true>, MT >
1887 typedef typename SelectType< IsDenseVector<VT>::value && IsTransposeVector<VT>::value &&
1888 IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1889 IsNumeric<ST>::value
1890 ,
typename TDVecScalarMultExprTrait<typename TDVecSMatMultExprTrait<VT,MT>::Type,ST>::Type
1891 , INVALID_TYPE >::Type Type;
1908 template<
typename VT,
typename MT,
typename ST >
1909 struct TDVecTSMatMultExprTrait< DVecScalarMultExpr<VT,ST,true>, MT >
1913 typedef typename SelectType< IsDenseVector<VT>::value && IsTransposeVector<VT>::value &&
1914 IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1915 IsNumeric<ST>::value
1916 ,
typename TDVecScalarMultExprTrait<typename TDVecTSMatMultExprTrait<VT,MT>::Type,ST>::Type
1917 , INVALID_TYPE >::Type Type;