25 #ifndef ROOT_Math_WrappedFunction
26 #define ROOT_Math_WrappedFunction
37 struct NullTypeFunc1D {};
39 typedef double(*FreeFunctionPtr)(double);
41 typedef double(*FreeMultiFunctionPtr)(
const double*);
55 template<
typename Func = FreeFunctionPtr >
56 class WrappedFunction :
public IGenFunction {
64 WrappedFunction( Func f ) :
71 WrappedFunction * Clone()
const {
72 return new WrappedFunction(fFunc);
79 virtual double DoEval (
double x)
const {
105 template<
typename FuncObj,
typename MemFuncPtr >
106 class WrappedMemFunction :
public IGenFunction {
114 WrappedMemFunction( FuncObj & obj, MemFuncPtr memFn ) :
122 WrappedMemFunction * Clone()
const {
123 return new WrappedMemFunction(*fObj,fMemFunc);
129 virtual double DoEval (
double x)
const {
130 return ((*fObj).*fMemFunc)( x );
153 template<
typename Func = FreeMultiFunctionPtr >
154 class WrappedMultiFunction :
public IMultiGenFunction {
162 WrappedMultiFunction( Func f ,
unsigned int dim = 1) :
170 WrappedMultiFunction * Clone()
const {
171 return new WrappedMultiFunction(fFunc,fDim);
174 unsigned int NDim()
const {
return fDim; }
180 virtual double DoEval (
const double * x)
const {
192 template<
typename FuncObj,
typename MemFuncPtr >
193 class WrappedMemMultiFunction :
public IMultiGenFunction {
201 WrappedMemMultiFunction( FuncObj & obj, MemFuncPtr memFn,
unsigned int dim = 1 ) :
210 WrappedMemMultiFunction * Clone()
const {
211 return new WrappedMemMultiFunction(*fObj,fMemFunc,fDim);
215 unsigned int NDim()
const {
return fDim; }
219 virtual double DoEval (
const double * x)
const {
220 return ((*fObj).*fMemFunc)( x );
237 #endif // ROOT_Math_WrappedFunction