Today has been a Rcpp commit day :-)
We now have classes for most of the SEXP types:
SYMSXP ? ? ? ? ?Symbol
LISTSXP ? ? ? ? Pairlist
CLOSXP ? ? ? ? ?Function
ENVSXP ? ? ? ? ?Environment
PROMSXP ? ? ? ? Promise
LANGSXP ? ? ? ? Language
SPECIALSXP ? ? ?Function
BUILTINSXP ? ? ?Function
LGLSXP ? ? ? ? ?LogicalVector
INTSXP ? ? ? ? ?IntegerVector
REALSXP ? ? ? ? NumericVector
CPLXSXP ? ? ? ? ComplexVector
STRSXP ? ? ? ? ?CharacterVector
VECSXP ? ? ? ? ?GenericVector a.k.a List
EXPRSXP ? ? ? ? ExpressionVector
EXTPTRSXP ? ? ? XPtr
WEAKREFSXP ? ? ?WeakReference
RAWSXP ? ? ? ? ?RawVector
I have also added methods to deal with S4 objects (in the RObject class
since an S4 object can be of any SEXP type): hasSlot, isS4 and slot.
For GenericVector and CharacterVector, I have implemented the proxy
pattern as described in item 30 of More Effective C++, so that we can do :
CharacterVector x(10) ; /* create a character vector of 10 strings */
x[0] ; /* gets the first element */
x[1] = "foo" ; /* sets the second element */
List y(3) ;
y[0] = 1 ; /* 1 gets wrap()'ed into a IntegerVector */
y[1] = "foo" ; /* foo gets wrap()'ed into a CharacterVector */
y[2] = false ; /* false gets wrap()'ed into a LogicalVector */
As usual, many examples have been added in the unit tests.
Romain
--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://tr.im/JFqa : R Journal, Volume 1/2, December 2009
|- http://tr.im/IW9B : C++ exceptions at the R level
`- http://tr.im/IlMh : CPP package: exposing C++ objects