[Rcpp-commits] r224 - in pkg: . inst inst/examples/RcppInline src
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Tue Dec 29 17:10:29 CET 2009
Author: romain
Date: 2009-12-29 17:10:29 +0100 (Tue, 29 Dec 2009)
New Revision: 224
Modified:
pkg/DESCRIPTION
pkg/inst/ChangeLog
pkg/inst/examples/RcppInline/RcppSexpTests.r
pkg/src/RcppSexp.cpp
pkg/src/RcppSexp.h
pkg/src/RcppXPtr.h
pkg/src/exceptions.cpp
Log:
previous commit was too early (i only wanted to commit the file name switch exception_handling.cpp -> exceptions.cpp
Modified: pkg/DESCRIPTION
===================================================================
--- pkg/DESCRIPTION 2009-12-29 15:53:03 UTC (rev 223)
+++ pkg/DESCRIPTION 2009-12-29 16:10:29 UTC (rev 224)
@@ -19,7 +19,7 @@
.
Several examples are included.
Depends: R (>= 2.0.0)
-Suggests: inline (>= 0.3.4)
+Suggests: inline (>= 0.3.4), RUnit
SystemRequirements: None
URL: http://dirk.eddelbuettel.com/code/rcpp.html
License: GPL (>= 2)
Modified: pkg/inst/ChangeLog
===================================================================
--- pkg/inst/ChangeLog 2009-12-29 15:53:03 UTC (rev 223)
+++ pkg/inst/ChangeLog 2009-12-29 16:10:29 UTC (rev 224)
@@ -1,5 +1,14 @@
2009-12-29 Romain Francois <francoisromain at free.fr>
+ * src/RcppXPtr.h: now RcppXPtr extends RcppSexp and RcppSexp manages
+ garbarge collection, attributes, etc ...
+
+ * src/exceptions.cpp: replaces src/exception_handling.cpp
+
+ * DESCRIPTION: now suggesting RUnit.
+
+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
Modified: pkg/inst/examples/RcppInline/RcppSexpTests.r
===================================================================
--- pkg/inst/examples/RcppInline/RcppSexpTests.r 2009-12-29 15:53:03 UTC (rev 223)
+++ pkg/inst/examples/RcppInline/RcppSexpTests.r 2009-12-29 16:10:29 UTC (rev 224)
@@ -204,7 +204,7 @@
ds.insert( 0.0 );
ds.insert( 1.0 );
ds.insert( 0.0 );
-return(RcppSexp( iv ).asSexp()); '
+return(RcppSexp( ds ).asSexp()); '
funx <- cfunction(signature(), foo, Rcpp=TRUE, verbose=FALSE, includes = "#include <set>")
print( res <- funx() )
stopifnot( identical( res, as.numeric(0:1)))
@@ -250,7 +250,7 @@
stopifnot( res )
funx <- cfunction(signature(x="data.frame"), '
-return RcppSexp(x).attr( "row.names" ).asSexp() ;
+return RcppSexp(x).attr( "row.names" ) ;
', Rcpp=TRUE, verbose=FALSE)
res <- funx( iris )
stopifnot( identical(res, 1:150) )
Modified: pkg/src/RcppSexp.cpp
===================================================================
--- pkg/src/RcppSexp.cpp 2009-12-29 15:53:03 UTC (rev 223)
+++ pkg/src/RcppSexp.cpp 2009-12-29 16:10:29 UTC (rev 224)
@@ -22,7 +22,6 @@
#include <RcppSexp.h>
#include <algorithm>
-#include <RcppSuperClass.h>
RcppSexp::RcppSexp(const bool & v) {
logTxt("RcppSexp from bool\n");
@@ -141,6 +140,7 @@
}
RcppSexp::~RcppSexp() {
+ release() ;
logTxt("~RcppSexp");
}
@@ -335,12 +335,6 @@
-
-RcppSexp::~RcppSexp() {
- logTxt( "~RcppSexp" ) ;
- release() ;
-}
-
void RcppSexp::protect(){
if( !isProtected ){
isProtected = true ;
Modified: pkg/src/RcppSexp.h
===================================================================
--- pkg/src/RcppSexp.h 2009-12-29 15:53:03 UTC (rev 223)
+++ pkg/src/RcppSexp.h 2009-12-29 16:10:29 UTC (rev 224)
@@ -24,10 +24,9 @@
#define RcppSexp_h
#include <RcppCommon.h>
-#include <RcppSuperClass.h>
#include <set>
-class RcppSexp: public RcppSuperClass {
+class RcppSexp {
public:
/**
Modified: pkg/src/RcppXPtr.h
===================================================================
--- pkg/src/RcppXPtr.h 2009-12-29 15:53:03 UTC (rev 223)
+++ pkg/src/RcppXPtr.h 2009-12-29 16:10:29 UTC (rev 224)
@@ -35,7 +35,7 @@
}
template <typename T>
-class RcppXPtr : public RcppSuperClass {
+class RcppXPtr : public RcppSexp {
public:
/**
@@ -43,7 +43,7 @@
*
* @param xp external pointer to wrap
*/
- explicit RcppXPtr(SEXP m_sexp) : RcppSuperClass::RcppSuperClass(m_sexp){} ;
+ explicit RcppXPtr(SEXP m_sexp) : RcppSexp::RcppSexp(m_sexp){} ;
/**
* creates a new external pointer wrapping the dumb pointer p.
@@ -89,8 +89,18 @@
};
+
+template <typename T>
+void delete_finalizer(SEXP p) {
+ if( TYPEOF(p) == EXTPTRSXP ){
+ T* ptr = (T*) EXTPTR_PTR(p) ;
+ delete ptr ;
+ }
+}
+
+
template<typename T>
-RcppXPtr<T>::RcppXPtr(T* p, bool set_delete_finalizer = true) : RcppSuperClass::RcppSuperClass() {
+RcppXPtr<T>::RcppXPtr(T* p, bool set_delete_finalizer = true) : RcppSexp::RcppSexp() {
m_sexp = R_MakeExternalPtr( (void*)p , R_NilValue, R_NilValue) ;
if( set_delete_finalizer ){
setDeleteFinalizer() ;
@@ -123,4 +133,5 @@
return EXTPTR_TAG(m_sexp) ;
}
+
#endif
Modified: pkg/src/exceptions.cpp
===================================================================
--- pkg/src/exceptions.cpp 2009-12-29 15:53:03 UTC (rev 223)
+++ pkg/src/exceptions.cpp 2009-12-29 16:10:29 UTC (rev 224)
@@ -1,6 +1,6 @@
// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
//
-// exception_handling.cpp: R/C++ interface class library -- common functions
+// exceptions.cpp: R/C++ interface class library -- common functions
//
// Copyright (C) 2009 - 2010 Romain Francois
//
More information about the Rcpp-commits
mailing list