[Rcpp-commits] r3487 - pkg/RcppEigen/inst/include
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Tue Feb 28 15:26:46 CET 2012
Author: dmbates
Date: 2012-02-28 15:26:45 +0100 (Tue, 28 Feb 2012)
New Revision: 3487
Modified:
pkg/RcppEigen/inst/include/RcppEigenForward.h
pkg/RcppEigen/inst/include/RcppEigenWrap.h
Log:
Add as templates for ArrayXd and ArrayXXd
Modified: pkg/RcppEigen/inst/include/RcppEigenForward.h
===================================================================
--- pkg/RcppEigen/inst/include/RcppEigenForward.h 2012-02-26 16:44:32 UTC (rev 3486)
+++ pkg/RcppEigen/inst/include/RcppEigenForward.h 2012-02-28 14:26:45 UTC (rev 3487)
@@ -42,9 +42,14 @@
/* support for as */
template<typename T> class Exporter< Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, 1> > >;
template<typename T> class Exporter< Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> > >;
+ template<typename T> class Exporter< Eigen::Map<Eigen::Array<T, Eigen::Dynamic, 1> > >;
+ template<typename T> class Exporter< Eigen::Map<Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic> > >;
template<typename T> class Exporter< Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> >;
template<typename T> class Exporter< Eigen::Matrix<T, Eigen::Dynamic, 1> >;
template<typename T> class Exporter< Eigen::Matrix<T, 1, Eigen::Dynamic> >;
+ template<typename T> class Exporter< Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic> >;
+ template<typename T> class Exporter< Eigen::Array<T, Eigen::Dynamic, 1> >;
+ template<typename T> class Exporter< Eigen::Array<T, 1, Eigen::Dynamic> >;
template<typename T> class Exporter< Eigen::MappedSparseMatrix<T> >;
template<typename T> class Exporter< Eigen::SparseMatrix<T> >;
Modified: pkg/RcppEigen/inst/include/RcppEigenWrap.h
===================================================================
--- pkg/RcppEigen/inst/include/RcppEigenWrap.h 2012-02-26 16:44:32 UTC (rev 3486)
+++ pkg/RcppEigen/inst/include/RcppEigenWrap.h 2012-02-28 14:26:45 UTC (rev 3487)
@@ -157,6 +157,23 @@
};
template<typename T>
+ class Exporter<Eigen::Map<Eigen::Array<T, Eigen::Dynamic, 1> > > {
+ public:
+ typedef typename Eigen::Map<Eigen::Array<T, Eigen::Dynamic, 1> > MVType;
+ Exporter(SEXP x) : d_size(::Rf_length(x)) {
+ const int RTYPE = ::Rcpp::traits::r_sexptype_traits<T>::rtype ;
+ if (TYPEOF(x) != RTYPE)
+ throw std::invalid_argument("Wrong R type for mapped vector");
+ typedef typename ::Rcpp::traits::storage_type<RTYPE>::type STORAGE;
+ d_start = ::Rcpp::internal::r_vector_start<RTYPE,STORAGE>(x);
+ }
+ MVType get() {return MVType(d_start, d_size);}
+ protected:
+ const int d_size;
+ T* d_start;
+ };
+
+ template<typename T>
class Exporter<Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> > > {
public:
typedef typename Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> > MMType;
@@ -178,6 +195,28 @@
T* d_start;
};
+ template<typename T>
+ class Exporter<Eigen::Map<Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic> > > {
+ public:
+ typedef typename Eigen::Map<Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic> > MAType;
+ Exporter(SEXP x) : d_nrow(::Rf_length(x)), d_ncol(1) {
+ const int RTYPE = ::Rcpp::traits::r_sexptype_traits<T>::rtype ;
+ if (TYPEOF(x) != RTYPE)
+ throw std::invalid_argument("Wrong R type for mapped vector");
+ typedef typename ::Rcpp::traits::storage_type<RTYPE>::type STORAGE;
+ d_start = ::Rcpp::internal::r_vector_start<RTYPE,STORAGE>(x);
+ if (::Rf_isMatrix(x)) {
+ int *dims = INTEGER(::Rf_getAttrib(x, R_DimSymbol));
+ d_nrow = dims[0];
+ d_ncol = dims[1];
+ }
+ }
+ MAType get() {return MMType(d_start, d_nrow, d_ncol);}
+ protected:
+ int d_nrow, d_ncol;
+ T* d_start;
+ };
+
template <typename T>
class Exporter<Eigen::Matrix<T, Eigen::Dynamic, 1> >
: public IndexingExporter<Eigen::Matrix<T, Eigen::Dynamic, 1>, T> {
@@ -186,6 +225,13 @@
};
template <typename T>
+ class Exporter<Eigen::Array<T, Eigen::Dynamic, 1> >
+ : public IndexingExporter<Eigen::Array<T, Eigen::Dynamic, 1>, T> {
+ public:
+ Exporter(SEXP x) : IndexingExporter<Eigen::Array<T, Eigen::Dynamic, 1>, T >(x){}
+ };
+
+ template <typename T>
class Exporter< Eigen::Matrix<T, 1, Eigen::Dynamic> >
: public IndexingExporter< Eigen::Matrix<T, 1, Eigen::Dynamic>, T > {
public:
@@ -200,6 +246,14 @@
MatrixExporter< Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>, T >(x){}
};
+ template <typename T>
+ class Exporter< Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic> >
+ : public MatrixExporter< Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic>, T > {
+ public:
+ Exporter(SEXP x) :
+ MatrixExporter< Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic>, T >(x){}
+ };
+
template<typename T>
class Exporter<Eigen::MappedSparseMatrix<T> > {
public:
More information about the Rcpp-commits
mailing list