[Rcpp-devel] Rcpp packages that use Boost.Geometry?
Dirk Eddelbuettel
edd at debian.org
Sat Feb 22 02:47:17 CET 2014
Robi,
Again, your best bet is to use the
- existing vignette, and/or the corresponding chapter in my Rcpp book
- existing Rcpp Gallery pieces
- existing packages with as<> amnd wrap() you can study.
Here is an example from the to-be-updated-on-CRAN-current-on-GitHub RcppBDT
package. In the header file RcppBDT.h we have
// First the 'date' class boost::gregorian::date
//
// non-intrusive extension via template specialisation
template <> boost::gregorian::date as(SEXP dt);
//
// non-intrusive extension via template specialisation
template <> SEXP wrap(const boost::gregorian::date &d);
and in the corresponding source file we have
// define template specialisations for as and wrap
namespace Rcpp {
template <> boost::gregorian::date as( SEXP dtsexp ) {
Rcpp::Date dt(dtsexp);
return boost::gregorian::date(dt.getYear(), dt.getMonth(), dt.getDay());
}
template <> SEXP wrap(const boost::gregorian::date &d) {
boost::gregorian::date::ymd_type ymd = d.year_month_day(); // convert to y/m/d struct
return Rcpp::wrap(Rcpp::Date( ymd.year, ymd.month, ymd.day ));
}
}
It can be that simple: just pick components of a structure from one
representation, move it to the other. RcppBDT is a good use case because the
data structures are simple. Work on a toy example, learn the ropes and then
carry over to the real use case.
Dirk
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list