[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