22 #ifndef _BLAZE_MATH_EXPRESSIONS_SMATSCALARMULTEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_SMATSCALARMULTEXPR_H_
31 #include <boost/type_traits/remove_reference.hpp>
92 typedef typename MT::ResultType
RT;
93 typedef typename MT::ReturnType
RN;
94 typedef typename MT::CompositeType
CT;
122 template<
typename MT2 >
124 enum { value = useAssign };
166 typedef typename boost::remove_reference<LeftOperand>::type::ConstIterator
IteratorType;
398 template<
typename T >
425 template<
typename MT2
453 template<
typename MT2
481 template<
typename MT2
483 friend inline typename EnableIf< UseAssign<MT2> >::Type
516 template<
typename MT2
518 friend inline typename EnableIf< UseAssign<MT2> >::Type
582 template<
typename MT
622 template<
typename T1
625 inline const typename EnableIf< IsNumeric<T2>,
typename MultExprTrait<T1,T2>::Type >::Type
629 return Type( ~mat, scalar );
655 template<
typename T1
658 inline const typename EnableIf< IsNumeric<T1>,
typename MultExprTrait<T1,T2>::Type >::Type
662 return Type( ~mat, scalar );
687 template<
typename VT
720 template<
typename MT
724 inline const typename EnableIf< IsNumeric<ST2>
725 ,
typename MultExprTrait< SMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
728 return mat.leftOperand() * ( mat.rightOperand() * scalar );
747 template<
typename ST1
751 inline const typename EnableIf< IsNumeric<ST1>
752 ,
typename MultExprTrait< ST1, SMatScalarMultExpr<MT,ST2,SO> >::Type >::Type
755 return mat.leftOperand() * ( scalar * mat.rightOperand() );
774 template<
typename MT
778 inline const typename EnableIf< IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>
779 ,
typename DivExprTrait< SMatScalarMultExpr<MT,ST1,SO>, ST2 >::Type >::Type
782 return mat.leftOperand() * ( mat.rightOperand() / scalar );
802 template<
typename MT
806 inline const typename MultExprTrait< SMatScalarMultExpr<MT,ST,SO>, VT >::Type
809 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
829 template<
typename VT
833 inline const typename MultExprTrait< VT, SMatScalarMultExpr<MT,ST,SO> >::Type
836 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
858 template<
typename MT
863 inline const typename MultExprTrait< SMatScalarMultExpr<MT,ST1,SO>, DVecScalarMultExpr<VT,ST2,false> >::Type
866 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
888 template<
typename VT
896 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
916 template<
typename MT
920 inline const typename MultExprTrait< SMatScalarMultExpr<MT,ST,SO>, VT >::Type
923 return ( mat.leftOperand() * (~vec) ) * mat.rightOperand();
943 template<
typename VT
947 inline const typename MultExprTrait< VT, SMatScalarMultExpr<MT,ST,SO> >::Type
950 return ( (~vec) * mat.leftOperand() ) * mat.rightOperand();
972 template<
typename MT
980 return ( mat.leftOperand() * vec.leftOperand() ) * ( mat.rightOperand() * vec.rightOperand() );
1002 template<
typename VT
1010 return ( vec.leftOperand() * mat.leftOperand() ) * ( vec.rightOperand() * mat.rightOperand() );
1030 template<
typename MT1
1035 inline const typename MultExprTrait< SMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1038 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1058 template<
typename MT1
1063 inline const typename MultExprTrait< MT1, SMatScalarMultExpr<MT2,ST,SO2> >::Type
1066 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1086 template<
typename MT1
1091 inline const typename MultExprTrait< SMatScalarMultExpr<MT1,ST,SO1>, MT2 >::Type
1094 return ( lhs.leftOperand() * (~rhs) ) * lhs.rightOperand();
1114 template<
typename MT1
1119 inline const typename MultExprTrait< MT1, SMatScalarMultExpr<MT2,ST,SO2> >::Type
1122 return ( (~lhs) * rhs.leftOperand() ) * rhs.rightOperand();
1142 template<
typename MT1
1151 return ( lhs.leftOperand() * rhs.leftOperand() ) * ( lhs.rightOperand() * rhs.rightOperand() );
1167 template<
typename MT,
typename ST1,
typename ST2 >
1172 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1173 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1174 ,
typename SMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1175 , INVALID_TYPE >::Type Type;
1192 template<
typename MT,
typename ST1,
typename ST2 >
1197 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1198 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1199 ,
typename TSMatScalarMultExprTrait<MT,typename MultTrait<ST1,ST2>::Type>::Type
1200 , INVALID_TYPE >::Type Type;
1217 template<
typename MT,
typename ST1,
typename ST2 >
1222 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1226 typedef typename SMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1227 typedef typename SMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1232 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1233 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1234 ,
typename SelectType<condition,T1,T2>::Type
1235 , INVALID_TYPE >::Type Type;
1252 template<
typename MT,
typename ST1,
typename ST2 >
1257 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
1261 typedef typename TSMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
1262 typedef typename TSMatScalarDivExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T2;
1267 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1268 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1269 ,
typename SelectType<condition,T1,T2>::Type
1270 , INVALID_TYPE >::Type Type;
1287 template<
typename MT,
typename ST,
typename VT >
1292 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1293 IsDenseVector<VT>::value && !IsTransposeVector<VT>::value &&
1294 IsNumeric<ST>::value
1295 ,
typename DVecScalarMultExprTrait<typename SMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1296 , INVALID_TYPE >::Type Type;
1305 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1306 struct SMatDVecMultExprTrait<
SMatScalarMultExpr<MT,ST1,false>, DVecScalarMultExpr<VT,ST2,false> >
1310 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1311 IsDenseVector<VT>::value && !IsTransposeVector<VT>::value &&
1312 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1313 ,
typename DVecScalarMultExprTrait<typename SMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1314 , INVALID_TYPE >::Type Type;
1331 template<
typename MT,
typename ST,
typename VT >
1336 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1337 IsDenseVector<VT>::value && !IsTransposeVector<VT>::value &&
1338 IsNumeric<ST>::value
1339 ,
typename DVecScalarMultExprTrait<typename TSMatDVecMultExprTrait<MT,VT>::Type,ST>::Type
1340 , INVALID_TYPE >::Type Type;
1349 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1350 struct TSMatDVecMultExprTrait<
SMatScalarMultExpr<MT,ST1,true>, DVecScalarMultExpr<VT,ST2,false> >
1354 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1355 IsDenseVector<VT>::value && !IsTransposeVector<VT>::value &&
1356 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1357 ,
typename DVecScalarMultExprTrait<typename TSMatDVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1358 , INVALID_TYPE >::Type Type;
1375 template<
typename VT,
typename MT,
typename ST >
1380 typedef typename SelectType< IsDenseVector<VT>::value && IsTransposeVector<VT>::value &&
1381 IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1382 IsNumeric<ST>::value
1383 ,
typename TDVecScalarMultExprTrait<typename TDVecSMatMultExprTrait<VT,MT>::Type,ST>::Type
1384 , INVALID_TYPE >::Type Type;
1393 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1394 struct TDVecSMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>,
SMatScalarMultExpr<MT,ST2,false> >
1398 typedef typename SelectType< IsDenseVector<VT>::value && IsTransposeVector<VT>::value &&
1399 IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1400 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1401 ,
typename TDVecScalarMultExprTrait<typename TDVecSMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1402 , INVALID_TYPE >::Type Type;
1419 template<
typename VT,
typename MT,
typename ST >
1424 typedef typename SelectType< IsDenseVector<VT>::value && IsTransposeVector<VT>::value &&
1425 IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1426 IsNumeric<ST>::value
1427 ,
typename TDVecScalarMultExprTrait<typename TDVecTSMatMultExprTrait<VT,MT>::Type,ST>::Type
1428 , INVALID_TYPE >::Type Type;
1437 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1438 struct TDVecTSMatMultExprTrait< DVecScalarMultExpr<VT,ST1,true>,
SMatScalarMultExpr<MT,ST2,true> >
1442 typedef typename SelectType< IsDenseVector<VT>::value && IsTransposeVector<VT>::value &&
1443 IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1444 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1445 ,
typename TDVecScalarMultExprTrait<typename TDVecTSMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1446 , INVALID_TYPE >::Type Type;
1463 template<
typename MT,
typename ST,
typename VT >
1468 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1469 IsSparseVector<VT>::value && !IsTransposeVector<VT>::value &&
1470 IsNumeric<ST>::value
1471 ,
typename SVecScalarMultExprTrait<typename SMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
1472 , INVALID_TYPE >::Type Type;
1481 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1486 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1487 IsSparseVector<VT>::value && !IsTransposeVector<VT>::value &&
1488 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1489 ,
typename SVecScalarMultExprTrait<typename SMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1490 , INVALID_TYPE >::Type Type;
1507 template<
typename MT,
typename ST,
typename VT >
1512 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1513 IsSparseVector<VT>::value && !IsTransposeVector<VT>::value &&
1514 IsNumeric<ST>::value
1515 ,
typename SVecScalarMultExprTrait<typename TSMatSVecMultExprTrait<MT,VT>::Type,ST>::Type
1516 , INVALID_TYPE >::Type Type;
1525 template<
typename MT,
typename ST1,
typename VT,
typename ST2 >
1530 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1531 IsSparseVector<VT>::value && !IsTransposeVector<VT>::value &&
1532 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1533 ,
typename SVecScalarMultExprTrait<typename TSMatSVecMultExprTrait<MT,VT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1534 , INVALID_TYPE >::Type Type;
1551 template<
typename VT,
typename MT,
typename ST >
1556 typedef typename SelectType< IsSparseVector<VT>::value && IsTransposeVector<VT>::value &&
1557 IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1558 IsNumeric<ST>::value
1559 ,
typename TSVecScalarMultExprTrait<typename TSVecSMatMultExprTrait<VT,MT>::Type,ST>::Type
1560 , INVALID_TYPE >::Type Type;
1569 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1574 typedef typename SelectType< IsSparseVector<VT>::value && IsTransposeVector<VT>::value &&
1575 IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
1576 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1577 ,
typename TSVecScalarMultExprTrait<typename TSVecSMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1578 , INVALID_TYPE >::Type Type;
1595 template<
typename VT,
typename MT,
typename ST >
1600 typedef typename SelectType< IsSparseVector<VT>::value && IsTransposeVector<VT>::value &&
1601 IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1602 IsNumeric<ST>::value
1603 ,
typename TSVecScalarMultExprTrait<typename TSVecTSMatMultExprTrait<VT,MT>::Type,ST>::Type
1604 , INVALID_TYPE >::Type Type;
1613 template<
typename VT,
typename ST1,
typename MT,
typename ST2 >
1618 typedef typename SelectType< IsSparseVector<VT>::value && IsTransposeVector<VT>::value &&
1619 IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
1620 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1621 ,
typename TSVecScalarMultExprTrait<typename TSVecTSMatMultExprTrait<VT,MT>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1622 , INVALID_TYPE >::Type Type;
1639 template<
typename MT1,
typename MT2,
typename ST >
1644 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1645 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1646 IsNumeric<ST>::value
1647 ,
typename DMatScalarMultExprTrait<typename DMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1648 , INVALID_TYPE >::Type Type;
1665 template<
typename MT1,
typename MT2,
typename ST >
1670 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1671 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1672 IsNumeric<ST>::value
1673 ,
typename DMatScalarMultExprTrait<typename DMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1674 , INVALID_TYPE >::Type Type;
1691 template<
typename MT1,
typename MT2,
typename ST >
1696 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
1697 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1698 IsNumeric<ST>::value
1699 ,
typename TDMatScalarMultExprTrait<typename TDMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1700 , INVALID_TYPE >::Type Type;
1717 template<
typename MT1,
typename MT2,
typename ST >
1722 typedef typename SelectType< IsDenseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
1723 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1724 IsNumeric<ST>::value
1725 ,
typename TDMatScalarMultExprTrait<typename TDMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1726 , INVALID_TYPE >::Type Type;
1743 template<
typename MT1,
typename ST,
typename MT2 >
1748 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1749 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1750 IsNumeric<ST>::value
1751 ,
typename DMatScalarMultExprTrait<typename SMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1752 , INVALID_TYPE >::Type Type;
1769 template<
typename MT1,
typename ST,
typename MT2 >
1774 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1775 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1776 IsNumeric<ST>::value
1777 ,
typename DMatScalarMultExprTrait<typename SMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1778 , INVALID_TYPE >::Type Type;
1795 template<
typename MT1,
typename ST,
typename MT2 >
1800 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
1801 IsDenseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1802 IsNumeric<ST>::value
1803 ,
typename TDMatScalarMultExprTrait<typename TSMatDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1804 , INVALID_TYPE >::Type Type;
1821 template<
typename MT1,
typename ST,
typename MT2 >
1826 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
1827 IsDenseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1828 IsNumeric<ST>::value
1829 ,
typename TDMatScalarMultExprTrait<typename TSMatTDMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1830 , INVALID_TYPE >::Type Type;
1847 template<
typename MT1,
typename ST,
typename MT2 >
1852 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1853 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1854 IsNumeric<ST>::value
1855 ,
typename SMatScalarMultExprTrait<typename SMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1856 , INVALID_TYPE >::Type Type;
1865 template<
typename MT1,
typename MT2,
typename ST >
1870 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1871 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1872 IsNumeric<ST>::value
1873 ,
typename SMatScalarMultExprTrait<typename SMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1874 , INVALID_TYPE >::Type Type;
1883 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
1888 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1889 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1890 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1891 ,
typename SMatScalarMultExprTrait<typename SMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1892 , INVALID_TYPE >::Type Type;
1909 template<
typename MT1,
typename ST,
typename MT2 >
1914 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1915 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1916 IsNumeric<ST>::value
1917 ,
typename SMatScalarMultExprTrait<typename SMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1918 , INVALID_TYPE >::Type Type;
1927 template<
typename MT1,
typename MT2,
typename ST >
1932 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1933 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1934 IsNumeric<ST>::value
1935 ,
typename SMatScalarMultExprTrait<typename SMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1936 , INVALID_TYPE >::Type Type;
1945 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
1950 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsRowMajorMatrix<MT1>::value &&
1951 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
1952 IsNumeric<ST1>::value && IsNumeric<ST2>::value
1953 ,
typename SMatScalarMultExprTrait<typename SMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
1954 , INVALID_TYPE >::Type Type;
1971 template<
typename MT1,
typename ST,
typename MT2 >
1976 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
1977 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1978 IsNumeric<ST>::value
1979 ,
typename TSMatScalarMultExprTrait<typename TSMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1980 , INVALID_TYPE >::Type Type;
1989 template<
typename MT1,
typename MT2,
typename ST >
1994 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
1995 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
1996 IsNumeric<ST>::value
1997 ,
typename TSMatScalarMultExprTrait<typename TSMatSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
1998 , INVALID_TYPE >::Type Type;
2007 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2012 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2013 IsSparseMatrix<MT2>::value && IsRowMajorMatrix<MT2>::value &&
2014 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2015 ,
typename TSMatScalarMultExprTrait<typename TSMatSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2016 , INVALID_TYPE >::Type Type;
2033 template<
typename MT1,
typename ST,
typename MT2 >
2038 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2039 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2040 IsNumeric<ST>::value
2041 ,
typename TSMatScalarMultExprTrait<typename TSMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2042 , INVALID_TYPE >::Type Type;
2051 template<
typename MT1,
typename MT2,
typename ST >
2056 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2057 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2058 IsNumeric<ST>::value
2059 ,
typename TSMatScalarMultExprTrait<typename TSMatTSMatMultExprTrait<MT1,MT2>::Type,ST>::Type
2060 , INVALID_TYPE >::Type Type;
2069 template<
typename MT1,
typename ST1,
typename MT2,
typename ST2 >
2074 typedef typename SelectType< IsSparseMatrix<MT1>::value && IsColumnMajorMatrix<MT1>::value &&
2075 IsSparseMatrix<MT2>::value && IsColumnMajorMatrix<MT2>::value &&
2076 IsNumeric<ST1>::value && IsNumeric<ST2>::value
2077 ,
typename TSMatScalarMultExprTrait<typename TSMatTSMatMultExprTrait<MT1,MT2>::Type,
typename MultTrait<ST1,ST2>::Type>::Type
2078 , INVALID_TYPE >::Type Type;