rice 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/rice/protect.hpp CHANGED
@@ -36,50 +36,50 @@ VALUE protect(Function f, T1 arg1, T2 arg2, ...);
36
36
  template<typename Fun>
37
37
  VALUE protect(Fun fun);
38
38
 
39
- template<typename Fun, typename T1>
40
- VALUE protect(Fun fun, T1 const & t1);
39
+ template<typename Fun, typename T0>
40
+ VALUE protect(Fun fun, T0 const & t0);
41
41
 
42
- template<typename Fun, typename T1, typename T2>
43
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2);
42
+ template<typename Fun, typename T0, typename T1>
43
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1);
44
44
 
45
- template<typename Fun, typename T1, typename T2, typename T3>
46
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3);
45
+ template<typename Fun, typename T0, typename T1, typename T2>
46
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2);
47
47
 
48
- template<typename Fun, typename T1, typename T2, typename T3, typename T4>
49
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4);
48
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3>
49
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3);
50
50
 
51
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5>
52
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5);
51
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4>
52
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4);
53
53
 
54
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
55
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6);
54
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
55
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5);
56
56
 
57
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
58
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7);
57
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
58
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6);
59
59
 
60
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
61
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8);
60
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
61
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7);
62
62
 
63
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
64
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9);
63
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
64
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8);
65
65
 
66
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
67
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10);
66
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
67
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9);
68
68
 
69
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
70
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11);
69
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
70
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10);
71
71
 
72
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
73
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12);
72
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
73
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11);
74
74
 
75
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
76
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13);
75
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
76
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12);
77
77
 
78
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
79
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14);
78
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
79
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13);
80
80
 
81
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15>
82
- VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14, T15 const & t15);
81
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
82
+ VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14);
83
83
 
84
84
  #endif // DOXYGEN
85
85
 
data/rice/protect.ipp CHANGED
@@ -14,41 +14,41 @@ namespace Rice
14
14
  namespace detail
15
15
  {
16
16
 
17
- template<typename Ret_T, typename Fun>
18
- class Ruby_Function_0
19
- {
20
- public:
21
- Ruby_Function_0(Fun f);
22
- inline void operator()();
23
- static inline VALUE call(Ruby_Function_0 * f);
24
- Ret_T const & result() const { return result_; }
25
-
26
- private:
27
- Fun f_;
28
-
29
- Ret_T result_; // TODO: use placement new
30
- };
31
-
32
- template<typename Ret_T, typename Fun>
33
- inline Ruby_Function_0<Ret_T, Fun>::
34
- Ruby_Function_0(Fun f)
35
- : f_(f)
36
- { }
37
-
38
- template<typename Ret_T, typename Fun>
39
- inline void Ruby_Function_0<Ret_T, Fun>::
40
- operator()()
41
- {
42
- result_ = f_();
43
- }
44
-
45
- template<typename Ret_T, typename Fun>
46
- inline VALUE Ruby_Function_0<Ret_T, Fun>::
47
- call(Ruby_Function_0 * f)
48
- {
49
- (*f)();
50
- return Qnil;
51
- }
17
+ template<typename Ret_T, typename Fun>
18
+ class Ruby_Function_0
19
+ {
20
+ public:
21
+ Ruby_Function_0(Fun f);
22
+ inline void operator()();
23
+ static inline VALUE call(Ruby_Function_0 * f);
24
+ Ret_T const & result() const { return result_; }
25
+
26
+ private:
27
+ Fun f_;
28
+
29
+ Ret_T result_; // TODO: use placement new
30
+ };
31
+
32
+ template<typename Ret_T, typename Fun>
33
+ inline Ruby_Function_0<Ret_T, Fun>::
34
+ Ruby_Function_0(Fun f)
35
+ : f_(f)
36
+ { }
37
+
38
+ template<typename Ret_T, typename Fun>
39
+ inline void Ruby_Function_0<Ret_T, Fun>::
40
+ operator()()
41
+ {
42
+ result_ = f_();
43
+ }
44
+
45
+ template<typename Ret_T, typename Fun>
46
+ inline VALUE Ruby_Function_0<Ret_T, Fun>::
47
+ call(Ruby_Function_0 * f)
48
+ {
49
+ (*f)();
50
+ return Qnil;
51
+ }
52
52
 
53
53
  } // namespace detail
54
54
 
@@ -79,60 +79,66 @@ inline VALUE protect(Fun fun)
79
79
  namespace detail
80
80
  {
81
81
 
82
- template<typename Ret_T, typename Fun, typename T1>
83
- class Ruby_Function_1
84
- {
85
- public:
86
- Ruby_Function_1(Fun f, T1 const & t1);
87
- inline void operator()();
88
- static inline VALUE call(Ruby_Function_1 * f);
89
- Ret_T const & result() const { return result_; }
90
-
91
- private:
92
- Fun f_;
93
- T1 const & t1_;
94
- Ret_T result_; // TODO: use placement new
95
- };
96
-
97
- template<typename Ret_T, typename Fun, typename T1>
98
- inline Ruby_Function_1<Ret_T, Fun, T1>::
99
- Ruby_Function_1(Fun f, T1 const & t1)
100
- : f_(f), t1_(t1)
101
- { }
102
-
103
- template<typename Ret_T, typename Fun, typename T1>
104
- inline void Ruby_Function_1<Ret_T, Fun, T1>::
105
- operator()()
106
- {
107
- result_ = f_(t1_);
108
- }
109
-
110
- template<typename Ret_T, typename Fun, typename T1>
111
- inline VALUE Ruby_Function_1<Ret_T, Fun, T1>::
112
- call(Ruby_Function_1 * f)
113
- {
114
- (*f)();
115
- return Qnil;
116
- }
82
+ template<typename Ret_T, typename Fun, typename T0>
83
+ class Ruby_Function_1
84
+ {
85
+ public:
86
+ Ruby_Function_1(Fun f, T0 const & t0);
87
+ inline void operator()();
88
+ static inline VALUE call(Ruby_Function_1 * f);
89
+ Ret_T const & result() const { return result_; }
90
+
91
+ private:
92
+ Fun f_;
93
+ T0 const & t0_;
94
+ Ret_T result_; // TODO: use placement new
95
+ };
96
+
97
+ template<typename Ret_T, typename Fun, typename T0>
98
+ inline Ruby_Function_1<Ret_T, Fun, T0>::
99
+ Ruby_Function_1(Fun f, T0 const & t0)
100
+ : f_(f), t0_(t0)
101
+ { }
102
+
103
+ template<typename Ret_T, typename Fun, typename T0>
104
+ inline void Ruby_Function_1<Ret_T, Fun, T0>::
105
+ operator()()
106
+ {
107
+ result_ = f_(t0_);
108
+ }
109
+
110
+ template<typename Ret_T, typename Fun, typename T0>
111
+ inline VALUE Ruby_Function_1<Ret_T, Fun, T0>::
112
+ call(Ruby_Function_1 * f)
113
+ {
114
+ (*f)();
115
+ return Qnil;
116
+ }
117
117
 
118
118
  } // namespace detail
119
119
 
120
- template<typename Ret_T, typename Fun, typename T1>
121
- inline Ret_T protect(Fun fun, T1 const & t1)
120
+ /**
121
+ * protect on a function with a return type
122
+ */
123
+ template<typename Ret_T, typename Fun, typename T0>
124
+ inline Ret_T protect(Fun fun, T0 const & t0)
122
125
  {
123
- typedef detail::Ruby_Function_1<Ret_T, Fun, T1> RF;
124
- RF f(fun, t1);
126
+ typedef detail::Ruby_Function_1<Ret_T, Fun, T0> RF;
127
+ RF f(fun, t0);
125
128
  detail::protect(
126
129
  RUBY_VALUE_FUNC(RF::call),
127
130
  reinterpret_cast<VALUE>(&f));
128
131
  return f.result();
129
132
  }
