Re: your mail (TMyClass)

From: Rene Brun (Rene.Brun@cern.ch)
Date: Sun Feb 27 2000 - 19:35:57 MET


Anton,
As shown by Pasha, you can always call gROOT->ProcessLine
from the compiled code to execute via the interpreter.
However, this may be a very slow procedure in the case
you intend to use this service.
As you were guessing, my answer is "yes, look in the second TF1
constructor". This is a real example and you have to understand
each of the following lines
 - in the constructor
   char *funcname = G__p2f2funcname(fcn);
   SetTitle(funcname);
   if (funcname) {
      fMethodCall = new TMethodCall();
      fMethodCall->InitWithPrototype(funcname,"Double_t*,Double_t*");
      fNumber = -1;
   } else {
      Printf("Function:%s cannot be compiled",name);
   }

 - in TF1::EvalPar
   Double_t result = 0;
   if (fMethodCall) fMethodCall->Execute(result);

It is up to you to do the bookeeping of fMethodCall as well as
the function name.
The method above is efficient. Each call to fMethodCall->Execute
executes pre-compiled bytecode as opposed to string interpretation
in the case of gROOT->ProcessLine.

Rene Brun

On Sun, 27 Feb 2000, Anton Fokin wrote:

> Hello!
> 
> I am in troubles with calling interpreter function from compiled code.
> 
> Let's say I have compiled class
> 
> class TMyClass {
> private:
>   Float_t (*fFunc) ();
> public:
>      void SetFunction(const char* Macro);
>   Float_t Function()                      { return (*fFunc)() }
> };
> 
> 
> and a macro in Macro.C file
> 
> Float_t
> MyFunc()
> {
>   printf("the answer is ...\n");
>   return 42;
> }
> 
> now I would like to write in my compiled program:
> 
> 
> TMyClass *MyClass = new TMyClass();
> MyClass->SetFunction("Macro.C");
> Float_t Answer = MyClass->Function();
> 
> 
> How TMyClass::SetFunction(const char* Macro) should look like? I am sure you
> suggest me to look into TF1 implementation, but could you write a few lines
> of example code instead? I hope it helps others too ...
> 
> Best regards,
> Anton
> 



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:20 MET