[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