[Rcpp-commits] r3122 - pkg/RcppEigen/inst/include

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Fri Jul 8 23:29:07 CEST 2011


Author: dmbates
Date: 2011-07-08 23:29:07 +0200 (Fri, 08 Jul 2011)
New Revision: 3122

Modified:
   pkg/RcppEigen/inst/include/RcppEigen.h
   pkg/RcppEigen/inst/include/RcppEigenForward.h
   pkg/RcppEigen/inst/include/RcppEigenWrap.h
Log:
Add wrap methods for mapped Eigen objects; Initial support for as<> with some Eigen classes.


Modified: pkg/RcppEigen/inst/include/RcppEigen.h
===================================================================
--- pkg/RcppEigen/inst/include/RcppEigen.h	2011-07-08 21:27:49 UTC (rev 3121)
+++ pkg/RcppEigen/inst/include/RcppEigen.h	2011-07-08 21:29:07 UTC (rev 3122)
@@ -27,7 +27,7 @@
 #include <Rcpp.h>
 #include <RcppEigenWrap.h>
 
-#include <Eigen/Dense>
-#include <unsupported/Eigen/SparseExtra> // also includes Eigen/Sparse
+//#include <Eigen/Dense>
+//#include <unsupported/Eigen/SparseExtra> // also includes Eigen/Sparse
 
 #endif

Modified: pkg/RcppEigen/inst/include/RcppEigenForward.h
===================================================================
--- pkg/RcppEigen/inst/include/RcppEigenForward.h	2011-07-08 21:27:49 UTC (rev 3121)
+++ pkg/RcppEigen/inst/include/RcppEigenForward.h	2011-07-08 21:29:07 UTC (rev 3122)
@@ -25,19 +25,26 @@
 #include <RcppCommon.h>
 #include <Rconfig.h>
 #include <RcppEigenConfig.h>
+
 #include <Eigen/Dense>
-#include <Eigen/Sparse>
+#include <unsupported/Eigen/SparseExtra> // also includes Eigen/Sparse
+
 /* forward declarations */
 namespace Rcpp {
     /* support for wrap */
-    template<typename T> SEXP wrap( const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>& ) ;
-    template<typename T> SEXP wrap( const Eigen::Matrix<T, Eigen::Dynamic, 1>& ) ;
-    template<typename T> SEXP wrap( const Eigen::Matrix<T, 1, Eigen::Dynamic>& ) ;
-    template<typename T> SEXP wrap( const Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic>& ) ;
-    template<typename T> SEXP wrap( const Eigen::Array<T, Eigen::Dynamic, 1>& ) ;
-    template<typename T> SEXP wrap( const Eigen::SparseMatrix<T>& ) ;
+    template<typename T> SEXP wrap(const Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>&);
+    template<typename T> SEXP wrap(const Eigen::Matrix<T, Eigen::Dynamic, 1>&);
+    template<typename T> SEXP wrap(const Eigen::Matrix<T, 1, Eigen::Dynamic>&);
+    template<typename T> SEXP wrap(const Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic>&);
+    template<typename T> SEXP wrap(const Eigen::Array<T, Eigen::Dynamic, 1>&);
+    template<typename T> SEXP wrap(const Eigen::SparseMatrix<T>&);
+    template<typename T> SEXP wrap(const Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> >&);
+    template<typename T> SEXP wrap(const Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, 1> >&);
+    template<typename T> SEXP wrap(const Eigen::Map<Eigen::Matrix<T, 1, Eigen::Dynamic> >&);
+    template<typename T> SEXP wrap(const Eigen::Map<Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic> >&);
+    template<typename T> SEXP wrap(const Eigen::Map<Eigen::Array<T, Eigen::Dynamic, 1> >&);
+    template<typename T> SEXP wrap(const Eigen::Map<Eigen::SparseMatrix<T> >&);
     
-#if 0
     namespace traits {
 
 	/* support for as */
@@ -46,7 +53,6 @@
 	template<typename T> class Exporter< Eigen::Matrix<T, 1, Eigen::Dynamic> > ;
 
     } // namespace traits 
-#endif
 
 }
 

