#ifndef ROOT_TFormulaPrimitive
#define ROOT_TFormulaPrimitive
#ifndef ROOT_TNamed
#include "TNamed.h"
#endif
#ifndef ROOT_TBits
#include "TBits.h"
#endif
#ifndef ROOT_TObjArray
#include "TObjArray.h"
#endif
class TFormula;
class TFormulaPrimitive : public TNamed
{
friend class TFormula;
public:
typedef Double_t (*GenFuncG)(const Double_t*,const Double_t*);
typedef Double_t (*GenFunc0)();
typedef Double_t (*GenFunc10)(Double_t);
typedef Double_t (*GenFunc110)(Double_t,Double_t);
typedef Double_t (*GenFunc1110)(Double_t,Double_t, Double_t);
typedef Double_t (TObject::*TFuncG)(const Double_t*,const Double_t*) const;
typedef Double_t (TObject::*TFunc0)() const;
typedef Double_t (TObject::*TFunc10)(Double_t) const;
typedef Double_t (TObject::*TFunc110)(Double_t,Double_t) const;
typedef Double_t (TObject::*TFunc1110)(Double_t,Double_t,Double_t) const;
protected:
static TObjArray * fgListOfFunction;
static Int_t BuildBasicFormulas();
union {
GenFuncG fFuncG;
GenFunc0 fFunc0;
GenFunc10 fFunc10;
GenFunc110 fFunc110;
GenFunc1110 fFunc1110;
TFuncG fTFuncG;
TFunc0 fTFunc0;
TFunc10 fTFunc10;
TFunc110 fTFunc110;
TFunc1110 fTFunc1110;
};
Int_t fType;
Int_t fNArguments;
Int_t fNParameters;
Bool_t fIsStatic;
private:
TFormulaPrimitive(const TFormulaPrimitive&);
TFormulaPrimitive& operator=(const TFormulaPrimitive&);
public:
TFormulaPrimitive();
TFormulaPrimitive(const char *name,const char *formula, GenFunc0 fpointer);
TFormulaPrimitive(const char *name,const char *formula, GenFunc10 fpointer);
TFormulaPrimitive(const char *name,const char *formula, GenFunc110 fpointer);
TFormulaPrimitive(const char *name,const char *formula, GenFunc1110 fpointer);
TFormulaPrimitive(const char *name,const char *formula, GenFuncG fpointer,Int_t npar);
TFormulaPrimitive(const char *name,const char *formula, TFunc0 fpointer);
TFormulaPrimitive(const char *name,const char *formula, TFunc10 fpointer);
TFormulaPrimitive(const char *name,const char *formula, TFunc110 fpointer);
TFormulaPrimitive(const char *name,const char *formula, TFunc1110 fpointer);
TFormulaPrimitive(const char *name,const char *formula, TFuncG fpointer);
static Int_t AddFormula(TFormulaPrimitive * formula);
static TFormulaPrimitive* FindFormula(const char* name);
static TFormulaPrimitive* FindFormula(const char* name, const char *args);
static TFormulaPrimitive* FindFormula(const char* name, UInt_t nargs);
Double_t Eval(Double_t* x);
Double_t Eval(TObject *o, Double_t *x);
Double_t Eval(Double_t *x, Double_t *param);
ClassDef(TFormulaPrimitive,0)
};
#endif