4 #ifndef ROOT_Math_BinaryOperators
5 #define ROOT_Math_BinaryOperators
21 #ifndef ROOT_Math_BinaryOpPolicy
31 template <
class T,
unsigned int D>
class SVector;
32 template <
class T,
unsigned int D1,
unsigned int D2,
class R>
class SMatrix;
46 static inline T apply(
const T& lhs,
const T& rhs) {
61 template <
class T,
unsigned int D>
62 inline VecExpr<BinaryOp<AddOp<T>, SVector<T,D>, SVector<T,D>,
T>,
T, D>
63 operator+(
const SVector<T,D>& lhs,
const SVector<T,D>& rhs) {
73 template <
class A,
class T,
unsigned int D>
74 inline VecExpr<BinaryOp<AddOp<T>, VecExpr<A,T,D>, SVector<T,D>, T>,
T, D>
75 operator+(
const VecExpr<A,T,D>& lhs,
const SVector<T,D>& rhs) {
85 template <
class A,
class T,
unsigned int D>
86 inline VecExpr<BinaryOp<AddOp<T>, SVector<T,D>, VecExpr<A,T,D>, T>,
T, D>
87 operator+(
const SVector<T,D>& lhs,
const VecExpr<A,T,D>& rhs) {
97 template <
class A,
class B,
class T,
unsigned int D>
98 inline VecExpr<BinaryOp<AddOp<T>, VecExpr<A,T,D>, VecExpr<B,T,D>, T>,
T, D>
99 operator+(
const VecExpr<A,T,D>& lhs,
const VecExpr<B,T,D>& rhs) {
115 template <
class A,
class T,
unsigned int D>
116 inline VecExpr<BinaryOpCopyR<AddOp<T>, SVector<T,D>, Constant<A>, T>,
T, D>
132 template <
class A,
class T,
unsigned int D>
133 inline VecExpr<BinaryOpCopyL<AddOp<T>, Constant<A>, SVector<T,D>, T>,
T, D>
144 template <
class A,
class B,
class T,
unsigned int D>
145 inline VecExpr<BinaryOpCopyR<AddOp<T>, VecExpr<B,T,D>, Constant<A>, T>,
T, D>
155 template <
class A,
class B,
class T,
unsigned int D>
156 inline VecExpr<BinaryOpCopyL<AddOp<T>, Constant<A>, VecExpr<B,T,D>, T>,
T, D>
173 template <
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
174 inline Expr<BinaryOp<AddOp<T>, SMatrix<T,D,D2,R1>, SMatrix<T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType >
175 operator+(
const SMatrix<T,D,D2,R1>& lhs,
const SMatrix<T,D,D2,R2>& rhs) {
176 typedef BinaryOp<AddOp<T>, SMatrix<T,D,D2,R1>, SMatrix<T,D,D2,R2>, T> AddOpBinOp;
178 return Expr<AddOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(AddOpBinOp(
AddOp<T>(),lhs,rhs));
185 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
186 inline Expr<BinaryOp<AddOp<T>, Expr<A,T,D,D2,R1>, SMatrix<T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
187 operator+(
const Expr<A,T,D,D2,R1>& lhs,
const SMatrix<T,D,D2,R2>& rhs) {
188 typedef BinaryOp<AddOp<T>, Expr<A,T,D,D2,R1>, SMatrix<T,D,D2,R2>, T> AddOpBinOp;
190 return Expr<AddOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(AddOpBinOp(
AddOp<T>(),lhs,rhs));
197 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
198 inline Expr<BinaryOp<AddOp<T>, SMatrix<T,D,D2,R1>, Expr<A,T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
199 operator+(
const SMatrix<T,D,D2,R1>& lhs,
const Expr<A,T,D,D2,R2>& rhs) {
200 typedef BinaryOp<AddOp<T>, SMatrix<T,D,D2,R1>, Expr<A,T,D,D2,R2>, T> AddOpBinOp;
202 return Expr<AddOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(AddOpBinOp(
AddOp<T>(),lhs,rhs));
209 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
210 inline Expr<BinaryOp<AddOp<T>, Expr<A,T,D,D2,R1>, Expr<B,T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType >
211 operator+(
const Expr<A,T,D,D2,R1>& lhs,
const Expr<B,T,D,D2,R2>& rhs) {
212 typedef BinaryOp<AddOp<T>, Expr<A,T,D,D2,R1>, Expr<B,T,D,D2,R2>, T> AddOpBinOp;
214 return Expr<AddOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(AddOpBinOp(
AddOp<T>(),lhs,rhs));
227 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R>
228 inline Expr<BinaryOpCopyR<AddOp<T>, SMatrix<T,D,D2,R>, Constant<A>, T>,
T, D, D2,
R>
244 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R>
245 inline Expr<BinaryOpCopyL<AddOp<T>, Constant<A>, SMatrix<T,D,D2,R>, T>,
T, D, D2,
R>
250 Constant<A>(lhs),rhs));
257 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R>
258 inline Expr<BinaryOpCopyR<AddOp<T>, Expr<B,T,D,D2,R>, Constant<A>, T>,
T, D, D2,
R>
263 lhs,Constant<A>(rhs)));
269 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R>
270 inline Expr<BinaryOpCopyL<AddOp<T>, Constant<A>, Expr<B,T,D,D2,R>, T>,
T, D, D2,
R>
275 Constant<A>(lhs),rhs));
290 static inline T
apply(
const T& lhs,
const T& rhs) {
305 template <
class T,
unsigned int D>
306 inline VecExpr<BinaryOp<MinOp<T>, SVector<T,D>, SVector<T,D>, T>,
T, D>
307 operator-(
const SVector<T,D>& lhs,
const SVector<T,D>& rhs) {
317 template <
class A,
class T,
unsigned int D>
318 inline VecExpr<BinaryOp<MinOp<T>, VecExpr<A,T,D>, SVector<T,D>, T>,
T, D>
319 operator-(
const VecExpr<A,T,D>& lhs,
const SVector<T,D>& rhs) {
329 template <
class A,
class T,
unsigned int D>
330 inline VecExpr<BinaryOp<MinOp<T>, SVector<T,D>, VecExpr<A,T,D>, T>,
T, D>
331 operator-(
const SVector<T,D>& lhs,
const VecExpr<A,T,D>& rhs) {
341 template <
class A,
class B,
class T,
unsigned int D>
342 inline VecExpr<BinaryOp<MinOp<T>, VecExpr<A,T,D>, VecExpr<B,T,D>, T>,
T, D>
343 operator-(
const VecExpr<A,T,D>& lhs,
const VecExpr<B,T,D>& rhs) {
359 template <
class A,
class T,
unsigned int D>
360 inline VecExpr<BinaryOpCopyR<MinOp<T>, SVector<T,D>, Constant<A>, T>,
T, D>
376 template <
class A,
class T,
unsigned int D>
377 inline VecExpr<BinaryOpCopyL<MinOp<T>, Constant<A>, SVector<T,D>, T>,
T, D>
388 template <
class A,
class B,
class T,
unsigned int D>
389 inline VecExpr<BinaryOpCopyR<MinOp<T>, VecExpr<B,T,D>, Constant<A>, T>,
T, D>
399 template <
class A,
class B,
class T,
unsigned int D>
400 inline VecExpr<BinaryOpCopyL<MinOp<T>, Constant<A>, VecExpr<B,T,D>, T>,
T, D>
417 template <
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
418 inline Expr<BinaryOp<MinOp<T>, SMatrix<T,D,D2,R1>, SMatrix<T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
419 operator-(
const SMatrix<T,D,D2,R1>& lhs,
const SMatrix<T,D,D2,R2>& rhs) {
420 typedef BinaryOp<MinOp<T>, SMatrix<T,D,D2,R1>, SMatrix<T,D,D2,R2>, T> MinOpBinOp;
422 return Expr<MinOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(MinOpBinOp(
MinOp<T>(),lhs,rhs));
429 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
430 inline Expr<BinaryOp<MinOp<T>, Expr<A,T,D,D2,R1>, SMatrix<T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
431 operator-(
const Expr<A,T,D,D2,R1>& lhs,
const SMatrix<T,D,D2,R2>& rhs) {
432 typedef BinaryOp<MinOp<T>, Expr<A,T,D,D2,R1>, SMatrix<T,D,D2,R2>, T> MinOpBinOp;
434 return Expr<MinOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(MinOpBinOp(
MinOp<T>(),lhs,rhs));
441 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
442 inline Expr<BinaryOp<MinOp<T>, SMatrix<T,D,D2,R1>, Expr<A,T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
443 operator-(
const SMatrix<T,D,D2,R1>& lhs,
const Expr<A,T,D,D2,R2>& rhs) {
444 typedef BinaryOp<MinOp<T>, SMatrix<T,D,D2,R1>, Expr<A,T,D,D2,R2>, T> MinOpBinOp;
446 return Expr<MinOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(MinOpBinOp(
MinOp<T>(),lhs,rhs));
453 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
454 inline Expr<BinaryOp<MinOp<T>, Expr<A,T,D,D2,R1>, Expr<B,T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
455 operator-(
const Expr<A,T,D,D2,R1>& lhs,
const Expr<B,T,D,D2,R2>& rhs) {
456 typedef BinaryOp<MinOp<T>, Expr<A,T,D,D2,R1>, Expr<B,T,D,D2,R2>, T> MinOpBinOp;
458 return Expr<MinOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(MinOpBinOp(
MinOp<T>(),lhs,rhs));
471 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R>
472 inline Expr<BinaryOpCopyR<MinOp<T>, SMatrix<T,D,D2,R>, Constant<A>, T>,
T, D, D2,
R>
477 lhs,Constant<A>(rhs)));
489 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R>
490 inline Expr<BinaryOpCopyL<MinOp<T>, Constant<A>, SMatrix<T,D,D2,R>, T>,
T, D, D2,
R>
500 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R>
501 inline Expr<BinaryOpCopyR<MinOp<T>, Expr<B,T,D,D2,R>, Constant<A>, T>,
T, D, D2,
R>
511 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R>
512 inline Expr<BinaryOpCopyL<MinOp<T>, Constant<A>, Expr<B,T,D,D2,R>, T>,
T, D, D2,
R>
517 Constant<A>(lhs),rhs));
532 static inline T
apply(
const T& lhs,
const T& rhs) {
547 template <
class T,
unsigned int D>
548 inline VecExpr<BinaryOp<MulOp<T>, SVector<T,D>, SVector<T,D>, T>,
T, D>
549 operator*(
const SVector<T,D>& lhs,
const SVector<T,D>& rhs) {
565 template <
class A,
class T,
unsigned int D>
566 inline VecExpr<BinaryOp<MulOp<T>, Expr<A,T,D>, SVector<T,D>, T>,
T, D>
567 operator*(
const VecExpr<A,T,D>& lhs,
const SVector<T,D>& rhs) {
576 template <
class A,
class T,
unsigned int D>
577 inline VecExpr<BinaryOp<MulOp<T>, SVector<T,D>, VecExpr<A,T,D>, T>,
T, D>
578 operator*(
const SVector<T,D>& lhs,
const VecExpr<A,T,D>& rhs) {
587 template <
class A,
class B,
class T,
unsigned int D>
588 inline VecExpr<BinaryOp<MulOp<T>, VecExpr<A,T,D>, VecExpr<B,T,D>, T>,
T, D>
589 operator*(
const VecExpr<A,T,D>& lhs,
const VecExpr<B,T,D>& rhs) {
598 template <
class A,
class T,
unsigned int D>
599 inline VecExpr<BinaryOpCopyR<MulOp<T>, SVector<T,D>, Constant<A>, T>,
T, D>
609 template <
class A,
class T,
unsigned int D>
610 inline VecExpr<BinaryOpCopyL<MulOp<T>, Constant<A>, SVector<T,D>, T>,
T, D>
621 template <
class A,
class B,
class T,
unsigned int D>
622 inline VecExpr<BinaryOpCopyR<MulOp<T>, VecExpr<B,T,D>, Constant<A>, T>,
T, D>
632 template <
class A,
class B,
class T,
unsigned int D>
633 inline VecExpr<BinaryOpCopyL<MulOp<T>, Constant<A>, VecExpr<B,T,D>, T>,
T, D>
651 template <
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
652 inline Expr<BinaryOp<MulOp<T>, SMatrix<T,D,D2,R1>, SMatrix<T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
653 Times(
const SMatrix<T,D,D2,R1>& lhs,
const SMatrix<T,D,D2,R2>& rhs) {
654 typedef BinaryOp<MulOp<T>, SMatrix<T,D,D2,R1>, SMatrix<T,D,D2,R2>, T> MulOpBinOp;
656 return Expr<MulOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(MulOpBinOp(
MulOp<T>(),lhs,rhs));
663 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
664 inline Expr<BinaryOp<MulOp<T>, Expr<A,T,D,D2,R1>, SMatrix<T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
665 Times(
const Expr<A,T,D,D2,R1>& lhs,
const SMatrix<T,D,D2,R2>& rhs) {
666 typedef BinaryOp<MulOp<T>, Expr<A,T,D,D2,R1>, SMatrix<T,D,D2,R2>, T> MulOpBinOp;
668 return Expr<MulOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(MulOpBinOp(
MulOp<T>(),lhs,rhs));
675 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
676 inline Expr<BinaryOp<MulOp<T>, SMatrix<T,D,D2,R1>, Expr<A,T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
677 Times(
const SMatrix<T,D,D2,R1>& lhs,
const Expr<A,T,D,D2,R2>& rhs) {
678 typedef BinaryOp<MulOp<T>, SMatrix<T,D,D2,R1>, Expr<A,T,D,D2,R2>, T> MulOpBinOp;
680 return Expr<MulOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(MulOpBinOp(
MulOp<T>(),lhs,rhs));
687 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
688 inline Expr<BinaryOp<MulOp<T>, Expr<A,T,D,D2,R1>, Expr<B,T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
689 Times(
const Expr<A,T,D,D2,R1>& lhs,
const Expr<B,T,D,D2,R2>& rhs) {
690 typedef BinaryOp<MulOp<T>, Expr<A,T,D,D2,R1>, Expr<B,T,D,D2,R2>, T> MulOpBinOp;
692 return Expr<MulOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(MulOpBinOp(
MulOp<T>(),lhs,rhs));
705 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R>
706 inline Expr<BinaryOpCopyR<MulOp<T>, SMatrix<T,D,D2,R>, Constant<A>, T>,
T, D, D2,
R>
711 lhs,Constant<A>(rhs)));
723 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R>
724 inline Expr<BinaryOpCopyL<MulOp<T>, Constant<A>, SMatrix<T,D,D2,R>, T>,
T, D, D2,
R>
729 Constant<A>(lhs),rhs));
736 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R>
737 inline Expr<BinaryOpCopyR<MulOp<T>, Expr<B,T,D,D2,R>, Constant<A>, T>,
T, D, D2,
R>
742 lhs,Constant<A>(rhs)));
748 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R>
749 inline Expr<BinaryOpCopyL<MulOp<T>, Constant<A>, Expr<B,T,D,D2,R>, T>,
T, D, D2,
R>
754 Constant<A>(lhs),rhs));
769 static inline T
apply(
const T& lhs,
const T& rhs) {
783 template <
class T,
unsigned int D>
784 inline VecExpr<BinaryOp<DivOp<T>, SVector<T,D>, SVector<T,D>, T>,
T, D>
785 operator/(
const SVector<T,D>& lhs,
const SVector<T,D>& rhs) {
795 template <
class A,
class T,
unsigned int D>
796 inline VecExpr<BinaryOp<DivOp<T>, VecExpr<A,T,D>, SVector<T,D>, T>,
T, D>
797 operator/(
const VecExpr<A,T,D>& lhs,
const SVector<T,D>& rhs) {
806 template <
class A,
class T,
unsigned int D>
807 inline VecExpr<BinaryOp<DivOp<T>, SVector<T,D>, VecExpr<A,T,D>, T>,
T, D>
808 operator/(
const SVector<T,D>& lhs,
const VecExpr<A,T,D>& rhs) {
818 template <
class A,
class B,
class T,
unsigned int D>
819 inline VecExpr<BinaryOp<DivOp<T>, VecExpr<A,T,D>, VecExpr<B,T,D>, T>,
T, D>
820 operator/(
const VecExpr<A,T,D>& lhs,
const VecExpr<B,T,D>& rhs) {
836 template <
class A,
class T,
unsigned int D>
837 inline VecExpr<BinaryOpCopyR<DivOp<T>, SVector<T,D>, Constant<A>, T>,
T, D>
853 template <
class A,
class T,
unsigned int D>
854 inline VecExpr<BinaryOpCopyL<DivOp<T>, Constant<A>, SVector<T,D>, T>,
T, D>
865 template <
class A,
class B,
class T,
unsigned int D>
866 inline VecExpr<BinaryOpCopyR<DivOp<T>, VecExpr<B,T,D>, Constant<A>, T>,
T, D>
876 template <
class A,
class B,
class T,
unsigned int D>
877 inline VecExpr<BinaryOpCopyL<DivOp<T>, Constant<A>, VecExpr<B,T,D>, T>,
T, D>
894 template <
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
895 inline Expr<BinaryOp<DivOp<T>, SMatrix<T,D,D2,R1>, SMatrix<T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
896 Div(
const SMatrix<T,D,D2,R1>& lhs,
const SMatrix<T,D,D2,R2>& rhs) {
897 typedef BinaryOp<DivOp<T>, SMatrix<T,D,D2,R1>, SMatrix<T,D,D2,R2>, T> DivOpBinOp;
899 return Expr<DivOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(DivOpBinOp(
DivOp<T>(),lhs,rhs));
906 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
907 inline Expr<BinaryOp<DivOp<T>, Expr<A,T,D,D2,R1>, SMatrix<T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
908 Div(
const Expr<A,T,D,D2,R1>& lhs,
const SMatrix<T,D,D2,R2>& rhs) {
909 typedef BinaryOp<DivOp<T>, Expr<A,T,D,D2,R1>, SMatrix<T,D,D2,R2>, T> DivOpBinOp;
911 return Expr<DivOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(DivOpBinOp(
DivOp<T>(),lhs,rhs));
918 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
919 inline Expr<BinaryOp<DivOp<T>, SMatrix<T,D,D2,R1>, Expr<A,T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
920 Div(
const SMatrix<T,D,D2,R1>& lhs,
const Expr<A,T,D,D2,R2>& rhs) {
921 typedef BinaryOp<DivOp<T>, SMatrix<T,D,D2,R1>, Expr<A,T,D,D2,R2>, T> DivOpBinOp;
923 return Expr<DivOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(DivOpBinOp(
DivOp<T>(),lhs,rhs));
930 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R1,
class R2>
931 inline Expr<BinaryOp<DivOp<T>, Expr<A,T,D,D2,R1>, Expr<B,T,D,D2,R2>, T>,
T, D, D2,
typename AddPolicy<T,D,D2,R1,R2>::RepType>
932 Div(
const Expr<A,T,D,D2,R1>& lhs,
const Expr<B,T,D,D2,R2>& rhs) {
933 typedef BinaryOp<DivOp<T>, Expr<A,T,D,D2,R1>, Expr<B,T,D,D2,R2>, T> DivOpBinOp;
935 return Expr<DivOpBinOp,T,D,D2,typename AddPolicy<T,D,D2,R1,R2>::RepType>(DivOpBinOp(
DivOp<T>(),lhs,rhs));
948 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R>
949 inline Expr<BinaryOpCopyR<DivOp<T>, SMatrix<T,D,D2,R>, Constant<A>, T>,
T, D, D2,
R>
954 lhs,Constant<A>(rhs)));
966 template <
class A,
class T,
unsigned int D,
unsigned int D2,
class R>
967 inline Expr<BinaryOpCopyL<DivOp<T>, Constant<A>, SMatrix<T,D,D2,R>, T>,
T, D, D2,
R>
972 Constant<A>(lhs),rhs));
979 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R>
980 inline Expr<BinaryOpCopyR<DivOp<T>, Expr<B,T,D,D2,R>, Constant<A>, T>,
T, D, D2,
R>
985 lhs,Constant<A>(rhs)));
991 template <
class A,
class B,
class T,
unsigned int D,
unsigned int D2,
class R>
992 inline Expr<BinaryOpCopyL<DivOp<T>, Constant<A>, Expr<B,T,D,D2,R>, T>,
T, D, D2,
R>
Multiplication (element-wise) Operation Class.
Namespace for new ROOT classes and functions.
Division (element-wise) Operation Class.
Binary Operation class with value storage for the left argument.
Expr< BinaryOp< MulOp< T >, SMatrix< T, D, D2, R1 >, SMatrix< T, D, D2, R2 >, T >, T, D, D2, typename AddPolicy< T, D, D2, R1, R2 >::RepType > Times(const SMatrix< T, D, D2, R1 > &lhs, const SMatrix< T, D, D2, R2 > &rhs)
Element by element matrix multiplication C(i,j) = A(i,j)*B(i,j) returning a matrix expression...
Subtraction Operation Class.
DisplacementVector2D< CoordSystem1, U > operator+(DisplacementVector2D< CoordSystem1, U > v1, const DisplacementVector2D< CoordSystem2, U > &v2)
Addition of DisplacementVector2D vectors.
static T apply(const T &lhs, const T &rhs)
DisplacementVector2D< CoordSystem1, U > operator-(DisplacementVector2D< CoordSystem1, U > v1, DisplacementVector2D< CoordSystem2, U > const &v2)
Difference between two DisplacementVector2D vectors.
SMatrix: a generic fixed size D1 x D2 Matrix class.
Binary Operation class with value storage for the right argument.
static T apply(const T &lhs, const T &rhs)
BinaryOperation class A class representing binary operators in the parse tree.
Addition Operation Class.
static T apply(const T &lhs, const T &rhs)
VecExpr< BinaryOp< DivOp< T >, SVector< T, D >, SVector< T, D >, T >, T, D > operator/(const SVector< T, D > &lhs, const SVector< T, D > &rhs)
Element by element division of vectors of the same dimension: v3(i) = v1(i)/v2(i) returning a vector ...
Expr< BinaryOp< DivOp< T >, SMatrix< T, D, D2, R1 >, SMatrix< T, D, D2, R2 >, T >, T, D, D2, typename AddPolicy< T, D, D2, R1, R2 >::RepType > Div(const SMatrix< T, D, D2, R1 > &lhs, const SMatrix< T, D, D2, R2 > &rhs)
Division (element wise) of two matrices of the same dimensions: C(i,j) = A(i,j) / B(i...
static T apply(const T &lhs, const T &rhs)
Namespace for new Math classes and functions.
Expression wrapper class for Vector objects.
AxisAngle operator*(RotationX const &r1, AxisAngle const &r2)
Multiplication of an axial rotation by an AxisAngle.
SVector: a generic fixed size Vector class.