22 #ifndef _BLAZE_MATH_EXPRESSIONS_SVECSCALARDIVEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_SVECSCALARDIVEXPR_H_
31 #include <boost/type_traits/remove_reference.hpp>
130 template<
typename VT
139 typedef typename VT::ResultType
RT;
140 typedef typename VT::ReturnType
RN;
141 typedef typename VT::CompositeType
CT;
169 template<
typename VT2 >
171 enum { value = useAssign };
212 typedef typename boost::remove_reference<LeftOperand>::type::ConstIterator
IteratorType;
419 template<
typename T >
446 template<
typename VT2 >
472 template<
typename VT2 >
498 template<
typename VT2 >
499 friend inline typename EnableIf< UseAssign<VT2> >::Type
532 template<
typename VT2 >
533 friend inline typename EnableIf< UseAssign<VT2> >::Type
566 template<
typename VT2 >
567 friend inline typename EnableIf< UseAssign<VT2> >::Type
631 template<
typename T1
634 inline const typename EnableIf< IsNumeric<T2>,
635 typename SVecScalarDivExprHelper<T1,T2,TF>::Type >::Type
641 typedef typename Helper::ScalarType ScalarType;
643 if( Helper::value ) {
644 return typename Helper::Type( ~vec, ScalarType(1)/ScalarType(scalar) );
647 return typename Helper::Type( ~vec, scalar );
674 template<
typename VT
678 inline const typename EnableIf< IsFloatingPoint< typename DivTrait<ST2,ST1>::Type >
679 ,
typename MultExprTrait< SVecScalarDivExpr<VT,ST1,TF>, ST2 >::Type >::Type
682 return vec.leftOperand() * ( scalar / vec.rightOperand() );
701 template<
typename ST1
705 inline const typename EnableIf< IsFloatingPoint< typename DivTrait<ST1,ST2>::Type >
706 ,
typename MultExprTrait< ST1, SVecScalarDivExpr<VT,ST2,TF> >::Type >::Type
709 return vec.leftOperand() * ( scalar / vec.rightOperand() );
728 template<
typename VT
732 inline const typename EnableIf< IsNumeric<ST2>
733 ,
typename SVecScalarDivExprHelper<VT,typename MultTrait<ST1,ST2>::Type,TF>::Type >::Type
738 typedef typename MultTrait<ST1,ST2>::Type MultType;
739 typedef SVecScalarDivExprHelper<VT,MultType,TF> Helper;
741 if( Helper::value ) {
742 return typename Helper::Type( vec.leftOperand(), MultType(1)/( vec.rightOperand() * scalar ) );
745 return typename Helper::Type( vec.leftOperand(), vec.rightOperand() * scalar );
762 template<
typename VT,
typename ST1,
typename ST2 >
767 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
771 typedef typename SVecScalarMultExprTrait<VT,typename DivTrait<ST1,ST2>::Type>::Type T1;
777 typedef typename SelectType< IsSparseVector<VT>::value && !IsTransposeVector<VT>::value &&
778 IsNumeric<ST1>::value && IsNumeric<ST2>::value
779 ,
typename SelectType<condition,T1,T2>::Type
780 , INVALID_TYPE >::Type Type;
797 template<
typename VT,
typename ST1,
typename ST2 >
802 enum { condition = IsFloatingPoint<typename DivTrait<ST1,ST2>::Type>::value };
806 typedef typename SVecScalarMultExprTrait<VT,typename DivTrait<ST1,ST2>::Type>::Type T1;
812 typedef typename SelectType< IsSparseVector<VT>::value && IsTransposeVector<VT>::value &&
813 IsNumeric<ST1>::value && IsNumeric<ST2>::value
814 ,
typename SelectType<condition,T1,T2>::Type
815 , INVALID_TYPE >::Type Type;