Modified: pkg/RcppEigen/inst/include/RcppEigenWrap.h
===================================================================
--- pkg/RcppEigen/inst/include/RcppEigenWrap.h	2011-07-08 21:27:49 UTC (rev 3121)
+++ pkg/RcppEigen/inst/include/RcppEigenWrap.h	2011-07-08 21:29:07 UTC (rev 3122)
@@ -28,7 +28,7 @@
 
 		template <typename T>
 		SEXP Eigen_wrap( const T& object, const ::Rcpp::Dimension& dim){
-			::Rcpp::RObject x = ::Rcpp::wrap( object.data() , object.data() + object.size() ) ;
+			::Rcpp::RObject x = ::Rcpp::wrap(object.data(), object.data() + object.size());
 			x.attr( "dim" ) = dim ;
 			return x; 
 		}
@@ -62,8 +62,33 @@
 		return ::Rcpp::wrap(object.data(), object.data() + object.size());
     }
 
+    template <typename T>
+	SEXP wrap(const Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> >& data) {
+		return RcppEigen::Eigen_wrap(data, Dimension(data.rows(), data.cols()));
+	}
+    
 	template <typename T>
-    SEXP wrap(const Eigen::SparseMatrix<T>& object ) {
+	SEXP wrap(const Eigen::Map<Eigen::Matrix<T, Eigen::Dynamic, 1> >& object ){
+		return ::Rcpp::wrap(object.data(), object.data() + object.size());
+    }
+
+    template <typename T>
+	SEXP wrap(const Eigen::Map<Eigen::Matrix<T, 1, Eigen::Dynamic> >& data ){
+		return RcppEigen::Eigen_wrap(data, Dimension(1, data.size()));
+    }
+
+    template <typename T>
+	SEXP wrap(const Eigen::Map<Eigen::Array<T, Eigen::Dynamic, Eigen::Dynamic> >& data) {
+		return RcppEigen::Eigen_wrap(data, Dimension(data.rows(), data.cols()));
+	}
+    
+	template <typename T>
+	SEXP wrap(const Eigen::Map<Eigen::Array<T, Eigen::Dynamic, 1> >& object ){
+		return ::Rcpp::wrap(object.data(), object.data() + object.size());
+    }
+
+	template <typename T>
+    SEXP wrap(const Eigen::Map<Eigen::SparseMatrix<T> >& object ) {
 		int          nnz = object.nonZeros(), p = object.outerSize();
 		Dimension    dim(object.innerSize(), p);
 		const int    *ip = object._innerIndexPtr(), *pp = object._outerIndexPtr();
@@ -77,16 +102,15 @@
 										 _["x"]   = xv));
 	}
 
-#if 0
     /* support for Rcpp::as */
 	
     namespace traits {
 		
 		template <typename T> 
-		class Exporter< Eigen::Matrix<T, Eigen::Dynamic, 1> >
-			: public IndexingExporter< Eigen::Matrix<T, Eigen::Dynamic, 1>, T > {
+		class Exporter<Eigen::Matrix<T, Eigen::Dynamic, 1> >
+			: public IndexingExporter<Eigen::Matrix<T, Eigen::Dynamic, 1>, T> {
 		public: 
-			Exporter(SEXP x) : IndexingExporter< Eigen::Matrix<T, Eigen::Dynamic, 1>, T >(x){}
+			Exporter(SEXP x) : IndexingExporter<Eigen::Matrix<T, Eigen::Dynamic, 1>, T >(x){}
 		}; 
 		
 		template <typename T> 
@@ -105,8 +129,6 @@
 		}; 
 		
     } // namespace traits
-#endif
 }
 
 #endif
-



More information about the Rcpp-commits mailing list