130
133
 
131
- template<typename Fun, typename T1>
132
- inline VALUE protect(Fun fun, T1 const & t1)
134
+ /**
135
+ * protect on a function with VALUE return type
136
+ */
137
+ template<typename Fun, typename T0>
138
+ inline VALUE protect(Fun fun, T0 const & t0)
133
139
  {
134
- typedef detail::Ruby_Function_1<VALUE, Fun, T1> RF;
135
- RF f(fun, t1);
140
+ typedef detail::Ruby_Function_1<VALUE, Fun, T0> RF;
141
+ RF f(fun, t0);
136
142
  detail::protect(
137
143
  RUBY_VALUE_FUNC(RF::call),
138
144
  reinterpret_cast<VALUE>(&f));
@@ -140,64 +146,69 @@ inline VALUE protect(Fun fun, T1 const & t1)
140
146
  }
141
147
 
142
148
  // ---------------------------------------------------------------------
143
-
144
149
  namespace detail
145
150
  {
146
151
 
147
- template<typename Ret_T, typename Fun, typename T1, typename T2>
148
- class Ruby_Function_2
149
- {
150
- public:
151
- Ruby_Function_2(Fun f, T1 const & t1, T2 const & t2);
152
- inline void operator()();
153
- static inline VALUE call(Ruby_Function_2 * f);
154
- Ret_T const & result() const { return result_; }
155
-
156
- private:
157
- Fun f_;
158
- T1 const & t1_; T2 const & t2_;
159
- Ret_T result_; // TODO: use placement new
160
- };
161
-
162
- template<typename Ret_T, typename Fun, typename T1, typename T2>
163
- inline Ruby_Function_2<Ret_T, Fun, T1, T2>::
164
- Ruby_Function_2(Fun f, T1 const & t1, T2 const & t2)
165
- : f_(f), t1_(t1), t2_(t2)
166
- { }
167
-
168
- template<typename Ret_T, typename Fun, typename T1, typename T2>
169
- inline void Ruby_Function_2<Ret_T, Fun, T1, T2>::
170
- operator()()
171
- {
172
- result_ = f_(t1_, t2_);
173
- }
174
-
175
- template<typename Ret_T, typename Fun, typename T1, typename T2>
176
- inline VALUE Ruby_Function_2<Ret_T, Fun, T1, T2>::
177
- call(Ruby_Function_2 * f)
178
- {
179
- (*f)();
180
- return Qnil;
181
- }
152
+ template<typename Ret_T, typename Fun, typename T0, typename T1>
153
+ class Ruby_Function_2
154
+ {
155
+ public:
156
+ Ruby_Function_2(Fun f, T0 const & t0, T1 const & t1);
157
+ inline void operator()();
158
+ static inline VALUE call(Ruby_Function_2 * f);
159
+ Ret_T const & result() const { return result_; }
160
+
161
+ private:
162
+ Fun f_;
163
+ T0 const & t0_; T1 const & t1_;
164
+ Ret_T result_; // TODO: use placement new
165
+ };
166
+
167
+ template<typename Ret_T, typename Fun, typename T0, typename T1>
168
+ inline Ruby_Function_2<Ret_T, Fun, T0, T1>::
169
+ Ruby_Function_2(Fun f, T0 const & t0, T1 const & t1)
170
+ : f_(f), t0_(t0), t1_(t1)
171
+ { }
172
+
173
+ template<typename Ret_T, typename Fun, typename T0, typename T1>
174
+ inline void Ruby_Function_2<Ret_T, Fun, T0, T1>::
175
+ operator()()
176
+ {
177
+ result_ = f_(t0_, t1_);
178
+ }
179
+
180
+ template<typename Ret_T, typename Fun, typename T0, typename T1>
181
+ inline VALUE Ruby_Function_2<Ret_T, Fun, T0, T1>::
182
+ call(Ruby_Function_2 * f)
183
+ {
184
+ (*f)();
185
+ return Qnil;
186
+ }
182
187
 
183
188
  } // namespace detail
184
189
 
185
- template<typename Ret_T, typename Fun, typename T1, typename T2>
186
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2)
190
+ /**
191
+ * protect on a function with a return type
192
+ */
193
+ template<typename Ret_T, typename Fun, typename T0, typename T1>
194
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1)
187
195
  {
188
- typedef detail::Ruby_Function_2<Ret_T, Fun, T1, T2> RF;
189
- RF f(fun, t1, t2);
196
+ typedef detail::Ruby_Function_2<Ret_T, Fun, T0, T1> RF;
197
+ RF f(fun, t0, t1);
190
198
  detail::protect(
191
199
  RUBY_VALUE_FUNC(RF::call),
192
200
  reinterpret_cast<VALUE>(&f));
193
201
  return f.result();
194
202
  }
195
203
 
196
- template<typename Fun, typename T1, typename T2>
197
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2)
204
+ /**
205
+ * protect on a function with VALUE return type
206
+ */
207
+ template<typename Fun, typename T0, typename T1>
208
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1)
198
209
  {
199
- typedef detail::Ruby_Function_2<VALUE, Fun, T1, T2> RF;
200
- RF f(fun, t1, t2);
210
+ typedef detail::Ruby_Function_2<VALUE, Fun, T0, T1> RF;
211
+ RF f(fun, t0, t1);
201
212
  detail::protect(
202
213
  RUBY_VALUE_FUNC(RF::call),
203
214
  reinterpret_cast<VALUE>(&f));
@@ -205,64 +216,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2)
205
216
  }
206
217
 
207
218
  // ---------------------------------------------------------------------
208
-
209
219
  namespace detail
210
220
  {
211
221
 
212
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3>
213
- class Ruby_Function_3
214
- {
215
- public:
216
- Ruby_Function_3(Fun f, T1 const & t1, T2 const & t2, T3 const & t3);
217
- inline void operator()();
218
- static inline VALUE call(Ruby_Function_3 * f);
219
- Ret_T const & result() const { return result_; }
220
-
221
- private:
222
- Fun f_;
223
- T1 const & t1_; T2 const & t2_; T3 const & t3_;
224
- Ret_T result_; // TODO: use placement new
225
- };
226
-
227
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3>
228
- inline Ruby_Function_3<Ret_T, Fun, T1, T2, T3>::
229
- Ruby_Function_3(Fun f, T1 const & t1, T2 const & t2, T3 const & t3)
230
- : f_(f), t1_(t1), t2_(t2), t3_(t3)
231
- { }
232
-
233
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3>
234
- inline void Ruby_Function_3<Ret_T, Fun, T1, T2, T3>::
235
- operator()()
236
- {
237
- result_ = f_(t1_, t2_, t3_);
238
- }
239
-
240
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3>
241
- inline VALUE Ruby_Function_3<Ret_T, Fun, T1, T2, T3>::
242
- call(Ruby_Function_3 * f)
243
- {
244
- (*f)();
245
- return Qnil;
246
- }
222
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2>
223
+ class Ruby_Function_3
224
+ {
225
+ public:
226
+ Ruby_Function_3(Fun f, T0 const & t0, T1 const & t1, T2 const & t2);
227
+ inline void operator()();
228
+ static inline VALUE call(Ruby_Function_3 * f);
229
+ Ret_T const & result() const { return result_; }
230
+
231
+ private:
232
+ Fun f_;
233
+ T0 const & t0_; T1 const & t1_; T2 const & t2_;
234
+ Ret_T result_; // TODO: use placement new
235
+ };
236
+
237
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2>
238
+ inline Ruby_Function_3<Ret_T, Fun, T0, T1, T2>::
239
+ Ruby_Function_3(Fun f, T0 const & t0, T1 const & t1, T2 const & t2)
240
+ : f_(f), t0_(t0), t1_(t1), t2_(t2)
241
+ { }
242
+
243
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2>
244
+ inline void Ruby_Function_3<Ret_T, Fun, T0, T1, T2>::
245
+ operator()()
246
+ {
247
+ result_ = f_(t0_, t1_, t2_);
248
+ }
249
+
250
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2>
251
+ inline VALUE Ruby_Function_3<Ret_T, Fun, T0, T1, T2>::
252
+ call(Ruby_Function_3 * f)
253
+ {
254
+ (*f)();
255
+ return Qnil;
256
+ }
247
257
 
248
258
  } // namespace detail
