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