Index: trunk/SophyaLib/NTools/Makefile
===================================================================
--- trunk/SophyaLib/NTools/Makefile	(revision 2280)
+++ trunk/SophyaLib/NTools/Makefile	(revision 2283)
@@ -211,5 +211,5 @@
  $(INC)perrors.h fmath.h \
  $(INC)sopemtx.h
-$(OBJ)integ.o: integ.cc integ.h $(INC)machdefs.h \
+$(OBJ)integ.o: integ.cc integ.h classfunc.h $(INC)machdefs.h \
  $(INC)pexceptions.h generalfit.h \
  $(INC)tvector.h \
Index: trunk/SophyaLib/NTools/classfunc.h
===================================================================
--- trunk/SophyaLib/NTools/classfunc.h	(revision 2283)
+++ trunk/SophyaLib/NTools/classfunc.h	(revision 2283)
@@ -0,0 +1,29 @@
+////////////////////////////////////////////////////////////////
+//this class provides an alernative to functions which can be viewed as classes
+//                          S.Plaszczynski 29/11/02
+//////////////////////////////////////////////////////////////////////
+
+
+#ifndef CLASSFUNC_H
+#define CLASSFUNC_H
+
+namespace SOPHYA {
+
+//abstract class-function
+class ClassFunc {
+public:
+  virtual double operator()(double x)=0;
+};
+
+//ClassFunc constructed from a a function:simple forward to function
+class Function : public ClassFunc {
+ private:
+  double (*f)(double);
+ public:
+  Function(double (*g)(double)):f(g){}
+  inline  double operator()(double x){ return f(x);}
+};
+
+}
+
+#endif
Index: trunk/SophyaLib/NTools/integ.cc
===================================================================
--- trunk/SophyaLib/NTools/integ.cc	(revision 2280)
+++ trunk/SophyaLib/NTools/integ.cc	(revision 2283)
@@ -54,4 +54,15 @@
 {}
 
+Integrator::Integrator(fun f, double xmin, double xmax)
+//
+//	Constructeur à partir de la fonction double->double, et des
+//	bornes d'intégration.
+//--
+: mFunc(new Function(f)), mGFF(NULL), mGFFParm(NULL),
+  mNStep(50), mDX(-1), mReqPrec(-1),
+  mXMin(xmin), mXMax(xmax)
+{}
+
+
 //++
 Integrator::Integrator(FUNC f)
@@ -66,4 +77,15 @@
 
 //++
+Integrator::Integrator(fun f)
+// 
+//	Constructeur sans spécifier les bornes. Elles sont positionnées
+//	à [0,1], et on pourra les modifier plus tard.
+//--
+: mFunc(new Function(f)), mGFF(NULL), mGFFParm(NULL),
+  mNStep(50), mDX(-1), mReqPrec(-1),
+  mXMin(0), mXMax(1)
+{}
+
+//++
 Integrator::Integrator(GeneralFunction* gff, double* par, double xmin, double xmax)
 //
@@ -95,5 +117,5 @@
 
 Integrator::~Integrator()
-{}
+{delete mFunc;}
 
 //++
@@ -193,5 +215,5 @@
   DBASSERT( mFunc || (mGFF && mGFFParm) );
   return mFunc ? (*mFunc)(x) : mGFF->Value(&x, mGFFParm); 
-}
+  }
 
 double
@@ -236,7 +258,19 @@
 : Integrator(f, xmin, xmax)
 {}
+//++
+TrpzInteg::TrpzInteg(fun f, double xmin, double xmax)
+//
+//--
+: Integrator(f, xmin, xmax)
+{}
 
 //++
 TrpzInteg::TrpzInteg(FUNC f)
+//
+//--
+: Integrator(f)
+{}
+
+TrpzInteg::TrpzInteg(fun f)
 //
 //--
@@ -331,7 +365,20 @@
   NStep(1);
 }
-
+GLInteg::GLInteg(fun f, double xmin, double xmax)
+//
+//--
+: Integrator(f, xmin, xmax), mXPos(NULL), mWeights(NULL), mOrder(8)
+{
+  NStep(1);
+}
 //++
 GLInteg::GLInteg(FUNC f)
+//
+//--
+: Integrator(f), mXPos(NULL), mWeights(NULL), mOrder(8)
+{
+  NStep(1);
+}
+GLInteg::GLInteg(fun f)
 //
 //--
Index: trunk/SophyaLib/NTools/integ.h
===================================================================
--- trunk/SophyaLib/NTools/integ.h	(revision 2280)
+++ trunk/SophyaLib/NTools/integ.h	(revision 2283)
@@ -10,4 +10,5 @@
 #include "pexceptions.h"
 #include <set>
+#include "classfunc.h"
 
 namespace SOPHYA {
@@ -17,9 +18,15 @@
 class Integrator {
 public:
-  typedef double(*FUNC)(double);
+  //typedef double(*FUNC)(double);
+  typedef ClassFunc *FUNC;
+  typedef double (*fun)(double);
 
   Integrator();
   Integrator(FUNC, double xmin, double xmax);
   Integrator(FUNC);
+
+  Integrator(fun, double xmin, double xmax);
+  Integrator(fun);
+
   Integrator(GeneralFunction*, double* par, double xmin, double xmax);
   Integrator(GeneralFunction*, double* par);
@@ -60,4 +67,6 @@
   TrpzInteg(FUNC, double xmin, double xmax);
   TrpzInteg(FUNC);
+  TrpzInteg(fun, double xmin, double xmax);
+  TrpzInteg(fun);
   TrpzInteg(GeneralFunction*, double* par, double xmin, double xmax);
   TrpzInteg(GeneralFunction*, double* par);
@@ -73,4 +82,6 @@
   GLInteg(FUNC, double xmin, double xmax);
   GLInteg(FUNC);
+  GLInteg(fun, double xmin, double xmax);
+  GLInteg(fun);
   GLInteg(GeneralFunction*, double* par, double xmin, double xmax);
   GLInteg(GeneralFunction*, double* par);