249
259
 
250
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3>
251
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3)
260
+ /**
261
+ * protect on a function with a return type
262
+ */
263
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2>
264
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2)
252
265
  {
253
- typedef detail::Ruby_Function_3<Ret_T, Fun, T1, T2, T3> RF;
254
- RF f(fun, t1, t2, t3);
266
+ typedef detail::Ruby_Function_3<Ret_T, Fun, T0, T1, T2> RF;
267
+ RF f(fun, t0, t1, t2);
255
268
  detail::protect(
256
269
  RUBY_VALUE_FUNC(RF::call),
257
270
  reinterpret_cast<VALUE>(&f));
258
271
  return f.result();
259
272
  }
260
273
 
261
- template<typename Fun, typename T1, typename T2, typename T3>
262
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3)
274
+ /**
275
+ * protect on a function with VALUE return type
276
+ */
277
+ template<typename Fun, typename T0, typename T1, typename T2>
278
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2)
263
279
  {
264
- typedef detail::Ruby_Function_3<VALUE, Fun, T1, T2, T3> RF;
265
- RF f(fun, t1, t2, t3);
280
+ typedef detail::Ruby_Function_3<VALUE, Fun, T0, T1, T2> RF;
281
+ RF f(fun, t0, t1, t2);
266
282
  detail::protect(
267
283
  RUBY_VALUE_FUNC(RF::call),
268
284
  reinterpret_cast<VALUE>(&f));
@@ -270,64 +286,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3)
270
286
  }
271
287
 
272
288
  // ---------------------------------------------------------------------
273
-
274
289
  namespace detail
275
290
  {
276
291
 
277
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4>
278
- class Ruby_Function_4
279
- {
280
- public:
281
- Ruby_Function_4(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4);
282
- inline void operator()();
283
- static inline VALUE call(Ruby_Function_4 * f);
284
- Ret_T const & result() const { return result_; }
285
-
286
- private:
287
- Fun f_;
288
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_;
289
- Ret_T result_; // TODO: use placement new
290
- };
291
-
292
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4>
293
- inline Ruby_Function_4<Ret_T, Fun, T1, T2, T3, T4>::
294
- Ruby_Function_4(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4)
295
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4)
296
- { }
297
-
298
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4>
299
- inline void Ruby_Function_4<Ret_T, Fun, T1, T2, T3, T4>::
300
- operator()()
301
- {
302
- result_ = f_(t1_, t2_, t3_, t4_);
303
- }
304
-
305
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4>
306
- inline VALUE Ruby_Function_4<Ret_T, Fun, T1, T2, T3, T4>::
307
- call(Ruby_Function_4 * f)
308
- {
309
- (*f)();
310
- return Qnil;
311
- }
292
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3>
293
+ class Ruby_Function_4
294
+ {
295
+ public:
296
+ Ruby_Function_4(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3);
297
+ inline void operator()();
298
+ static inline VALUE call(Ruby_Function_4 * f);
299
+ Ret_T const & result() const { return result_; }
300
+
301
+ private:
302
+ Fun f_;
303
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_;
304
+ Ret_T result_; // TODO: use placement new
305
+ };
306
+
307
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3>
308
+ inline Ruby_Function_4<Ret_T, Fun, T0, T1, T2, T3>::
309
+ Ruby_Function_4(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3)
310
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3)
311
+ { }
312
+
313
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3>
314
+ inline void Ruby_Function_4<Ret_T, Fun, T0, T1, T2, T3>::
315
+ operator()()
316
+ {
317
+ result_ = f_(t0_, t1_, t2_, t3_);
318
+ }
319
+
320
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3>
321
+ inline VALUE Ruby_Function_4<Ret_T, Fun, T0, T1, T2, T3>::
322
+ call(Ruby_Function_4 * f)
323
+ {
324
+ (*f)();
325
+ return Qnil;
326
+ }
312
327
 
313
328
  } // namespace detail
314
329
 
315
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4>
316
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4)
330
+ /**
331
+ * protect on a function with a return type
332
+ */
333
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3>
334
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3)
317
335
  {
318
- typedef detail::Ruby_Function_4<Ret_T, Fun, T1, T2, T3, T4> RF;
319
- RF f(fun, t1, t2, t3, t4);
336
+ typedef detail::Ruby_Function_4<Ret_T, Fun, T0, T1, T2, T3> RF;
337
+ RF f(fun, t0, t1, t2, t3);
320
338
  detail::protect(
321
339
  RUBY_VALUE_FUNC(RF::call),
322
340
  reinterpret_cast<VALUE>(&f));
323
341
  return f.result();
324
342
  }
325
343
 
326
- template<typename Fun, typename T1, typename T2, typename T3, typename T4>
327
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4)
344
+ /**
345
+ * protect on a function with VALUE return type
346
+ */
347
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3>
348
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3)
328
349
  {
329
- typedef detail::Ruby_Function_4<VALUE, Fun, T1, T2, T3, T4> RF;
330
- RF f(fun, t1, t2, t3, t4);
350
+ typedef detail::Ruby_Function_4<VALUE, Fun, T0, T1, T2, T3> RF;
351
+ RF f(fun, t0, t1, t2, t3);
331
352
  detail::protect(
332
353
  RUBY_VALUE_FUNC(RF::call),
333
354
  reinterpret_cast<VALUE>(&f));
@@ -335,64 +356,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
335
356
  }
336
357
 
337
358
  // ---------------------------------------------------------------------
338
-
339
359
  namespace detail
340
360
  {
341
361
 
342
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5>
343
- class Ruby_Function_5
344
- {
345
- public:
346
- Ruby_Function_5(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5);
347
- inline void operator()();
348
- static inline VALUE call(Ruby_Function_5 * f);
349
- Ret_T const & result() const { return result_; }
350
-
351
- private:
352
- Fun f_;
353
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_;
354
- Ret_T result_; // TODO: use placement new
355
- };
356
-
357
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5>
358
- inline Ruby_Function_5<Ret_T, Fun, T1, T2, T3, T4, T5>::
359
- Ruby_Function_5(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5)
360
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5)
361
- { }
362
-
363
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5>
364
- inline void Ruby_Function_5<Ret_T, Fun, T1, T2, T3, T4, T5>::
365
- operator()()
366
- {
367
- result_ = f_(t1_, t2_, t3_, t4_, t5_);
368
- }
369
-
370
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5>
371
- inline VALUE Ruby_Function_5<Ret_T, Fun, T1, T2, T3, T4, T5>::
372
- call(Ruby_Function_5 * f)
373
- {
374
- (*f)();
375
- return Qnil;
376
- }
362
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4>
363
+ class Ruby_Function_5
364
+ {
365
+ public:
366
+ Ruby_Function_5(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4);
367
+ inline void operator()();
368
+ static inline VALUE call(Ruby_Function_5 * f);
369
+ Ret_T const & result() const { return result_; }
370
+
371
+ private:
372
+ Fun f_;
373
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_;
374
+ Ret_T result_; // TODO: use placement new
375
+ };
376
+
377
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4>
378
+ inline Ruby_Function_5<Ret_T, Fun, T0, T1, T2, T3, T4>::
379
+ Ruby_Function_5(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4)
380
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3), t4_(t4)
381
+ { }
382
+
383
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4>
384
+ inline void Ruby_Function_5<Ret_T, Fun, T0, T1, T2, T3, T4>::
385
+ operator()()
386
+ {
387
+ result_ = f_(t0_, t1_, t2_, t3_, t4_);
388
+ }
389
+
390
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4>
391
+ inline VALUE Ruby_Function_5<Ret_T, Fun, T0, T1, T2, T3, T4>::
392
+ call(Ruby_Function_5 * f)
393
+ {
394
+ (*f)();
395
+ return Qnil;
396
+ }
377
397
 
