From tpapp at Princeton.EDU  Mon Jul 24 20:50:40 2006
From: tpapp at Princeton.EDU (Tamas K Papp)
Date: Mon, 24 Jul 2006 20:50:40 +0200
Subject: [Rd] persistent C++ objects
Message-ID: <20060724185040.GA13211@pu100877.student.princeton.edu>

Hi,

I am trying to create an R interface for Dynare++ [1], a k-order
solver for rational expectation models.  I would like some advice on
how to glue the C++ code to R.

In C++, it works the following way:

- a DynareModelEq object is initialized with the formulas, parses them
  and performs k-order symbolic expansions

- the user calls a member of this object multiple times with parameter
  values (eg for MCMC), the object returns tensors

An R interface could work this way:

modeleq <- dynare_expand(... model description ...)
result1 <- dynare_substitute(modeleq, par1)
result2 <- dynare_substitute(modeleq, par2)
etc.

So the user needs to see something in R that corresponds to a C++
object that remains in the memory between calls.  What is the proper
way to do that?  Pass a pointer?  How do I handle that in the .C()
calls, convert it to long int?  My C++ programming knowledge is pretty
limited, suggestions and examples would be appreciated.

The rest (using extern "C" constructs as described in "Writing R
Extensions") is pretty clear, except how to make R call the destructor
of the object when the garbage collector removes it.

Thanks,

Tamas

[1] http://www.cepremap.cnrs.fr/juillard/mambo/index.php?option=com_content&task=view&id=53&Itemid=86



[Rd] persistent C++ objects
Tamas K Papp