Rcpp Version 0.9.10
matrix_interface.h
Go to the documentation of this file.
00001 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
00002 /* :tabSize=4:indentSize=4:noTabs=false:folding=explicit:collapseFolds=1: */
00003 //
00004 // matrix_interface.h: Rcpp R/C++ interface class library -- 
00005 //
00006 // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois
00007 //
00008 // This file is part of Rcpp.
00009 //
00010 // Rcpp is free software: you can redistribute it and/or modify it
00011 // under the terms of the GNU General Public License as published by
00012 // the Free Software Foundation, either version 2 of the License, or
00013 // (at your option) any later version.
00014 //
00015 // Rcpp is distributed in the hope that it will be useful, but
00016 // WITHOUT ANY WARRANTY; without even the implied warranty of
00017 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00018 // GNU General Public License for more details.
00019 //
00020 // You should have received a copy of the GNU General Public License
00021 // along with Rcpp.  If not, see <http://www.gnu.org/licenses/>.
00022 
00023 #ifndef Rcpp__traits__matrix_interface_h
00024 #define Rcpp__traits__matrix_interface_h
00025 
00026 // helper trait to disambiguate things that want to be logical vectors
00027 // from containers of int
00028 
00029 namespace Rcpp{
00030 namespace traits{
00031 
00032         template<typename T>
00033         class _has_matrix_interface_helper : __sfinae_types {
00034       template<typename U> struct _Wrap_type { };
00035 
00036       template<typename U>
00037         static __one __test(_Wrap_type<typename U::r_matrix_interface>*);
00038 
00039       template<typename U>
00040         static __two __test(...);
00041 
00042     public:
00043       static const bool value = sizeof(__test<T>(0)) == 1;
00044     };
00045   
00046   template<typename T> struct matrix_interface : 
00047         integral_constant<bool, _has_matrix_interface_helper<T>::value >{ };
00048     
00049     
00050 } 
00051 }
00052 
00053 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Defines