378
398
  } // namespace detail
379
399
 
380
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5>
381
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5)
400
+ /**
401
+ * protect on a function with a return type
402
+ */
403
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4>
404
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4)
382
405
  {
383
- typedef detail::Ruby_Function_5<Ret_T, Fun, T1, T2, T3, T4, T5> RF;
384
- RF f(fun, t1, t2, t3, t4, t5);
406
+ typedef detail::Ruby_Function_5<Ret_T, Fun, T0, T1, T2, T3, T4> RF;
407
+ RF f(fun, t0, t1, t2, t3, t4);
385
408
  detail::protect(
386
409
  RUBY_VALUE_FUNC(RF::call),
387
410
  reinterpret_cast<VALUE>(&f));
388
411
  return f.result();
389
412
  }
390
413
 
391
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5>
392
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5)
414
+ /**
415
+ * protect on a function with VALUE return type
416
+ */
417
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4>
418
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4)
393
419
  {
394
- typedef detail::Ruby_Function_5<VALUE, Fun, T1, T2, T3, T4, T5> RF;
395
- RF f(fun, t1, t2, t3, t4, t5);
420
+ typedef detail::Ruby_Function_5<VALUE, Fun, T0, T1, T2, T3, T4> RF;
421
+ RF f(fun, t0, t1, t2, t3, t4);
396
422
  detail::protect(
397
423
  RUBY_VALUE_FUNC(RF::call),
398
424
  reinterpret_cast<VALUE>(&f));
@@ -400,64 +426,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
400
426
  }
401
427
 
402
428
  // ---------------------------------------------------------------------
403
-
404
429
  namespace detail
405
430
  {
406
431
 
407
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
408
- class Ruby_Function_6
409
- {
410
- public:
411
- Ruby_Function_6(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6);
412
- inline void operator()();
413
- static inline VALUE call(Ruby_Function_6 * f);
414
- Ret_T const & result() const { return result_; }
415
-
416
- private:
417
- Fun f_;
418
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_;
419
- Ret_T result_; // TODO: use placement new
420
- };
421
-
422
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
423
- inline Ruby_Function_6<Ret_T, Fun, T1, T2, T3, T4, T5, T6>::
424
- Ruby_Function_6(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6)
425
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6)
426
- { }
427
-
428
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
429
- inline void Ruby_Function_6<Ret_T, Fun, T1, T2, T3, T4, T5, T6>::
430
- operator()()
431
- {
432
- result_ = f_(t1_, t2_, t3_, t4_, t5_, t6_);
433
- }
434
-
435
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
436
- inline VALUE Ruby_Function_6<Ret_T, Fun, T1, T2, T3, T4, T5, T6>::
437
- call(Ruby_Function_6 * f)
438
- {
439
- (*f)();
440
- return Qnil;
441
- }
432
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
433
+ class Ruby_Function_6
434
+ {
435
+ public:
436
+ Ruby_Function_6(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5);
437
+ inline void operator()();
438
+ static inline VALUE call(Ruby_Function_6 * f);
439
+ Ret_T const & result() const { return result_; }
440
+
441
+ private:
442
+ Fun f_;
443
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_;
444
+ Ret_T result_; // TODO: use placement new
445
+ };
446
+
447
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
448
+ inline Ruby_Function_6<Ret_T, Fun, T0, T1, T2, T3, T4, T5>::
449
+ Ruby_Function_6(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5)
450
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5)
451
+ { }
452
+
453
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
454
+ inline void Ruby_Function_6<Ret_T, Fun, T0, T1, T2, T3, T4, T5>::
455
+ operator()()
456
+ {
457
+ result_ = f_(t0_, t1_, t2_, t3_, t4_, t5_);
458
+ }
459
+
460
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
461
+ inline VALUE Ruby_Function_6<Ret_T, Fun, T0, T1, T2, T3, T4, T5>::
462
+ call(Ruby_Function_6 * f)
463
+ {
464
+ (*f)();
465
+ return Qnil;
466
+ }
442
467
 
443
468
  } // namespace detail
444
469
 
445
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
446
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6)
470
+ /**
471
+ * protect on a function with a return type
472
+ */
473
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
474
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5)
447
475
  {
448
- typedef detail::Ruby_Function_6<Ret_T, Fun, T1, T2, T3, T4, T5, T6> RF;
449
- RF f(fun, t1, t2, t3, t4, t5, t6);
476
+ typedef detail::Ruby_Function_6<Ret_T, Fun, T0, T1, T2, T3, T4, T5> RF;
477
+ RF f(fun, t0, t1, t2, t3, t4, t5);
450
478
  detail::protect(
451
479
  RUBY_VALUE_FUNC(RF::call),
452
480
  reinterpret_cast<VALUE>(&f));
453
481
  return f.result();
454
482
  }
455
483
 
456
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
457
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6)
484
+ /**
485
+ * protect on a function with VALUE return type
486
+ */
487
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
488
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5)
458
489
  {
459
- typedef detail::Ruby_Function_6<VALUE, Fun, T1, T2, T3, T4, T5, T6> RF;
460
- RF f(fun, t1, t2, t3, t4, t5, t6);
490
+ typedef detail::Ruby_Function_6<VALUE, Fun, T0, T1, T2, T3, T4, T5> RF;
491
+ RF f(fun, t0, t1, t2, t3, t4, t5);
461
492
  detail::protect(
462
493
  RUBY_VALUE_FUNC(RF::call),
463
494
  reinterpret_cast<VALUE>(&f));
@@ -465,64 +496,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
465
496
  }
466
497
 
467
498
  // ---------------------------------------------------------------------
468
-
469
499
  namespace detail
470
500
  {
471
501
 
472
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
473
- class Ruby_Function_7
474
- {
475
- public:
476
- Ruby_Function_7(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7);
477
- inline void operator()();
478
- static inline VALUE call(Ruby_Function_7 * f);
479
- Ret_T const & result() const { return result_; }
480
-
481
- private:
482
- Fun f_;
483
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_;
484
- Ret_T result_; // TODO: use placement new
485
- };
486
-
487
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
488
- inline Ruby_Function_7<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7>::
489
- Ruby_Function_7(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7)
490
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7)
491
- { }
492
-
493
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
494
- inline void Ruby_Function_7<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7>::
495
- operator()()
496
- {
497
- result_ = f_(t1_, t2_, t3_, t4_, t5_, t6_, t7_);
498
- }
499
-
500
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
501
- inline VALUE Ruby_Function_7<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7>::
502
- call(Ruby_Function_7 * f)
503
- {
504
- (*f)();
505
- return Qnil;
506
- }
502
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
503
+ class Ruby_Function_7
504
+ {
505
+ public:
506
+ Ruby_Function_7(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6);
507
+ inline void operator()();
508
+ static inline VALUE call(Ruby_Function_7 * f);
509
+ Ret_T const & result() const { return result_; }
510
+
511
+ private:
512
+ Fun f_;
513
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_;
514
+ Ret_T result_; // TODO: use placement new
515
+ };
516
+
517
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
518
+ inline Ruby_Function_7<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6>::
519
+ Ruby_Function_7(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6)
520
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6)
521
+ { }
522
+
523
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
524
+ inline void Ruby_Function_7<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6>::
525
+ operator()()
526
+ {
527
+ result_ = f_(t0_, t1_, t2_, t3_, t4_, t5_, t6_);
528
+ }
529
+
530
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
531
+ inline VALUE Ruby_Function_7<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6>::
532
+ call(Ruby_Function_7 * f)
533
+ {
534
+ (*f)();
535
+ return Qnil;
536
+ }
507
537
 
