31 #ifndef ROOT_Math_GSLMultiRootFunctionWrapper
32 #define ROOT_Math_GSLMultiRootFunctionWrapper
34 #include "gsl/gsl_multiroots.h"
48 typedef double ( * GSLMultiRootFPointer ) (
const gsl_vector *,
void *, gsl_vector *);
49 typedef void ( * GSLMultiRootDfPointer ) (
const gsl_vector *,
void *, gsl_matrix *);
50 typedef void ( * GSLMultiRootFdfPointer ) (
const gsl_vector *,
void *, gsl_vector *, gsl_matrix *);
59 class GSLMultiRootFunctionWrapper {
63 GSLMultiRootFunctionWrapper()
72 template<
class FuncVector>
73 void SetFunctions(
const FuncVector & f,
unsigned int n ) {
76 fFunc.f = &GSLMultiRootFunctionAdapter<FuncVector >::F;
78 fFunc.params =
const_cast<void *
>(p);
81 gsl_multiroot_function * GetFunctions() {
return &fFunc; }
86 gsl_multiroot_function fFunc;
98 class GSLMultiRootDerivFunctionWrapper {
102 GSLMultiRootDerivFunctionWrapper()
113 template<
class FuncVector>
114 void SetFunctions(
const FuncVector & f,
unsigned int n ) {
117 fFunc.f = &GSLMultiRootFunctionAdapter<FuncVector >::F;
118 fFunc.df = &GSLMultiRootFunctionAdapter<FuncVector >::Df;
119 fFunc.fdf = &GSLMultiRootFunctionAdapter<FuncVector >::FDf;
121 fFunc.params =
const_cast<void *
>(p);
124 gsl_multiroot_function_fdf * GetFunctions() {
return &fFunc; }
129 gsl_multiroot_function_fdf fFunc;