[Rcpp-commits] r1041 - pkg/Rcpp/R

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Wed Apr 14 14:41:14 CEST 2010


Author: romain
Date: 2010-04-14 14:41:13 +0200 (Wed, 14 Apr 2010)
New Revision: 1041

Added:
   pkg/Rcpp/R/cpp_function.R
Log:
cpp_function which calls inline::cfunction but replaces .Call by Rcpp::.Cpp

Added: pkg/Rcpp/R/cpp_function.R
===================================================================
--- pkg/Rcpp/R/cpp_function.R	                        (rev 0)
+++ pkg/Rcpp/R/cpp_function.R	2010-04-14 12:41:13 UTC (rev 1041)
@@ -0,0 +1,38 @@
+# Copyright (C) 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/>.
+
+cpp_function <- function(..., .Cpp = TRUE){
+	ok <- FALSE
+	if( "package:inline" %in% search() ){
+		ok <- TRUE
+	} else{
+		ok <- tryCatch( {
+			require( "inline" )
+			TRUE 
+		} , error = function(e) FALSE )
+	}
+	if( ! ok ){
+		stop( "package inline is not available" )	
+	}
+	cfunction <- get( "cfunction", asNamespace( "inline" ) )
+	fx <- cfunction( ... )
+	if( isTRUE( .Cpp ) ){
+		# replace .Call by Rcpp::.Cpp
+		body( fx at .Data )[[4]][[1]] <- call( "::", as.name("Rcpp"), as.name(".Cpp") )
+	}
+	fx
+}



More information about the Rcpp-commits mailing list