508
538
  } // namespace detail
509
539
 
510
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
511
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7)
540
+ /**
541
+ * protect on a function with a return type
542
+ */
543
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
544
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6)
512
545
  {
513
- typedef detail::Ruby_Function_7<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7> RF;
514
- RF f(fun, t1, t2, t3, t4, t5, t6, t7);
546
+ typedef detail::Ruby_Function_7<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6> RF;
547
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6);
515
548
  detail::protect(
516
549
  RUBY_VALUE_FUNC(RF::call),
517
550
  reinterpret_cast<VALUE>(&f));
518
551
  return f.result();
519
552
  }
520
553
 
521
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
522
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7)
554
+ /**
555
+ * protect on a function with VALUE return type
556
+ */
557
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
558
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6)
523
559
  {
524
- typedef detail::Ruby_Function_7<VALUE, Fun, T1, T2, T3, T4, T5, T6, T7> RF;
525
- RF f(fun, t1, t2, t3, t4, t5, t6, t7);
560
+ typedef detail::Ruby_Function_7<VALUE, Fun, T0, T1, T2, T3, T4, T5, T6> RF;
561
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6);
526
562
  detail::protect(
527
563
  RUBY_VALUE_FUNC(RF::call),
528
564
  reinterpret_cast<VALUE>(&f));
@@ -530,64 +566,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
530
566
  }
531
567
 
532
568
  // ---------------------------------------------------------------------
533
-
534
569
  namespace detail
535
570
  {
536
571
 
537
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
538
- class Ruby_Function_8
539
- {
540
- public:
541
- Ruby_Function_8(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8);
542
- inline void operator()();
543
- static inline VALUE call(Ruby_Function_8 * f);
544
- Ret_T const & result() const { return result_; }
545
-
546
- private:
547
- Fun f_;
548
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_;
549
- Ret_T result_; // TODO: use placement new
550
- };
551
-
552
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
553
- inline Ruby_Function_8<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8>::
554
- Ruby_Function_8(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8)
555
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8)
556
- { }
557
-
558
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
559
- inline void Ruby_Function_8<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8>::
560
- operator()()
561
- {
562
- result_ = f_(t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_);
563
- }
564
-
565
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
566
- inline VALUE Ruby_Function_8<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8>::
567
- call(Ruby_Function_8 * f)
568
- {
569
- (*f)();
570
- return Qnil;
571
- }
572
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
573
+ class Ruby_Function_8
574
+ {
575
+ public:
576
+ Ruby_Function_8(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7);
577
+ inline void operator()();
578
+ static inline VALUE call(Ruby_Function_8 * f);
579
+ Ret_T const & result() const { return result_; }
580
+
581
+ private:
582
+ Fun f_;
583
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_;
584
+ Ret_T result_; // TODO: use placement new
585
+ };
586
+
587
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
588
+ inline Ruby_Function_8<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7>::
589
+ Ruby_Function_8(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7)
590
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7)
591
+ { }
592
+
593
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
594
+ inline void Ruby_Function_8<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7>::
595
+ operator()()
596
+ {
597
+ result_ = f_(t0_, t1_, t2_, t3_, t4_, t5_, t6_, t7_);
598
+ }
599
+
600
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
601
+ inline VALUE Ruby_Function_8<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7>::
602
+ call(Ruby_Function_8 * f)
603
+ {
604
+ (*f)();
605
+ return Qnil;
606
+ }
572
607
 
573
608
  } // namespace detail
574
609
 
575
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
576
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8)
610
+ /**
611
+ * protect on a function with a return type
612
+ */
613
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
614
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7)
577
615
  {
578
- typedef detail::Ruby_Function_8<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8> RF;
579
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8);
616
+ typedef detail::Ruby_Function_8<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7> RF;
617
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7);
580
618
  detail::protect(
581
619
  RUBY_VALUE_FUNC(RF::call),
582
620
  reinterpret_cast<VALUE>(&f));
583
621
  return f.result();
584
622
  }
585
623
 
586
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
587
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8)
624
+ /**
625
+ * protect on a function with VALUE return type
626
+ */
627
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
628
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7)
588
629
  {
589
- typedef detail::Ruby_Function_8<VALUE, Fun, T1, T2, T3, T4, T5, T6, T7, T8> RF;
590
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8);
630
+ typedef detail::Ruby_Function_8<VALUE, Fun, T0, T1, T2, T3, T4, T5, T6, T7> RF;
631
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7);
591
632
  detail::protect(
592
633
  RUBY_VALUE_FUNC(RF::call),
593
634
  reinterpret_cast<VALUE>(&f));
@@ -595,64 +636,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
595
636
  }
596
637
 
597
638
  // ---------------------------------------------------------------------
598
-
599
639
  namespace detail
600
640
  {
601
641
 
602
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
603
- class Ruby_Function_9
604
- {
605
- public:
606
- Ruby_Function_9(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9);
607
- inline void operator()();
608
- static inline VALUE call(Ruby_Function_9 * f);
609
- Ret_T const & result() const { return result_; }
610
-
611
- private:
612
- Fun f_;
613
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_;
614
- Ret_T result_; // TODO: use placement new
615
- };
616
-
617
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
618
- inline Ruby_Function_9<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9>::
619
- Ruby_Function_9(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9)
620
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9)
621
- { }
622
-
623
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
624
- inline void Ruby_Function_9<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9>::
625
- operator()()
626
- {
627
- result_ = f_(t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_);
628
- }
629
-
630
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
631
- inline VALUE Ruby_Function_9<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9>::
632
- call(Ruby_Function_9 * f)
633
- {
634
- (*f)();
635
- return Qnil;
636
- }
642
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
643
+ class Ruby_Function_9
644
+ {
645
+ public:
646
+ Ruby_Function_9(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8);
647
+ inline void operator()();
648
+ static inline VALUE call(Ruby_Function_9 * f);
649
+ Ret_T const & result() const { return result_; }
650
+
651
+ private:
652
+ Fun f_;
653
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_;
654
+ Ret_T result_; // TODO: use placement new
655
+ };
656
+
657
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
658
+ inline Ruby_Function_9<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8>::
659
+ Ruby_Function_9(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8)
660
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8)
661
+ { }
662
+
663
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
664
+ inline void Ruby_Function_9<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8>::
665
+ operator()()
666
+ {
667
+ result_ = f_(t0_, t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_);
668
+ }
669
+
670
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
671
+ inline VALUE Ruby_Function_9<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8>::
672
+ call(Ruby_Function_9 * f)
673
+ {
674
+ (*f)();
675
+ return Qnil;
676
+ }
637
677
 
638
678
  } // namespace detail
639
679
 
