[Rcpp-commits] r254 - pkg/src

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Sat Jan 2 10:04:06 CET 2010


Author: romain
Date: 2010-01-02 10:04:06 +0100 (Sat, 02 Jan 2010)
New Revision: 254

Added:
   pkg/src/RcppSexp.h
Log:
bring back RcppSexp (as a deprecated class) 

Added: pkg/src/RcppSexp.h
===================================================================
--- pkg/src/RcppSexp.h	                        (rev 0)
+++ pkg/src/RcppSexp.h	2010-01-02 09:04:06 UTC (rev 254)
@@ -0,0 +1,142 @@
+// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
+//
+// RcppSexp.h: Rcpp R/C++ interface class library -- SEXP support
+//
+// Copyright (C) 2009 - 2010	Dirk Eddelbuettel and Romain Francois
+//
+// This file is part of Rcpp.
+//
+// Rcpp is free software: you can redistribute it and/or modify it
+// under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 2 of the License, or
+// (at your option) any later version.
+//
+// Rcpp is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Rcpp.  If not, see <http://www.gnu.org/licenses/>.
+
+#ifndef RcppSexp_h
+#define RcppSexp_h
+
+#include <RcppCommon.h>
+#include <set>
+
+/**
+ * This class is DEPRECATED, will be DEFUNCT in a next version and 
+ * eventually removed from Rcpp. 
+ *
+ * The alternative is to use the Rcpp::RObject class and the set of functions
+ * Rcpp::wrap. 
+ */
+class RcppSexp {
+public:
+	
+    /**
+     * wraps the SEXP into an Rcpp::RObject. The RObject does not 
+     * automatically enforce protection of the SEXP, so if you want to 
+     * preserve the SEXP from R garbage collection, you must call the 
+     * protect member function
+     */
+    RcppSexp(SEXP m_sexp = R_NilValue) : object( Rcpp::wrap(m_sexp) ) {
+    	    DEPRECATED() ; 
+    };
+    
+    ~RcppSexp() ;
+	
+    RcppSexp(const double & v) : object( Rcpp::wrap( v ) ) { DEPRECATED() ; } ;
+    RcppSexp(const int & v): object( Rcpp::wrap(v) ){ DEPRECATED() ; } ;
+    RcppSexp(const Rbyte & v) : object( Rcpp::wrap(v) ){ DEPRECATED() ;} ;
+    RcppSexp(const std::string & v) : object( Rcpp::wrap(v) ){ DEPRECATED() ;} ;
+    RcppSexp(const bool & v) : object( Rcpp::wrap(v) ){ DEPRECATED() ; };
+    
+    RcppSexp(const std::vector<int> & v): object( Rcpp::wrap(v) ){ DEPRECATED() ; };
+    RcppSexp(const std::vector<double> & v): object( Rcpp::wrap(v) ){ DEPRECATED() ; };
+    RcppSexp(const std::vector<std::string> & v): object( Rcpp::wrap(v) ){ DEPRECATED() ;};
+    RcppSexp(const std::vector<Rbyte> & v): object( Rcpp::wrap(v) ){ DEPRECATED() ;};
+    RcppSexp(const std::vector<bool> & v): object( Rcpp::wrap(v) ){ DEPRECATED() ;};
+    
+    RcppSexp(const std::set<int> & v): object( Rcpp::wrap(v) ){ DEPRECATED() ;};
+    RcppSexp(const std::set<double> & v): object( Rcpp::wrap(v) ){ DEPRECATED() ; };
+    RcppSexp(const std::set<std::string> & v): object( Rcpp::wrap(v) ){ DEPRECATED() ; };
+    RcppSexp(const std::set<Rbyte> & v): object( Rcpp::wrap(v) ){ DEPRECATED() ; };
+    
+    
+    /* we don't provide implicit converters because 
+       of Item 5 in More Effective C++ */
+       inline bool                     asBool() const  {return object.asBool() ; } ;
+       inline double                   asDouble() const   { return object.asDouble() ; }
+       inline int                      asInt() const { return object.asInt() ; }
+       inline Rbyte                    asRaw() const { return object.asRaw() ; }
+       inline std::string              asStdString() const { return object.asStdString() ; }
+       inline std::vector<int>         asStdVectorInt() const { return object.asStdVectorInt() ; }
+       inline std::vector<double>      asStdVectorDouble() const { return object.asStdVectorDouble(); }
+       inline std::vector<std::string> asStdVectorString() const { return object.asStdVectorString(); }
+       inline std::vector<Rbyte>       asStdVectorRaw() const { return object.asStdVectorRaw() ;}
+       inline std::vector<bool>        asStdVectorBool() const { return object.asStdVectorBool() ; }
+    
+    
+    	/**
+	 * Calls the preserve method of the wrapped RObject, which 
+	 * prevents the underlying SEXP from being garbage collected
+	 */
+	inline void protect(){ object.preserve() ; } 
+	
+	/**
+	 * calls the release method of the RObject. the underlying SEXP
+	 * becomes subject of garbage collection
+	 */
+	inline void release() { object.release() };
+	
+	/**
+	 * implicit conversion to SEXP
+	 */
+	inline operator SEXP() const { return object.asSexp() ; }
+	
+	
+	/* attributes */
+	
+	/**
+	 * extracts the names of the attributes of the wrapped SEXP
+	 */
+	inline std::vector<std::string> attributeNames() const { return object.attributeNames() };
+    
+    	/**
+    	 * Identifies if the SEXP has the given attribute
+    	 */
+    	 inline bool hasAttribute( const std::string& attr) const { return object.hasAttribute( attr ) }; 
+    
+	/**
+	 * extract the given attribute
+	 */
+	inline SEXP attr( const std::string& name) const { return object.attr( name) ; } ;
+    
+	/**
+	 * is this object NULL
+	 */
+	inline bool isNULL() const{ return object.isNULL() ; }
+    
+	/**
+	 * The SEXP typeof, calls TYPEOF on the underlying SEXP
+	 */
+	 inline int sexp_type() const {  return object.sexp_type()  ; }
+    
+	/** 
+	 * explicit conversion to SEXP
+	 */
+	inline SEXP asSexp() const {  return object.asSexp() ; }
+	
+protected:
+	
+	/**
+	 * The RObject this wraps
+	 */
+	Rcpp::RObject object ;
+	
+	void DEPRECATED(){ Rf_warning( "The class RcppSexp is deprecated, and will eventually be removed, please consider using Rcpp::RObject instead" ) ; }
+};
+
+#endif



More information about the Rcpp-commits mailing list