File indexing completed on 2024-04-06 12:24:22
0001 #ifndef PhysicsTools_Utilities_Sum_h
0002 #define PhysicsTools_Utilities_Sum_h
0003 #include "PhysicsTools/Utilities/interface/Numerical.h"
0004
0005 namespace funct {
0006 template <typename A, typename B>
0007 struct SumStruct {
0008 SumStruct(const A& a, const B& b) : _1(a), _2(b) {}
0009 double operator()() const { return _1() + _2(); }
0010 operator double() const { return _1() + _2(); }
0011 double operator()(double x) const { return _1(x) + _2(x); }
0012 double operator()(double x, double y) const { return _1(x, y) + _2(x, y); }
0013 A _1;
0014 B _2;
0015 };
0016
0017 template <typename A, typename B>
0018 struct Sum {
0019 typedef SumStruct<A, B> type;
0020 static type combine(const A& a, const B& b) { return type(a, b); }
0021 };
0022
0023 template <typename A, typename B>
0024 inline typename Sum<A, B>::type operator+(const A& a, const B& b) {
0025 return Sum<A, B>::combine(a, b);
0026 }
0027
0028 }
0029
0030 #endif