640
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
641
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9)
680
+ /**
681
+ * protect on a function with a return type
682
+ */
683
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
684
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8)
642
685
  {
643
- typedef detail::Ruby_Function_9<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9> RF;
644
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9);
686
+ typedef detail::Ruby_Function_9<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8> RF;
687
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8);
645
688
  detail::protect(
646
689
  RUBY_VALUE_FUNC(RF::call),
647
690
  reinterpret_cast<VALUE>(&f));
648
691
  return f.result();
649
692
  }
650
693
 
651
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
652
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9)
694
+ /**
695
+ * protect on a function with VALUE return type
696
+ */
697
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
698
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8)
653
699
  {
654
- typedef detail::Ruby_Function_9<VALUE, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9> RF;
655
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9);
700
+ typedef detail::Ruby_Function_9<VALUE, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8> RF;
701
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8);
656
702
  detail::protect(
657
703
  RUBY_VALUE_FUNC(RF::call),
658
704
  reinterpret_cast<VALUE>(&f));
@@ -660,64 +706,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
660
706
  }
661
707
 
662
708
  // ---------------------------------------------------------------------
663
-
664
709
  namespace detail
665
710
  {
666
711
 
667
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
668
- class Ruby_Function_10
669
- {
670
- public:
671
- Ruby_Function_10(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10);
672
- inline void operator()();
673
- static inline VALUE call(Ruby_Function_10 * f);
674
- Ret_T const & result() const { return result_; }
675
-
676
- private:
677
- Fun f_;
678
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_; T10 const & t10_;
679
- Ret_T result_; // TODO: use placement new
680
- };
681
-
682
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
683
- inline Ruby_Function_10<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::
684
- Ruby_Function_10(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10)
685
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9), t10_(t10)
686
- { }
687
-
688
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
689
- inline void Ruby_Function_10<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::
690
- operator()()
691
- {
692
- result_ = f_(t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_, t10_);
693
- }
694
-
695
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
696
- inline VALUE Ruby_Function_10<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::
697
- call(Ruby_Function_10 * f)
698
- {
699
- (*f)();
700
- return Qnil;
701
- }
712
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
713
+ class Ruby_Function_10
714
+ {
715
+ public:
716
+ Ruby_Function_10(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9);
717
+ inline void operator()();
718
+ static inline VALUE call(Ruby_Function_10 * f);
719
+ Ret_T const & result() const { return result_; }
720
+
721
+ private:
722
+ Fun f_;
723
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_;
724
+ Ret_T result_; // TODO: use placement new
725
+ };
726
+
727
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
728
+ inline Ruby_Function_10<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::
729
+ Ruby_Function_10(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9)
730
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9)
731
+ { }
732
+
733
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
734
+ inline void Ruby_Function_10<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::
735
+ operator()()
736
+ {
737
+ result_ = f_(t0_, t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_);
738
+ }
739
+
740
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
741
+ inline VALUE Ruby_Function_10<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::
742
+ call(Ruby_Function_10 * f)
743
+ {
744
+ (*f)();
745
+ return Qnil;
746
+ }
702
747
 
703
748
  } // namespace detail
704
749
 
705
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
706
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10)
750
+ /**
751
+ * protect on a function with a return type
752
+ */
753
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
754
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9)
707
755
  {
708
- typedef detail::Ruby_Function_10<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> RF;
709
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
756
+ typedef detail::Ruby_Function_10<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> RF;
757
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
710
758
  detail::protect(
711
759
  RUBY_VALUE_FUNC(RF::call),
712
760
  reinterpret_cast<VALUE>(&f));
713
761
  return f.result();
714
762
  }
715
763
 
716
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
717
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10)
764
+ /**
765
+ * protect on a function with VALUE return type
766
+ */
767
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
768
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9)
718
769
  {
719
- typedef detail::Ruby_Function_10<VALUE, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> RF;
720
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
770
+ typedef detail::Ruby_Function_10<VALUE, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> RF;
771
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9);
721
772
  detail::protect(
722
773
  RUBY_VALUE_FUNC(RF::call),
723
774
  reinterpret_cast<VALUE>(&f));
@@ -725,64 +776,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
725
776
  }
726
777
 
727
778
  // ---------------------------------------------------------------------
728
-
729
779
  namespace detail
730
780
  {
731
781
 
732
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
733
- class Ruby_Function_11
734
- {
735
- public:
736
- Ruby_Function_11(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11);
737
- inline void operator()();
738
- static inline VALUE call(Ruby_Function_11 * f);
739
- Ret_T const & result() const { return result_; }
740
-
741
- private:
742
- Fun f_;
743
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_; T10 const & t10_; T11 const & t11_;
744
- Ret_T result_; // TODO: use placement new
745
- };
746
-
747
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
748
- inline Ruby_Function_11<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::
749
- Ruby_Function_11(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11)
750
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9), t10_(t10), t11_(t11)
751
- { }
752
-
753
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
754
- inline void Ruby_Function_11<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::
755
- operator()()
756
- {
757
- result_ = f_(t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_, t10_, t11_);
758
- }
759
-
760
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
761
- inline VALUE Ruby_Function_11<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::
762
- call(Ruby_Function_11 * f)
763
- {
764
- (*f)();
765
- return Qnil;
766
- }
782
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
783
+ class Ruby_Function_11
784
+ {
785
+ public:
786
+ Ruby_Function_11(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10);
787
+ inline void operator()();
788
+ static inline VALUE call(Ruby_Function_11 * f);
789
+ Ret_T const & result() const { return result_; }
790
+
791
+ private:
792
+ Fun f_;
793
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_; T10 const & t10_;
794
+ Ret_T result_; // TODO: use placement new
795
+ };
796
+
797
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
798
+ inline Ruby_Function_11<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::
799
+ Ruby_Function_11(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10)
800
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9), t10_(t10)
801
+ { }
802
+
803
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
804
+ inline void Ruby_Function_11<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::
805
+ operator()()
806
+ {
807
+ result_ = f_(t0_, t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_, t10_);
808
+ }
809
+
810
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
811
+ inline VALUE Ruby_Function_11<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>::
812
+ call(Ruby_Function_11 * f)
813
+ {
814
+ (*f)();
815
+ return Qnil;
816
+ }
767
817
 
768
818
  } // namespace detail
769
819
 
770
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
771
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11)
820
+ /**
821
+ * protect on a function with a return type
822
+ */
823
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
824
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10)
772
825
  {
773
- typedef detail::Ruby_Function_11<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> RF;
774
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
826
+ typedef detail::Ruby_Function_11<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> RF;
827
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
775
828
  detail::protect(
776
829
  RUBY_VALUE_FUNC(RF::call),
777
830
  reinterpret_cast<VALUE>(&f));
778
831
  return f.result();
779
832
  }
780
833
 
781
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
782
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11)
834
+ /**
835
+ * protect on a function with VALUE return type
836
+ */
837
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
838
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10)
783
839
  {
784
- typedef detail::Ruby_Function_11<VALUE, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> RF;
785
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
840
+ typedef detail::Ruby_Function_11<VALUE, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> RF;
841
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10);
786
842
  detail::protect(
787
843
  RUBY_VALUE_FUNC(RF::call),
788
844
  reinterpret_cast<VALUE>(&f));
@@ -790,64 +846,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
790
846
  }
791
847
 
792
848
  // ---------------------------------------------------------------------
793
-
794
849
  namespace detail
