[Rcpp-commits] r1642 - in pkg/Rcpp/inst/include/Rcpp/sugar: . logical

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Mon Jun 21 14:43:08 CEST 2010


Author: romain
Date: 2010-06-21 14:43:08 +0200 (Mon, 21 Jun 2010)
New Revision: 1642

Added:
   pkg/Rcpp/inst/include/Rcpp/sugar/logical/SingleLogicalResult.h
   pkg/Rcpp/inst/include/Rcpp/sugar/logical/can_have_na.h
   pkg/Rcpp/inst/include/Rcpp/sugar/logical/logical.h
Removed:
   pkg/Rcpp/inst/include/Rcpp/sugar/SingleLogicalResult.h
   pkg/Rcpp/inst/include/Rcpp/sugar/can_have_na.h
Modified:
   pkg/Rcpp/inst/include/Rcpp/sugar/sugar_forward.h
Log:
moving things around

Deleted: pkg/Rcpp/inst/include/Rcpp/sugar/SingleLogicalResult.h
===================================================================
--- pkg/Rcpp/inst/include/Rcpp/sugar/SingleLogicalResult.h	2010-06-21 12:40:15 UTC (rev 1641)
+++ pkg/Rcpp/inst/include/Rcpp/sugar/SingleLogicalResult.h	2010-06-21 12:43:08 UTC (rev 1642)
@@ -1,285 +0,0 @@
-// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
-//
-// SingleLogicalResult.h: Rcpp R/C++ interface class library -- 
-//
-// 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/>.
-
-#ifndef Rcpp__sugar__SingleLogicalResult_h
-#define Rcpp__sugar__SingleLogicalResult_h
-
-namespace Rcpp{
-namespace sugar{  
-
-template <bool> 
-class forbidden_conversion ;
-
-template <> 
-class forbidden_conversion<true>{} ;
-
-template <bool x>
-class conversion_to_bool_is_forbidden : 
-	conversion_to_bool_is_forbidden<x>{
-	public:
-		void touch(){}
-}; 
-
-template <bool NA,typename T>
-class SingleLogicalResult {
-public:
-	const static int UNRESOLVED = -5 ;
-	
-	SingleLogicalResult() : result(UNRESOLVED) {} ;
-	
-	void apply(){
-		if( result == UNRESOLVED ){
-			static_cast<T&>(*this).apply() ;
-		}
-	}
-	
-	inline bool is_true(){
-		apply() ;
-		return result == TRUE ;
-	}
-	
-	inline bool is_false(){
-		apply() ;
-		return result == FALSE ;
-	}
-	
-	inline bool is_na(){
-		apply() ;
-		return Rcpp::traits::is_na<LGLSXP>( result ) ;
-	}
-	
-	operator SEXP(){
-		apply() ;
-		return Rf_ScalarLogical( result ) ;
-	}
-	
-	operator bool(){
-		conversion_to_bool_is_forbidden<!NA> x ;
-		x.touch() ;
-		return is_true() ;
-	}
-	
-	inline int size(){ return 1 ; }
-	
-	inline int get(){
-		apply();
-		return result;
-	}
-	
-protected:
-	int result ;
-	inline void set(int x){ result = x ;}
-	inline void reset(){ set(UNRESOLVED) ; }
-	inline void set_true(){ set(TRUE); }
-	inline void set_false(){ set(FALSE); }
-	inline void set_na(){ set(NA_LOGICAL); }
-	inline bool is_unresolved(){ return result == UNRESOLVED ; }
-} ;
-
-template <bool NA> struct negate{
-	static inline int apply( int x ){
-		return Rcpp::traits::is_na<LGLSXP>( x ) ? x : 
-			( x ? FALSE : TRUE ) ;
-	}
-} ;
-template<> struct negate<false>{
-	static inline int apply( int x){
-		return x ? FALSE : TRUE ;
-	} ;
-} ;
-
-
-template <bool NA, typename T>
-class Negate_SingleLogicalResult : public SingleLogicalResult<NA, Negate_SingleLogicalResult<NA,T> >{
-public:
-	typedef SingleLogicalResult<NA,T> TYPE ;
-	typedef SingleLogicalResult<NA, Negate_SingleLogicalResult<NA,T> > BASE ;
-	Negate_SingleLogicalResult( const TYPE& orig_ ) : orig(orig_) {}
-	
-	inline void apply(){
-		BASE::set( negate<NA>::apply( orig.get() ) );
-	}
-	
-private:
-	const TYPE& orig ;
-	
-} ;
-
-template <bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T>
-class And_SingleLogicalResult_SingleLogicalResult : 
-public SingleLogicalResult< 
-	(LHS_NA || RHS_NA) , 
-	And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,RHS_NA,RHS_T>
-	>
-{
-public: 
-	typedef SingleLogicalResult<LHS_NA,LHS_T> LHS_TYPE ;
-	typedef SingleLogicalResult<RHS_NA,RHS_T> RHS_TYPE ;
-	typedef SingleLogicalResult< 
-		(LHS_NA || RHS_NA) , 
-		And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,RHS_NA,RHS_T>
-	> BASE ;
-	
-	And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) :
-		lhs(lhs_), rhs(rhs_){} ;
-	
-	inline void apply(){
-		int left = lhs.get() ;
-		if( Rcpp::traits::is_na<LGLSXP>( left ) ){
-			BASE::set( left ) ;
-		} else if( left == FALSE ){
-			BASE::set( FALSE ) ;
-		} else {
-			BASE::set( rhs.get() ) ;
-		}
-	}
-		
-private:
-	const LHS_TYPE& lhs ;
-	const RHS_TYPE& rhs ;
-	
-} ;
-
-// special version when we know the rhs is not NA     
-template <bool LHS_NA, typename LHS_T, typename RHS_T>
-class And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,false,RHS_T> : 
-public SingleLogicalResult< 
-	LHS_NA , 
-	And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,false,RHS_T>
-	>
-{
-public: 
-	typedef SingleLogicalResult<LHS_NA,LHS_T> LHS_TYPE ;
-	typedef SingleLogicalResult<false,RHS_T> RHS_TYPE ;
-	typedef SingleLogicalResult< 
-		LHS_NA, 
-		And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,false,RHS_T>
-	> BASE ;
-	
-	And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) :
-		lhs(lhs_), rhs(rhs_){} ;
-	
-	inline void apply(){
-		// here we know rhs does not have NA, so we start with the rhs
-		int right = rhs.get() ;
-		if( right == FALSE ){
-			BASE::set( FALSE ) ;
-		} else {
-			BASE::set( lhs.get() ) ;
-		}
-	}
-		
-private:
-	const LHS_TYPE& lhs ;
-	const RHS_TYPE& rhs ;
-	
-} ;
-
-
-// special version when we know the lhs is not NA     
-template <typename LHS_T, bool RHS_NA, typename RHS_T>
-class And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,RHS_NA,RHS_T> : 
-public SingleLogicalResult< 
-	RHS_NA , 
-	And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,RHS_NA,RHS_T>
-	>
-{
-public: 
-	typedef SingleLogicalResult<false,LHS_T> LHS_TYPE ;
-	typedef SingleLogicalResult<RHS_NA,RHS_T> RHS_TYPE ;
-	typedef SingleLogicalResult< 
-		RHS_NA, 
-		And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,RHS_NA,RHS_T>
-	> BASE ;
-	
-	And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) :
-		lhs(lhs_), rhs(rhs_){} ;
-	
-	inline void apply(){
-		// here we know lhs does not have NA, so we start with the rhs
-		int left = lhs.get() ;
-		if( left == FALSE ){
-			BASE::set( FALSE ) ;
-		} else {
-			BASE::set( rhs.get() ) ;
-		}
-	}
-		
-private:
-	const LHS_TYPE& lhs ;
-	const RHS_TYPE& rhs ;
-	
-} ;
-
-// special version when we know both the lhs and the rhs are not NA     
-template <typename LHS_T, typename RHS_T>
-class And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,false,RHS_T> : 
-public SingleLogicalResult< 
-	false , 
-	And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,false,RHS_T>
-	>
-{
-public: 
-	typedef SingleLogicalResult<false,LHS_T> LHS_TYPE ;
-	typedef SingleLogicalResult<false,RHS_T> RHS_TYPE ;
-	typedef SingleLogicalResult< 
-		false, 
-		And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,false,RHS_T>
-	> BASE ;
-	
-	And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) :
-		lhs(lhs_), rhs(rhs_){} ;
-	
-	inline void apply(){
-		int left = lhs.get() ;
-		if( left == FALSE ){
-			BASE::set( FALSE ) ;
-		} else {
-			BASE::set( rhs.get() ) ;
-		}
-	}
-		
-private:
-	const LHS_TYPE& lhs ;
-	const RHS_TYPE& rhs ;
-	
-} ;
-
-}
-}
-
-template <bool NA,typename T>
-inline Rcpp::sugar::Negate_SingleLogicalResult<NA,T> 
-operator!( const Rcpp::sugar::SingleLogicalResult<NA,T>& x){
-	return Rcpp::sugar::Negate_SingleLogicalResult<NA,T>( x );
-}
-
-template <bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T>
-inline Rcpp::sugar::And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,RHS_NA,RHS_T>
-operator&&( 
-	const Rcpp::sugar::SingleLogicalResult<LHS_NA,LHS_T>& lhs, 
-	const Rcpp::sugar::SingleLogicalResult<LHS_NA,LHS_T>& rhs
-){
-	return Rcpp::sugar::And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,RHS_NA,RHS_T>( lhs, rhs ) ;
-}
-
-
-#endif

