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