[Rd] persistent C++ objects

Thomas Lumley tlumley at u.washington.edu
Mon Jul 24 22:38:20 CEST 2006


On Mon, 24 Jul 2006, Tamas K Papp wrote:

> 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.

R has an external pointer type for this purpose.

> 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.

You can register a C finalizer for an external pointer. This is a C 
function that will be called when the object is garbage collected, so you 
can call the destructor from there.

AFAICT the only documentation for this is on the developer page, where 
there is a link to
http://www.stat.uiowa.edu/~luke/R/simpleref.html

I thought I remembered seeing something else, but I can't find anything 
now.


 	-thomas

Thomas Lumley			Assoc. Professor, Biostatistics
tlumley at u.washington.edu	University of Washington, Seattle



More information about the R-devel mailing list