00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef DoubleParamToArgAdaptor_h_
00022 #define DoubleParamToArgAdaptor_h_
00023
00024 #include <functional>
00025 #include "CLHEP/config/CLHEP.h"
00026 #include "CLHEP/config/iostream.h"
00027 #include <string>
00028 #include "CLHEP/GenericFunctions/Parameter.hh"
00029 #include "CLHEP/GenericFunctions/AbsFunction.hh"
00030
00031 namespace Genfun {
00032
00037 template <class F>
00038 class DoubleParamToArgAdaptor : public AbsFunction {
00039
00040 FUNCTION_OBJECT_DEF(DoubleParamToArgAdaptor)
00041
00042 public:
00043
00044
00045 typedef Parameter & (F::*ScopedMethodPtr) ();
00046
00047
00048 DoubleParamToArgAdaptor(const F & function,
00049 ScopedMethodPtr parameterFetchMethod0,
00050 ScopedMethodPtr paraemterFetchMethod1);
00051
00052
00053 DoubleParamToArgAdaptor(const DoubleParamToArgAdaptor &right);
00054
00055
00056 virtual ~DoubleParamToArgAdaptor();
00057
00058
00059 virtual double operator ()(double argument) const;
00060 virtual double operator ()(const Argument & a) const;
00061
00062
00063 virtual unsigned int dimensionality() const;
00064
00065
00066 Parameter & scaleFactor0();
00067 const Parameter & scaleFactor0() const;
00068
00069
00070 Parameter & scaleFactor1();
00071 const Parameter & scaleFactor1() const;
00072
00073
00074 private:
00075
00076
00077 const DoubleParamToArgAdaptor & operator=(const DoubleParamToArgAdaptor &right);
00078
00079
00080 Parameter _scaleFactor0;
00081 Parameter _scaleFactor1;
00082
00083
00084 F *_function;
00085
00086
00087 std::mem_fun_ref_t<Parameter &, F> _parameterFetchMethod0;
00088 std::mem_fun_ref_t<Parameter &, F> _parameterFetchMethod1;
00089
00090 };
00091 }
00092 #include "CLHEP/GenericFunctions/DoubleParamToArgAdaptor.icc"
00093 #endif