Callable inerpreter

From: Andy Salnikov (AASalnikov@lbl.gov)
Date: Tue Jul 27 1999 - 18:34:19 MEST


  Hi ROOTers,

  I'm trying to use ROOT as a "callable" interpreter. Say, I have an
object in the compiled program on which I want to run an interpreted
code. Let's say I have following code:

  // --- test1.h - will be processed with |rootcint|

  class A {
    public:
      A(int) {}
      // ....
    private:
      // ....
  };

  // --- test2.cxx - this the interpreted code

  class B {
    public:
      B() {}
      doSomething(const A*) {}
  };

Now what I want is to create an object of class A in the compiled code
and pass it to the B::doSomething(). I have something like this in the
main():


   TApplication *theApp = new TRint(appname, &argc, argv, 0, 0);

   theApp->ProcessLine(".L test2.cxx");    // load interpreted code
   theApp->ProcessLine("B *b = new B;");   // create an instance of
class B in interpreter

   A *a = new A ;                          // make an instance of "A" in
compiled program

   // Now how do I?
   theApp->ProcessLine("b->doSomething(a);"); // "a" means above
allocated a

All I could think of is to take an address of "a" and make a cast,
something like that:

  char buf[64] ;
  sprintf ( buf, "b->doSomething((A*)%d);", &a ) ;
  theApp->ProcessLine( buf ) ;

That looks quite clumsy, and I'm not at all sure this will work. So,
does someone have a nice solution for this? Probably I should play with
the dictionary to make "a" seen to the interpreter? But how do I do
this?

  Cheers,
  Andy.



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:43:36 MET