[Rcpp-devel] Best way to return raw array
darren at dcook.org
Fri Sep 2 04:10:15 CEST 2011
> | I've extended Christian Gunning's speed test with an STL and C/C++
> | version; I was about to post but then I got a bit stuck with using
> | Rcpp::wrap() for a raw block of memory. I'm using this: | |
> src1cpp<-' | int nn=as<int>(n); | double *p=new double[nn]; | ... |
> NumericVector ret(p,p+nn); | delete p; | return ret; | '
> That strikes me as plain wrong code.
Perhaps I can squeeze an answer out of you by changing it to this:
where third_party_function() is C legacy code that is documented as
returning a block of memory of size nn that the client should take
How do I return it?
(I took a look at the convolve examples but they all build up the result
in a Rcpp object. I cannot see an example where you have the result
ready-made in a block of memory and just need to return it.)
> c) The whole point of what we do with Rcpp is to NOT have to deal
> with new / delete and or malloc / free. Even if you think it's cool
> and know how to it in plain, it is simply against the whole spirit
> ...STL idioms are really much better.
You'll enjoy my timing post then (as the STL does not just equal the raw
array version, it beats it).
But I think we see the raison d'etre of Rcpp differently; for me it is:
* Optimizing key R code;
* Interfacing with 3rd party C/C++ libraries;
* Doing the above two while bypassing the ugly verbose code of the
usual way to write R extensions.
Or, in a sound bite: "Rcpp is not just for C++ newbies" ;-)
Darren Cook, Software Researcher/Developer
http://dcook.org/work/ (About me and my work)
http://dcook.org/blogs.html (My blogs and articles)
More information about the Rcpp-devel