[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