[Rcpp-devel] Wrapper generation, keep source untouched

Gábor Csárdi csardi.gabor at gmail.com
Wed Feb 12 21:27:39 CET 2014


OK, actually there is a simple way to achieve this, with minimal
modifications to the Rcpp codebase:
https://github.com/gaborcsardi/Rcpp/commit/8b160547d50d668099dff3802c01001baaf415b6

With this, I can put the functions I want to wrap to a separate file, that
is essentially a header file, with contents like this:

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
List rcpp_hello_world();

The other reason why this is great is that I can now define potentially
different conversions to arguments of the same C/C++ type. E.g. if I have
(hypothetical) functions like this

double mean(MyNumericVector* vector);
void permute(MyNumericVector *vector);

then I can write the different as<> conversion for the first vector, where
I don't actually need to copy the SEXP, by simply putting this in the
header file that defines the wrapping:

double mean(in_MyNumericVector *vector);
void permute(inout_MyNumericVector *vector);

and then defining conversions for in_MyNumericVector and
inout_MyNumericVector.

All good. Best,
Gabor


On Wed, Feb 12, 2014 at 12:05 PM, Gábor Csárdi <csardi.gabor at gmail.com>wrote:

> On Wed, Feb 12, 2014 at 11:41 AM, Dirk Eddelbuettel <edd at debian.org>wrote:
> [...]
>
> | My question is, is there a way you keep the original sources of the
>> wrapped
>>  | library intact? I would be updating the sources regularly, and I
>> figured the
>> | best would be not to touch them at all.
>>
>> Did you see the 'Rcpp-extending.pdf' vignette about intrusive vs
>> non-intrusive as<> and wrap?
>>
>
> Sure, I have read that. This helps with the conversions, if I want to
> write the wrapper myself.
>
> Ideally I would have the wrapper generated by Rcpp attributes. Essentially
> what I am asking for is the possibility to avoid adding the //
> [[Rcpp::export]] lines (and other attributes configuration) to the original
> sources, but having these lines in a separate file (or files?). This file
> would be essentially the description of the wrapper to be generated by Rcpp
> attributes.
>
> I have to admit that I have only tried the Rcpp examples in the manuals so
> far, so please forgive me if what I am asking for is unreasonable, or is
> already solved.
>
> [...]
>
>> | According to the docs, compileAttributes does not support this. Do you
>> have
>>
> | anything against implementing this in Rcpp? If not, and you can help me
>> coming
>> | up with some syntax that you like, I can code it up.
>>
>> Attributes can surely be extended, but some discussion or prototyping may
>> not
>> hurt.
>>
>
> OK, so I'll open an issue for this in your github issue tracker, and fork
> the repo as well.
>
> G.
>
> [...]
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20140212/df6ad9ff/attachment.html>


More information about the Rcpp-devel mailing list