1 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*- 2 // 3 // Module_generated_Constructor.h: Rcpp R/C++ interface class library -- Rcpp modules 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_generated_Constructor_h 23 #define Rcpp_Module_generated_Constructor_h 24 25 template <typename Class> 26 class Constructor_Base { 27 public: 28 virtual Class* get_new( SEXP* args, int nargs ) = 0 ; 29 virtual int nargs() = 0 ; 30 virtual void signature(std::string& s, const std::string& class_name) = 0 ; 31 } ; 32 33 template <typename Class> 34 class Constructor_0 : public Constructor_Base<Class>{ 35 public: get_new(SEXP *,int)36 virtual Class* get_new( SEXP* /*args*/, int /*nargs*/ ){ 37 return new Class() ; 38 } nargs()39 virtual int nargs(){ return 0 ; } signature(std::string & s,const std::string & class_name)40 virtual void signature(std::string& s, const std::string& class_name ){ 41 ctor_signature(s, class_name) ; 42 } 43 } ; 44 template <typename Class, typename U0> 45 class Constructor_1 : public Constructor_Base<Class>{ get_new(SEXP * args,int nargs)46 virtual Class* get_new( SEXP* args, int nargs ){ 47 return new Class( as<U0>(args[0]) ) ; 48 } nargs()49 virtual int nargs(){ return 1 ; } signature(std::string & s,const std::string & class_name)50 virtual void signature(std::string& s, const std::string& class_name ){ 51 ctor_signature<U0>(s, class_name) ; 52 } 53 } ; 54 template <typename Class, typename U0, typename U1> 55 class Constructor_2 : public Constructor_Base<Class>{ get_new(SEXP * args,int nargs)56 virtual Class* get_new( SEXP* args, int nargs ){ 57 return new Class( 58 as<U0>(args[0]), 59 as<U1>(args[1]) 60 ) ; 61 } nargs()62 virtual int nargs(){ return 2 ; } signature(std::string & s,const std::string & class_name)63 virtual void signature(std::string& s, const std::string& class_name ){ 64 ctor_signature<U0,U1>(s, class_name) ; 65 } 66 } ; 67 template <typename Class, typename U0, typename U1, typename U2> 68 class Constructor_3 : public Constructor_Base<Class>{ get_new(SEXP * args,int nargs)69 virtual Class* get_new( SEXP* args, int nargs ){ 70 return new Class( 71 as<U0>(args[0]), 72 as<U1>(args[1]), 73 as<U2>(args[2]) 74 ) ; 75 } nargs()76 virtual int nargs(){ return 3 ; } signature(std::string & s,const std::string & class_name)77 virtual void signature(std::string& s, const std::string& class_name ){ 78 ctor_signature<U0,U1,U2>(s, class_name) ; 79 } 80 } ; 81 template <typename Class, typename U0, typename U1, typename U2, typename U3> 82 class Constructor_4 : public Constructor_Base<Class>{ get_new(SEXP * args,int nargs)83 virtual Class* get_new( SEXP* args, int nargs ){ 84 return new Class( 85 as<U0>(args[0]), 86 as<U1>(args[1]), 87 as<U2>(args[2]), 88 as<U3>(args[3]) 89 ) ; 90 } nargs()91 virtual int nargs(){ return 4 ; } signature(std::string & s,const std::string & class_name)92 virtual void signature(std::string& s, const std::string& class_name ){ 93 ctor_signature<U0,U1,U2,U3>(s, class_name) ; 94 } 95 } ; 96 template <typename Class, typename U0, typename U1, typename U2, typename U3, typename U4> 97 class Constructor_5 : public Constructor_Base<Class>{ get_new(SEXP * args,int nargs)98 virtual Class* get_new( SEXP* args, int nargs ){ 99 return new Class( 100 as<U0>(args[0]), 101 as<U1>(args[1]), 102 as<U2>(args[2]), 103 as<U3>(args[3]), 104 as<U4>(args[4]) 105 ) ; 106 } nargs()107 virtual int nargs(){ return 5 ; } signature(std::string & s,const std::string & class_name)108 virtual void signature(std::string& s, const std::string& class_name ){ 109 ctor_signature<U0,U1,U2,U3,U4>(s, class_name) ; 110 } 111 } ; 112 template <typename Class, typename U0, typename U1, typename U2, typename U3, typename U4, typename U5> 113 class Constructor_6 : public Constructor_Base<Class>{ get_new(SEXP * args,int nargs)114 virtual Class* get_new( SEXP* args, int nargs ){ 115 return new Class( 116 as<U0>(args[0]), 117 as<U1>(args[1]), 118 as<U2>(args[2]), 119 as<U3>(args[3]), 120 as<U4>(args[4]), 121 as<U5>(args[5]) 122 ) ; 123 } nargs()124 virtual int nargs(){ return 6 ; } signature(std::string & s,const std::string & class_name)125 virtual void signature(std::string& s, const std::string& class_name ){ 126 ctor_signature<U0,U1,U2,U3,U4,U5>(s, class_name) ; 127 } 128 } ; 129 template <typename Class, typename U0, typename U1, typename U2, typename U3, typename U4, typename U5, typename U6> 130 class Constructor_7 : public Constructor_Base<Class>{ get_new(SEXP * args,int nargs)131 virtual Class* get_new( SEXP* args, int nargs ){ 132 return new Class( 133 as<U0>(args[0]), 134 as<U1>(args[1]), 135 as<U2>(args[2]), 136 as<U3>(args[3]), 137 as<U4>(args[4]), 138 as<U5>(args[5]), 139 as<U6>(args[6]) 140 ) ; 141 } nargs()142 virtual int nargs(){ return 7 ; } signature(std::string & s,const std::string & class_name)143 virtual void signature(std::string& s, const std::string& class_name ){ 144 ctor_signature<U0,U1,U2,U3,U4,U5,U6>(s, class_name) ; 145 } 146 } ; 147 148 #endif 149