22 #ifndef _BLAZE_MATH_EXPRESSIONS_DVECDVECCROSSEXPR_H_
23 #define _BLAZE_MATH_EXPRESSIONS_DVECDVECCROSSEXPR_H_
66 template<
typename VT1
74 typedef typename VT1::ResultType
RT1;
75 typedef typename VT2::ResultType
RT2;
76 typedef typename VT1::ReturnType
RN1;
77 typedef typename VT2::ReturnType
RN2;
78 typedef typename VT1::CompositeType
CT1;
79 typedef typename VT2::CompositeType
CT2;
80 typedef typename VT1::ElementType
ET1;
81 typedef typename VT2::ElementType
ET2;
126 enum { vectorizable = 0 };
155 else if( index == 1UL )
156 return lhs_[2UL] * rhs_[0UL] -
lhs_[0UL] * rhs_[2UL];
158 return lhs_[0UL] * rhs_[1UL] -
lhs_[1UL] * rhs_[0UL];
198 template<
typename T >
200 return (
lhs_.canAlias( alias ) ||
rhs_.canAlias( alias ) );
210 template<
typename T >
212 return (
lhs_.isAliased( alias ) ||
rhs_.isAliased( alias ) );
236 template<
typename VT >
247 (~lhs)[0] = x[1UL]*y[2UL] - x[2UL]*y[1UL];
248 (~lhs)[1] = x[2UL]*y[0UL] - x[0UL]*y[2UL];
249 (~lhs)[2] = x[0UL]*y[1UL] - x[1UL]*y[0UL];
268 template<
typename VT >
300 template<
typename VT >
311 (~lhs)[0] += x[1UL]*y[2UL] - x[2UL]*y[1UL];
312 (~lhs)[1] += x[2UL]*y[0UL] - x[0UL]*y[2UL];
313 (~lhs)[2] += x[0UL]*y[1UL] - x[1UL]*y[0UL];
336 template<
typename VT >
347 (~lhs)[0] -= x[1UL]*y[2UL] - x[2UL]*y[1UL];
348 (~lhs)[1] -= x[2UL]*y[0UL] - x[0UL]*y[2UL];
349 (~lhs)[2] -= x[0UL]*y[1UL] - x[1UL]*y[0UL];
372 template<
typename VT >
383 (~lhs)[0] *= x[1UL]*y[2UL] - x[2UL]*y[1UL];
384 (~lhs)[1] *= x[2UL]*y[0UL] - x[0UL]*y[2UL];
385 (~lhs)[2] *= x[0UL]*y[1UL] - x[1UL]*y[0UL];
439 template<
typename T1
441 inline const DVecDVecCrossExpr<T1,T2>
446 if( (~lhs).size() != 3UL || (~rhs).size() != 3UL )
447 throw std::invalid_argument(
"Invalid vector size for cross product" );