22 #ifndef _BLAZE_MATH_EXPRESSIONS_SMATSCALARDIVEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_SMATSCALARDIVEXPR_H_
31 #include <boost/type_traits/remove_reference.hpp>
131 template<
typename MT
140 typedef typename MT::ResultType
RT;
141 typedef typename MT::ReturnType
RN;
142 typedef typename MT::CompositeType
CT;
170 template<
typename MT2 >
172 enum { value = useAssign };
214 typedef typename boost::remove_reference<LeftOperand>::type::ConstIterator
IteratorType;
446 template<
typename T >
473 template<
typename MT2
501 template<
typename MT2
529 template<
typename MT2
531 friend inline typename EnableIf< UseAssign<MT2> >::Type
564 template<
typename MT2
566 friend inline typename EnableIf< UseAssign<MT2> >::Type
637 template<
typename T1
640 inline const typename EnableIf< IsNumeric<T2>,
641 typename SMatScalarDivExprHelper<T1,T2,SO>::Type >::Type
647 typedef typename Helper::ScalarType ScalarType;
649 if( Helper::value ) {
650 return typename Helper::Type( ~mat, ScalarType(1)/ScalarType(scalar) );
653 return typename Helper::Type( ~mat, scalar );
680 template<
typename MT
684 inline const typename EnableIf< IsFloatingPoint< typename DivTrait<ST2,ST1>::Type >
685 ,
typename MultExprTrait< SMatScalarDivExpr<MT,ST1,SO>, ST2 >::Type >::Type
688 return mat.leftOperand() * ( scalar / mat.rightOperand() );
707 template<
typename ST1
711 inline const typename EnableIf< IsFloatingPoint< typename DivTrait<ST1,ST2>::Type >
712 ,
typename MultExprTrait< ST1, SMatScalarDivExpr<MT,ST2,SO> >::Type >::Type
715 return mat.leftOperand() * ( scalar / mat.rightOperand() );
734 template<
typename MT
738 inline const typename EnableIf< IsNumeric<ST2>
739 ,
typename SMatScalarDivExprHelper<MT,typename MultTrait<ST1,ST2>::Type,SO>::Type >::Type
744 typedef typename MultTrait<ST1,ST2>::Type MultType;
745 typedef SMatScalarDivExprHelper<MT,MultType,SO> Helper;
747 if( Helper::value ) {
748 return typename Helper::Type( mat.leftOperand(), MultType(1)/( mat.rightOperand() * scalar ) );
751 return typename Helper::Type( mat.leftOperand(), mat.rightOperand() * scalar );
768 template<
typename MT,
typename ST1,
typename ST2 >
773 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
777 typedef typename SMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
783 typedef typename SelectType< IsSparseMatrix<MT>::value && IsRowMajorMatrix<MT>::value &&
784 IsNumeric<ST1>::value && IsNumeric<ST2>::value
785 ,
typename SelectType<condition,T1,T2>::Type
786 , INVALID_TYPE >::Type Type;
803 template<
typename MT,
typename ST1,
typename ST2 >
808 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
812 typedef typename SMatScalarMultExprTrait<MT,typename DivTrait<ST1,ST2>::Type>::Type T1;
818 typedef typename SelectType< IsSparseMatrix<MT>::value && IsColumnMajorMatrix<MT>::value &&
819 IsNumeric<ST1>::value && IsNumeric<ST2>::value
820 ,
typename SelectType<condition,T1,T2>::Type
821 , INVALID_TYPE >::Type Type;