Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 13:33:28

0001 #ifndef PhysicsTools_Utilities_Ratio_h
0002 #define PhysicsTools_Utilities_Ratio_h
0003 
0004 namespace funct {
0005   template <typename A, typename B>
0006   struct RatioStruct {
0007     RatioStruct(const A& a, const B& b) : _1(a), _2(b) {}
0008     double operator()() const { return _1() / _2(); }
0009     operator double() const { return _1() / _2(); }
0010     double operator()(double x) const { return _1(x) / _2(x); }
0011     double operator()(double x, double y) const { return _1(x, y) / _2(x, y); }
0012     A _1;
0013     B _2;
0014   };
0015 
0016   template <typename A, typename B>
0017   struct Ratio {
0018     typedef RatioStruct<A, B> type;
0019     static type combine(const A& a, const B& b) { return type(a, b); }
0020   };
0021 
0022   template <typename A, typename B>
0023   inline typename Ratio<A, B>::type operator/(const A& a, const B& b) {
0024     return Ratio<A, B>::combine(a, b);
0025   }
0026 
0027 }  // namespace funct
0028 
0029 #endif