[Rcpp-commits] r221 - in pkg: inst src

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Tue Dec 29 11:05:08 CET 2009


Author: romain
Date: 2009-12-29 11:05:07 +0100 (Tue, 29 Dec 2009)
New Revision: 221

Modified:
   pkg/inst/ChangeLog
   pkg/src/RcppSexp.cpp
   pkg/src/RcppSexp.h
   pkg/src/RcppXPtr.h
Log:
added operator SEXP()

Modified: pkg/inst/ChangeLog
===================================================================
--- pkg/inst/ChangeLog	2009-12-29 09:30:12 UTC (rev 220)
+++ pkg/inst/ChangeLog	2009-12-29 10:05:07 UTC (rev 221)
@@ -1,5 +1,15 @@
 2009-12-29  Romain Francois <francoisromain at free.fr>
 
+	* src/RcppXPtr.h: added operator SEXP() to class
+	RcppXPtr to ease implicit conversion from RcppXPtr to SEXP.
+	This means we can directly return the RcppXPtr object to R when the 
+	return type of the function is SEXP. (no need to explicitely call 
+	asSexp anymore)
+	
+	* src/RcppSexp.{h,cpp} : idem
+	
+2009-12-29  Romain Francois <francoisromain at free.fr>
+
 	* src/RcppXPtr.h: new smart external pointer wrapper. The RcppXPtr 
 	template can be used to wrap a external pointer (SEXP) so that it 
 	looks like the dumb pointer it is wrapping (as far as the * and -> 

Modified: pkg/src/RcppSexp.cpp
===================================================================
--- pkg/src/RcppSexp.cpp	2009-12-29 09:30:12 UTC (rev 220)
+++ pkg/src/RcppSexp.cpp	2009-12-29 10:05:07 UTC (rev 221)
@@ -376,3 +376,7 @@
 	return m_sexp == R_NilValue ;
 }
 
+RcppSexp::operator SEXP() const{
+	return m_sexp ;
+}
+

Modified: pkg/src/RcppSexp.h
===================================================================
--- pkg/src/RcppSexp.h	2009-12-29 09:30:12 UTC (rev 220)
+++ pkg/src/RcppSexp.h	2009-12-29 10:05:07 UTC (rev 221)
@@ -48,7 +48,12 @@
     RcppSexp(const std::set<Rbyte> & v);
     
     ~RcppSexp();
-
+    
+    /**
+     * implicit conversion to SEXP
+     */
+    operator SEXP() const ;
+    
     bool                     asBool() const;
     double                   asDouble() const;
     int                      asInt() const;

Modified: pkg/src/RcppXPtr.h
===================================================================
--- pkg/src/RcppXPtr.h	2009-12-29 09:30:12 UTC (rev 220)
+++ pkg/src/RcppXPtr.h	2009-12-29 10:05:07 UTC (rev 221)
@@ -106,6 +106,12 @@
   		 */
   		SEXP asSexp();
     	
+  		/**
+   	     * implicit conversion to SEXP. So that we can return these 
+   	     * objects to the R side directly
+   	     */
+   	    operator SEXP() const ;
+   	    
   	private:
   		
   		/**
@@ -176,4 +182,9 @@
 	return m_sexp ;
 }
 
+template<typename T>
+RcppXPtr<T>::operator SEXP() const {
+	return m_sexp ;
+}
+
 #endif



More information about the Rcpp-commits mailing list