1 // -*- C++ -*------------------------------------------------------ 2 // 3 // This class is an adaptor from any function (double *f)(double x) 4 // of one real variable, to generic functions. This allows one 5 // to plot, differentiate, sum, compose, etc, any standard C or 6 // C++ math function by converting it to a Generic Function. 7 // 8 // Joe Boudreau October 2012 9 //----------------------------------------------------- 10 #ifndef F1D_h 11 #define F1D_h 1 12 #include "CLHEP/GenericFunctions/AbsFunction.hh" 13 namespace Genfun { 14 15 /** 16 * @author 17 * @ingroup genfun 18 */ 19 class F1D : public AbsFunction { 20 21 typedef double (*FcnPtr)(double); 22 23 FUNCTION_OBJECT_DEF(F1D) 24 25 public: 26 27 // Constructor F1D(FcnPtr fcn)28 F1D(FcnPtr fcn):p(fcn){}; 29 30 // Destructor ~F1D()31 virtual ~F1D(){}; 32 33 // Copy constructor F1D(const F1D & right)34 F1D(const F1D &right):AbsFunction(),p(right.p){}; 35 36 // Retreive function value operator ()(double x) const37 virtual double operator ()(double x) const { 38 return (*p)(x); 39 } 40 operator ()(const Argument & a) const41 virtual double operator ()(const Argument & a) const override {return operator() (a[0]);} 42 43 private: 44 45 // It is illegal to assign a F1D 46 const F1D & operator=(const F1D &right); 47 48 // Data: 49 FcnPtr p; 50 51 }; 52 FUNCTION_OBJECT_IMP(F1D) 53 } // namespace Genfun 54 #endif 55