795
850
  {
796
851
 
797
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
798
- class Ruby_Function_12
799
- {
800
- public:
801
- Ruby_Function_12(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12);
802
- inline void operator()();
803
- static inline VALUE call(Ruby_Function_12 * f);
804
- Ret_T const & result() const { return result_; }
805
-
806
- private:
807
- Fun f_;
808
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_; T10 const & t10_; T11 const & t11_; T12 const & t12_;
809
- Ret_T result_; // TODO: use placement new
810
- };
811
-
812
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
813
- inline Ruby_Function_12<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::
814
- Ruby_Function_12(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12)
815
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9), t10_(t10), t11_(t11), t12_(t12)
816
- { }
817
-
818
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
819
- inline void Ruby_Function_12<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::
820
- operator()()
821
- {
822
- result_ = f_(t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_, t10_, t11_, t12_);
823
- }
824
-
825
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
826
- inline VALUE Ruby_Function_12<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::
827
- call(Ruby_Function_12 * f)
828
- {
829
- (*f)();
830
- return Qnil;
831
- }
852
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
853
+ class Ruby_Function_12
854
+ {
855
+ public:
856
+ Ruby_Function_12(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11);
857
+ inline void operator()();
858
+ static inline VALUE call(Ruby_Function_12 * f);
859
+ Ret_T const & result() const { return result_; }
860
+
861
+ private:
862
+ Fun f_;
863
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_; T10 const & t10_; T11 const & t11_;
864
+ Ret_T result_; // TODO: use placement new
865
+ };
866
+
867
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
868
+ inline Ruby_Function_12<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::
869
+ Ruby_Function_12(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11)
870
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9), t10_(t10), t11_(t11)
871
+ { }
872
+
873
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
874
+ inline void Ruby_Function_12<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::
875
+ operator()()
876
+ {
877
+ result_ = f_(t0_, t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_, t10_, t11_);
878
+ }
879
+
880
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
881
+ inline VALUE Ruby_Function_12<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>::
882
+ call(Ruby_Function_12 * f)
883
+ {
884
+ (*f)();
885
+ return Qnil;
886
+ }
832
887
 
833
888
  } // namespace detail
834
889
 
835
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
836
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12)
890
+ /**
891
+ * protect on a function with a return type
892
+ */
893
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
894
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11)
837
895
  {
838
- typedef detail::Ruby_Function_12<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> RF;
839
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
896
+ typedef detail::Ruby_Function_12<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> RF;
897
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
840
898
  detail::protect(
841
899
  RUBY_VALUE_FUNC(RF::call),
842
900
  reinterpret_cast<VALUE>(&f));
843
901
  return f.result();
844
902
  }
845
903
 
846
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
847
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12)
904
+ /**
905
+ * protect on a function with VALUE return type
906
+ */
907
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
908
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11)
848
909
  {
849
- typedef detail::Ruby_Function_12<VALUE, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> RF;
850
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
910
+ typedef detail::Ruby_Function_12<VALUE, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> RF;
911
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11);
851
912
  detail::protect(
852
913
  RUBY_VALUE_FUNC(RF::call),
853
914
  reinterpret_cast<VALUE>(&f));
@@ -855,64 +916,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
855
916
  }
856
917
 
857
918
  // ---------------------------------------------------------------------
858
-
859
919
  namespace detail
860
920
  {
861
921
 
862
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
863
- class Ruby_Function_13
864
- {
865
- public:
866
- Ruby_Function_13(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13);
867
- inline void operator()();
868
- static inline VALUE call(Ruby_Function_13 * f);
869
- Ret_T const & result() const { return result_; }
870
-
871
- private:
872
- Fun f_;
873
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_; T10 const & t10_; T11 const & t11_; T12 const & t12_; T13 const & t13_;
874
- Ret_T result_; // TODO: use placement new
875
- };
876
-
877
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
878
- inline Ruby_Function_13<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::
879
- Ruby_Function_13(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13)
880
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9), t10_(t10), t11_(t11), t12_(t12), t13_(t13)
881
- { }
882
-
883
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
884
- inline void Ruby_Function_13<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::
885
- operator()()
886
- {
887
- result_ = f_(t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_, t10_, t11_, t12_, t13_);
888
- }
889
-
890
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
891
- inline VALUE Ruby_Function_13<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::
892
- call(Ruby_Function_13 * f)
893
- {
894
- (*f)();
895
- return Qnil;
896
- }
922
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
923
+ class Ruby_Function_13
924
+ {
925
+ public:
926
+ Ruby_Function_13(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12);
927
+ inline void operator()();
928
+ static inline VALUE call(Ruby_Function_13 * f);
929
+ Ret_T const & result() const { return result_; }
930
+
931
+ private:
932
+ Fun f_;
933
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_; T10 const & t10_; T11 const & t11_; T12 const & t12_;
934
+ Ret_T result_; // TODO: use placement new
935
+ };
936
+
937
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
938
+ inline Ruby_Function_13<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::
939
+ Ruby_Function_13(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12)
940
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9), t10_(t10), t11_(t11), t12_(t12)
941
+ { }
942
+
943
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
944
+ inline void Ruby_Function_13<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::
945
+ operator()()
946
+ {
947
+ result_ = f_(t0_, t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_, t10_, t11_, t12_);
948
+ }
949
+
950
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
951
+ inline VALUE Ruby_Function_13<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>::
952
+ call(Ruby_Function_13 * f)
953
+ {
954
+ (*f)();
955
+ return Qnil;
956
+ }
897
957
 
898
958
  } // namespace detail
899
959
 
900
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
901
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13)
960
+ /**
961
+ * protect on a function with a return type
962
+ */
963
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
964
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12)
902
965
  {
903
- typedef detail::Ruby_Function_13<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> RF;
904
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
966
+ typedef detail::Ruby_Function_13<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> RF;
967
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
905
968
  detail::protect(
906
969
  RUBY_VALUE_FUNC(RF::call),
907
970
  reinterpret_cast<VALUE>(&f));
908
971
  return f.result();
909
972
  }
910
973
 
911
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
912
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13)
974
+ /**
975
+ * protect on a function with VALUE return type
976
+ */
977
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
978
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12)
913
979
  {
914
- typedef detail::Ruby_Function_13<VALUE, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> RF;
915
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
980
+ typedef detail::Ruby_Function_13<VALUE, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> RF;
981
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12);
916
982
  detail::protect(
917
983
  RUBY_VALUE_FUNC(RF::call),
918
984
  reinterpret_cast<VALUE>(&f));
@@ -920,64 +986,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
920
986
  }
921
987
 
922
988
  // ---------------------------------------------------------------------
923
-
924
989
  namespace detail
925
990
  {
926
991
 
927
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
928
- class Ruby_Function_14
929
- {
930
- public:
931
- Ruby_Function_14(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14);
932
- inline void operator()();
933
- static inline VALUE call(Ruby_Function_14 * f);
934
- Ret_T const & result() const { return result_; }
935
-
936
- private:
937
- Fun f_;
938
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_; T10 const & t10_; T11 const & t11_; T12 const & t12_; T13 const & t13_; T14 const & t14_;
939
- Ret_T result_; // TODO: use placement new
940
- };
941
-
942
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
943
- inline Ruby_Function_14<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::
944
- Ruby_Function_14(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14)
945
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9), t10_(t10), t11_(t11), t12_(t12), t13_(t13), t14_(t14)
946
- { }
947
-
948
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
949
- inline void Ruby_Function_14<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::
950
- operator()()
951
- {
952
- result_ = f_(t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_, t10_, t11_, t12_, t13_, t14_);
953
- }
954
-
955
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
956
- inline VALUE Ruby_Function_14<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::
957
- call(Ruby_Function_14 * f)
958
- {
959
- (*f)();
960
- return Qnil;
961
- }
992
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
993
+ class Ruby_Function_14
994
+ {
995
+ public:
996
+ Ruby_Function_14(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13);
997
+ inline void operator()();
998
+ static inline VALUE call(Ruby_Function_14 * f);
999
+ Ret_T const & result() const { return result_; }
1000
+
1001
+ private:
1002
+ Fun f_;
1003
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_; T10 const & t10_; T11 const & t11_; T12 const & t12_; T13 const & t13_;
1004
+ Ret_T result_; // TODO: use placement new
1005
+ };
1006
+
1007
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
1008
+ inline Ruby_Function_14<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::
1009
+ Ruby_Function_14(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13)
1010
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9), t10_(t10), t11_(t11), t12_(t12), t13_(t13)
1011
+ { }
1012
+
1013
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
1014
+ inline void Ruby_Function_14<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::
1015
+ operator()()
1016
+ {
1017
+ result_ = f_(t0_, t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_, t10_, t11_, t12_, t13_);
1018
+ }
1019
+
1020
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
1021
+ inline VALUE Ruby_Function_14<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>::
1022
+ call(Ruby_Function_14 * f)
1023
+ {
1024
+ (*f)();
1025
+ return Qnil;
1026
+ }
962
1027
 