Deleted: pkg/Rcpp/inst/include/Rcpp/sugar/can_have_na.h
===================================================================
--- pkg/Rcpp/inst/include/Rcpp/sugar/can_have_na.h	2010-06-21 12:40:15 UTC (rev 1641)
+++ pkg/Rcpp/inst/include/Rcpp/sugar/can_have_na.h	2010-06-21 12:43:08 UTC (rev 1642)
@@ -1,32 +0,0 @@
-// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
-//
-// can_have_na.h: Rcpp R/C++ interface class library -- 
-//
-// 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/>.
-
-#ifndef Rcpp__sugar__can_have_na_h
-#define Rcpp__sugar__can_have_na_h
-
-namespace Rcpp{
-
-template <typename T>
-struct can_have_na :  T::can_have_na::type {} ;
-
-} // Rcpp
-#endif
-

Copied: pkg/Rcpp/inst/include/Rcpp/sugar/logical/SingleLogicalResult.h (from rev 1641, pkg/Rcpp/inst/include/Rcpp/sugar/SingleLogicalResult.h)
===================================================================
--- pkg/Rcpp/inst/include/Rcpp/sugar/logical/SingleLogicalResult.h	                        (rev 0)
+++ pkg/Rcpp/inst/include/Rcpp/sugar/logical/SingleLogicalResult.h	2010-06-21 12:43:08 UTC (rev 1642)
@@ -0,0 +1,285 @@
+// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
+//
+// SingleLogicalResult.h: Rcpp R/C++ interface class library -- 
+//
+// 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/>.
+
+#ifndef Rcpp__sugar__SingleLogicalResult_h
+#define Rcpp__sugar__SingleLogicalResult_h
+
+namespace Rcpp{
+namespace sugar{  
+
+template <bool> 
+class forbidden_conversion ;
+
+template <> 
+class forbidden_conversion<true>{} ;
+
+template <bool x>
+class conversion_to_bool_is_forbidden : 
+	conversion_to_bool_is_forbidden<x>{
+	public:
+		void touch(){}
+}; 
+
+template <bool NA,typename T>
+class SingleLogicalResult {
+public:
+	const static int UNRESOLVED = -5 ;
+	
+	SingleLogicalResult() : result(UNRESOLVED) {} ;
+	
+	void apply(){
+		if( result == UNRESOLVED ){
+			static_cast<T&>(*this).apply() ;
+		}
+	}
+	
+	inline bool is_true(){
+		apply() ;
+		return result == TRUE ;
+	}
+	
+	inline bool is_false(){
+		apply() ;
+		return result == FALSE ;
+	}
+	
+	inline bool is_na(){
+		apply() ;
+		return Rcpp::traits::is_na<LGLSXP>( result ) ;
+	}
+	
+	operator SEXP(){
+		apply() ;
+		return Rf_ScalarLogical( result ) ;
+	}
+	
+	operator bool(){
+		conversion_to_bool_is_forbidden<!NA> x ;
+		x.touch() ;
+		return is_true() ;
+	}
+	
+	inline int size(){ return 1 ; }
+	
+	inline int get(){
+		apply();
+		return result;
+	}
+	
+protected:
+	int result ;
+	inline void set(int x){ result = x ;}
+	inline void reset(){ set(UNRESOLVED) ; }
+	inline void set_true(){ set(TRUE); }
+	inline void set_false(){ set(FALSE); }
+	inline void set_na(){ set(NA_LOGICAL); }
+	inline bool is_unresolved(){ return result == UNRESOLVED ; }
+} ;
+
+template <bool NA> struct negate{
+	static inline int apply( int x ){
+		return Rcpp::traits::is_na<LGLSXP>( x ) ? x : 
+			( x ? FALSE : TRUE ) ;
+	}
+} ;
+template<> struct negate<false>{
+	static inline int apply( int x){
+		return x ? FALSE : TRUE ;
+	} ;
+} ;
+
+
+template <bool NA, typename T>
+class Negate_SingleLogicalResult : public SingleLogicalResult<NA, Negate_SingleLogicalResult<NA,T> >{
+public:
+	typedef SingleLogicalResult<NA,T> TYPE ;
+	typedef SingleLogicalResult<NA, Negate_SingleLogicalResult<NA,T> > BASE ;
+	Negate_SingleLogicalResult( const TYPE& orig_ ) : orig(orig_) {}
+	
+	inline void apply(){
+		BASE::set( negate<NA>::apply( orig.get() ) );
+	}
+	
+private:
+	const TYPE& orig ;
+	
+} ;
+
+template <bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T>
+class And_SingleLogicalResult_SingleLogicalResult : 
+public SingleLogicalResult< 
+	(LHS_NA || RHS_NA) , 
+	And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,RHS_NA,RHS_T>
+	>
+{
+public: 
+	typedef SingleLogicalResult<LHS_NA,LHS_T> LHS_TYPE ;
+	typedef SingleLogicalResult<RHS_NA,RHS_T> RHS_TYPE ;
+	typedef SingleLogicalResult< 
+		(LHS_NA || RHS_NA) , 
+		And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,RHS_NA,RHS_T>
+	> BASE ;
+	
+	And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) :
+		lhs(lhs_), rhs(rhs_){} ;
+	
+	inline void apply(){
+		int left = lhs.get() ;
+		if( Rcpp::traits::is_na<LGLSXP>( left ) ){
+			BASE::set( left ) ;
+		} else if( left == FALSE ){
+			BASE::set( FALSE ) ;
+		} else {
+			BASE::set( rhs.get() ) ;
+		}
+	}
+		
+private:
+	const LHS_TYPE& lhs ;
+	const RHS_TYPE& rhs ;
+	
+} ;
+
+// special version when we know the rhs is not NA     
+template <bool LHS_NA, typename LHS_T, typename RHS_T>
+class And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,false,RHS_T> : 
+public SingleLogicalResult< 
+	LHS_NA , 
+	And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,false,RHS_T>
+	>
+{
+public: 
+	typedef SingleLogicalResult<LHS_NA,LHS_T> LHS_TYPE ;
+	typedef SingleLogicalResult<false,RHS_T> RHS_TYPE ;
+	typedef SingleLogicalResult< 
+		LHS_NA, 
+		And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,false,RHS_T>
+	> BASE ;
+	
+	And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) :
+		lhs(lhs_), rhs(rhs_){} ;
+	
+	inline void apply(){
+		// here we know rhs does not have NA, so we start with the rhs
+		int right = rhs.get() ;
+		if( right == FALSE ){
+			BASE::set( FALSE ) ;
+		} else {
+			BASE::set( lhs.get() ) ;
+		}
+	}
+		
+private:
+	const LHS_TYPE& lhs ;
+	const RHS_TYPE& rhs ;
+	
+} ;
+
+
+// special version when we know the lhs is not NA     
+template <typename LHS_T, bool RHS_NA, typename RHS_T>
+class And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,RHS_NA,RHS_T> : 
+public SingleLogicalResult< 
+	RHS_NA , 
+	And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,RHS_NA,RHS_T>
+	>
+{
+public: 
+	typedef SingleLogicalResult<false,LHS_T> LHS_TYPE ;
+	typedef SingleLogicalResult<RHS_NA,RHS_T> RHS_TYPE ;
+	typedef SingleLogicalResult< 
+		RHS_NA, 
+		And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,RHS_NA,RHS_T>
+	> BASE ;
+	
+	And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) :
+		lhs(lhs_), rhs(rhs_){} ;
+	
+	inline void apply(){
+		// here we know lhs does not have NA, so we start with the rhs
+		int left = lhs.get() ;
+		if( left == FALSE ){
+			BASE::set( FALSE ) ;
+		} else {
+			BASE::set( rhs.get() ) ;
+		}
+	}
+		
+private:
+	const LHS_TYPE& lhs ;
+	const RHS_TYPE& rhs ;
+	
+} ;
+
+// special version when we know both the lhs and the rhs are not NA     
+template <typename LHS_T, typename RHS_T>
+class And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,false,RHS_T> : 
+public SingleLogicalResult< 
+	false , 
+	And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,false,RHS_T>
+	>
+{
+public: 
+	typedef SingleLogicalResult<false,LHS_T> LHS_TYPE ;
+	typedef SingleLogicalResult<false,RHS_T> RHS_TYPE ;
+	typedef SingleLogicalResult< 
+		false, 
+		And_SingleLogicalResult_SingleLogicalResult<false,LHS_T,false,RHS_T>
+	> BASE ;
+	
+	And_SingleLogicalResult_SingleLogicalResult( const LHS_TYPE& lhs_, const RHS_TYPE& rhs_) :
+		lhs(lhs_), rhs(rhs_){} ;
+	
+	inline void apply(){
+		int left = lhs.get() ;
+		if( left == FALSE ){
+			BASE::set( FALSE ) ;
+		} else {
+			BASE::set( rhs.get() ) ;
+		}
+	}
+		
+private:
+	const LHS_TYPE& lhs ;
+	const RHS_TYPE& rhs ;
+	
+} ;
+
+}
+}
+
+template <bool NA,typename T>
+inline Rcpp::sugar::Negate_SingleLogicalResult<NA,T> 
+operator!( const Rcpp::sugar::SingleLogicalResult<NA,T>& x){
+	return Rcpp::sugar::Negate_SingleLogicalResult<NA,T>( x );
+}
+
+template <bool LHS_NA, typename LHS_T, bool RHS_NA, typename RHS_T>
+inline Rcpp::sugar::And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,RHS_NA,RHS_T>
+operator&&( 
+	const Rcpp::sugar::SingleLogicalResult<LHS_NA,LHS_T>& lhs, 
+	const Rcpp::sugar::SingleLogicalResult<LHS_NA,LHS_T>& rhs
+){
+	return Rcpp::sugar::And_SingleLogicalResult_SingleLogicalResult<LHS_NA,LHS_T,RHS_NA,RHS_T>( lhs, rhs ) ;
+}
+
+
+#endif

