Rcpp Version 1.0.9
get_return_type.h
Go to the documentation of this file.
1 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*-
2 //
3 // Module_get_return_type.h: Rcpp R/C++ interface class library --
4 //
5 // Copyright (C) 2010 - 2013 Dirk Eddelbuettel and Romain Francois
6 //
7 // This file is part of Rcpp.
8 //
9 // Rcpp is free software: you can redistribute it and/or modify it
10 // under the terms of the GNU General Public License as published by
11 // the Free Software Foundation, either version 2 of the License, or
12 // (at your option) any later version.
13 //
14 // Rcpp is distributed in the hope that it will be useful, but
15 // WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 // GNU General Public License for more details.
18 //
19 // You should have received a copy of the GNU General Public License
20 // along with Rcpp. If not, see <http://www.gnu.org/licenses/>.
21 
22 #ifndef Rcpp_Module_get_return_type_h
23 #define Rcpp_Module_get_return_type_h
24 
25 namespace Rcpp {
26 
27  struct void_type{} ;
28 
29  template <typename RESULT_TYPE>
31  return demangle( typeid(RESULT_TYPE).name() ).data() ;
32  }
33  template <typename RESULT_TYPE>
35  typedef typename Rcpp::traits::un_pointer<RESULT_TYPE>::type pointer ;
36  std::string res = demangle( typeid( pointer ).name() ).data() ;
37  res += "*" ;
38  return res ;
39  }
40 
41  template <typename RESULT_TYPE>
42  inline std::string get_return_type(){
43  return get_return_type_dispatch<RESULT_TYPE>( typename Rcpp::traits::is_pointer<RESULT_TYPE>::type() ) ;
44  }
45  template <>
46  inline std::string get_return_type<void_type>(){
47  return "void" ;
48  }
49  template <>
50  inline std::string get_return_type<SEXP>(){
51  return "SEXP" ;
52  }
53  template <>
54  inline std::string get_return_type<Rcpp::IntegerVector>(){
55  return "Rcpp::IntegerVector" ;
56  }
57  template <>
58  inline std::string get_return_type<Rcpp::NumericVector>(){
59  return "Rcpp::NumericVector" ;
60  }
61  template <>
62  inline std::string get_return_type<Rcpp::RawVector>(){
63  return "Rcpp::RawVector" ;
64  }
65  template <>
66  inline std::string get_return_type<Rcpp::ExpressionVector>(){
67  return "Rcpp::ExpressionVector" ;
68  }
69  template <>
70  inline std::string get_return_type<Rcpp::List>(){
71  return "Rcpp::List" ;
72  }
73  template <>
74  inline std::string get_return_type<Rcpp::CharacterVector>(){
75  return "Rcpp::CharacterVector" ;
76  }
77 
78 }
79 #endif
std::string demangle(const std::string &name)
Definition: routines.h:192
Rcpp API.
Definition: algo.h:28
std::string get_return_type()
std::string get_return_type_dispatch(Rcpp::traits::false_type)
std::string get_return_type< void_type >()
std::string get_return_type< SEXP >()