963
1028
  } // namespace detail
964
1029
 
965
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
966
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14)
1030
+ /**
1031
+ * protect on a function with a return type
1032
+ */
1033
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
1034
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13)
967
1035
  {
968
- typedef detail::Ruby_Function_14<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> RF;
969
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
1036
+ typedef detail::Ruby_Function_14<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> RF;
1037
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
970
1038
  detail::protect(
971
1039
  RUBY_VALUE_FUNC(RF::call),
972
1040
  reinterpret_cast<VALUE>(&f));
973
1041
  return f.result();
974
1042
  }
975
1043
 
976
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
977
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14)
1044
+ /**
1045
+ * protect on a function with VALUE return type
1046
+ */
1047
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13>
1048
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13)
978
1049
  {
979
- typedef detail::Ruby_Function_14<VALUE, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> RF;
980
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
1050
+ typedef detail::Ruby_Function_14<VALUE, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> RF;
1051
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13);
981
1052
  detail::protect(
982
1053
  RUBY_VALUE_FUNC(RF::call),
983
1054
  reinterpret_cast<VALUE>(&f));
@@ -985,64 +1056,69 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
985
1056
  }
986
1057
 
987
1058
  // ---------------------------------------------------------------------
988
-
989
1059
  namespace detail
990
1060
  {
991
1061
 
992
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15>
993
- class Ruby_Function_15
994
- {
995
- public:
996
- Ruby_Function_15(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14, T15 const & t15);
997
- inline void operator()();
998
- static inline VALUE call(Ruby_Function_15 * f);
999
- Ret_T const & result() const { return result_; }
1000
-
1001
- private:
1002
- Fun f_;
1003
- T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_; T10 const & t10_; T11 const & t11_; T12 const & t12_; T13 const & t13_; T14 const & t14_; T15 const & t15_;
1004
- Ret_T result_; // TODO: use placement new
1005
- };
1006
-
1007
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15>
1008
- inline Ruby_Function_15<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::
1009
- Ruby_Function_15(Fun f, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14, T15 const & t15)
1010
- : f_(f), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9), t10_(t10), t11_(t11), t12_(t12), t13_(t13), t14_(t14), t15_(t15)
1011
- { }
1012
-
1013
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15>
1014
- inline void Ruby_Function_15<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::
1015
- operator()()
1016
- {
1017
- result_ = f_(t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_, t10_, t11_, t12_, t13_, t14_, t15_);
1018
- }
1019
-
1020
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15>
1021
- inline VALUE Ruby_Function_15<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>::
1022
- call(Ruby_Function_15 * f)
1023
- {
1024
- (*f)();
1025
- return Qnil;
1026
- }
1062
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
1063
+ class Ruby_Function_15
1064
+ {
1065
+ public:
1066
+ Ruby_Function_15(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14);
1067
+ inline void operator()();
1068
+ static inline VALUE call(Ruby_Function_15 * f);
1069
+ Ret_T const & result() const { return result_; }
1070
+
1071
+ private:
1072
+ Fun f_;
1073
+ T0 const & t0_; T1 const & t1_; T2 const & t2_; T3 const & t3_; T4 const & t4_; T5 const & t5_; T6 const & t6_; T7 const & t7_; T8 const & t8_; T9 const & t9_; T10 const & t10_; T11 const & t11_; T12 const & t12_; T13 const & t13_; T14 const & t14_;
1074
+ Ret_T result_; // TODO: use placement new
1075
+ };
1076
+
1077
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
1078
+ inline Ruby_Function_15<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::
1079
+ Ruby_Function_15(Fun f, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14)
1080
+ : f_(f), t0_(t0), t1_(t1), t2_(t2), t3_(t3), t4_(t4), t5_(t5), t6_(t6), t7_(t7), t8_(t8), t9_(t9), t10_(t10), t11_(t11), t12_(t12), t13_(t13), t14_(t14)
1081
+ { }
1082
+
1083
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
1084
+ inline void Ruby_Function_15<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::
1085
+ operator()()
1086
+ {
1087
+ result_ = f_(t0_, t1_, t2_, t3_, t4_, t5_, t6_, t7_, t8_, t9_, t10_, t11_, t12_, t13_, t14_);
1088
+ }
1089
+
1090
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
1091
+ inline VALUE Ruby_Function_15<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>::
1092
+ call(Ruby_Function_15 * f)
1093
+ {
1094
+ (*f)();
1095
+ return Qnil;
1096
+ }
1027
1097
 
1028
1098
  } // namespace detail
1029
1099
 
1030
- template<typename Ret_T, typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15>
1031
- inline Ret_T protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14, T15 const & t15)
1100
+ /**
1101
+ * protect on a function with a return type
1102
+ */
1103
+ template<typename Ret_T, typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
1104
+ inline Ret_T protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14)
1032
1105
  {
1033
- typedef detail::Ruby_Function_15<Ret_T, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> RF;
1034
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
1106
+ typedef detail::Ruby_Function_15<Ret_T, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> RF;
1107
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
1035
1108
  detail::protect(
1036
1109
  RUBY_VALUE_FUNC(RF::call),
1037
1110
  reinterpret_cast<VALUE>(&f));
1038
1111
  return f.result();
1039
1112
  }
1040
1113
 
1041
- template<typename Fun, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14, typename T15>
1042
- inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14, T15 const & t15)
1114
+ /**
1115
+ * protect on a function with VALUE return type
1116
+ */
1117
+ template<typename Fun, typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12, typename T13, typename T14>
1118
+ inline VALUE protect(Fun fun, T0 const & t0, T1 const & t1, T2 const & t2, T3 const & t3, T4 const & t4, T5 const & t5, T6 const & t6, T7 const & t7, T8 const & t8, T9 const & t9, T10 const & t10, T11 const & t11, T12 const & t12, T13 const & t13, T14 const & t14)
1043
1119
  {
1044
- typedef detail::Ruby_Function_15<VALUE, Fun, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> RF;
1045
- RF f(fun, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15);
1120
+ typedef detail::Ruby_Function_15<VALUE, Fun, T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> RF;
1121
+ RF f(fun, t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14);
1046
1122
  detail::protect(
1047
1123
  RUBY_VALUE_FUNC(RF::call),
1048
1124
  reinterpret_cast<VALUE>(&f));
@@ -1050,8 +1126,6 @@ inline VALUE protect(Fun fun, T1 const & t1, T2 const & t2, T3 const & t3, T4 co
1050
1126
  }
1051
1127
 
1052
1128
  // ---------------------------------------------------------------------
1053
-
1054
-
1055
1129
  } // namespace Rice
1056
1130
 
1057
1131