Copied: pkg/Rcpp/inst/include/Rcpp/sugar/logical/can_have_na.h (from rev 1639, pkg/Rcpp/inst/include/Rcpp/sugar/can_have_na.h)
===================================================================
--- pkg/Rcpp/inst/include/Rcpp/sugar/logical/can_have_na.h	                        (rev 0)
+++ pkg/Rcpp/inst/include/Rcpp/sugar/logical/can_have_na.h	2010-06-21 12:43:08 UTC (rev 1642)
@@ -0,0 +1,32 @@
+// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
+//
+// can_have_na.h: Rcpp R/C++ interface class library -- 
+//
+// 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/>.
+
+#ifndef Rcpp__sugar__can_have_na_h
+#define Rcpp__sugar__can_have_na_h
+
+namespace Rcpp{
+
+template <typename T>
+struct can_have_na :  T::can_have_na::type {} ;
+
+} // Rcpp
+#endif
+

Added: pkg/Rcpp/inst/include/Rcpp/sugar/logical/logical.h
===================================================================
--- pkg/Rcpp/inst/include/Rcpp/sugar/logical/logical.h	                        (rev 0)
+++ pkg/Rcpp/inst/include/Rcpp/sugar/logical/logical.h	2010-06-21 12:43:08 UTC (rev 1642)
@@ -0,0 +1,27 @@
+// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
+//
+// sugar_forward.h: Rcpp R/C++ interface class library -- forward declaration for Rcpp::sugar
+//
+// 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/>.
+
+#ifndef RCPP_SUGAR_LOGICAL_H
+#define RCPP_SUGAR_LOGICAL_H
+
+#include <Rcpp/sugar/logical/SingleLogicalResult.h>
+
+#endif

Modified: pkg/Rcpp/inst/include/Rcpp/sugar/sugar_forward.h
===================================================================
--- pkg/Rcpp/inst/include/Rcpp/sugar/sugar_forward.h	2010-06-21 12:40:15 UTC (rev 1641)
+++ pkg/Rcpp/inst/include/Rcpp/sugar/sugar_forward.h	2010-06-21 12:43:08 UTC (rev 1642)
@@ -24,9 +24,8 @@
 
 // traits
 #include <Rcpp/sugar/operators/r_binary_op.h>
-#include <Rcpp/sugar/can_have_na.h>
 
 // abstractions
-#include <Rcpp/sugar/logical/SingleLogicalResult.h>
+#include <Rcpp/sugar/logical/logical.h>
 
 #endif



More information about the Rcpp-commits mailing list