Rcpp Version 1.0.14
Loading...
Searching...
No Matches
cbind.h
Go to the documentation of this file.
1// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; indent-tabs-mode: nil; -*-
2//
3// cbind.h: Rcpp R/C++ interface class library -- cbind
4//
5// Copyright (C) 2016 Nathan Russell
6//
7// This file is part of Rcpp.
8//
9// Rcpp is free software: you can redistribute it and/or modify it
10// under the terms of the GNU General Public License as published by
11// the Free Software Foundation, either version 2 of the License, or
12// (at your option) any later version.
13//
14// Rcpp is distributed in the hope that it will be useful, but
15// WITHOUT ANY WARRANTY; without even the implied warranty of
16// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17// GNU General Public License for more details.
18//
19// You should have received a copy of the GNU General Public License
20// along with Rcpp. If not, see <http://www.gnu.org/licenses/>.
21
22#ifndef Rcpp__sugar__cbind_h
23#define Rcpp__sugar__cbind_h
24
25namespace Rcpp {
26namespace sugar {
27namespace cbind_impl {
28
29// override r_sexptype_traits<SEXP> for STRSXP
30template <typename T>
33
34template <>
36 enum { rtype = STRSXP };
37};
38
39// override storage_type<LGLSXP> (int)
40template <int RTYPE>
42 : public Rcpp::traits::storage_type<RTYPE> {};
43
44template <>
46 typedef bool type;
47};
48
49
50// CRTP base
51template <int RTYPE, typename E>
53public:
55
57 return static_cast<const E&>(*this)[i];
58 }
59
61 return static_cast<const E&>(*this)(i, j);
62 }
63
64 inline R_xlen_t size() const {
65 return static_cast<const E&>(*this).size();
66 }
67
68 inline R_xlen_t nrow() const {
69 return static_cast<const E&>(*this).nrow();
70 }
71
72 inline R_xlen_t ncol() const {
73 return static_cast<const E&>(*this).ncol();
74 }
75
76 operator E&() { return static_cast<E&>(*this); }
77 operator const E&() const { return static_cast<const E&>(*this); }
78};
79
80// Matrix, Vector interface to BindableExpression
81template <int RTYPE, typename T>
83 : public BindableExpression<RTYPE, ContainerBindable<RTYPE, T> > {
84public:
86
87private:
88 T vec;
90
91public:
96
98 : vec(vec_), len(vec.size()),
99 nr(vec.size()), nc(1)
100 {}
101
102 template <typename S>
104 : vec(e.size()), len(e.size()),
105 nr(e.nrow()), nc(e.ncol())
106 {
107 for (R_xlen_t i = 0; i < len; i++) {
108 vec[i] = e[i];
109 }
110 }
111
112 inline R_xlen_t size() const { return len; }
113
114 inline R_xlen_t nrow() const { return nr; }
115
116 inline R_xlen_t ncol() const { return nc; }
117
119 return vec[i];
120 }
121
123 return vec[i + nr * j];
124 }
125};
126
127
128template <int RTYPE>
129struct scalar {
131};
132
133// scalar interface to BindableExpression
134template <typename T>
136 : public BindableExpression<
137 cbind_sexptype_traits<T>::rtype, ScalarBindable<T> > {
138public:
139 typedef T stored_type;
141
142private:
143 T t;
144
145public:
146 ScalarBindable(const T& t_) : t(t_) {}
147
148 inline R_xlen_t size() const { return 1; }
149
150 inline R_xlen_t nrow() const { return 1; }
151
152 inline R_xlen_t ncol() const { return 1; }
153
155 return t;
156 }
157
159 return t;
160 }
161};
162
163
164// binding logic; non-scalar operands
165template <int RTYPE, typename E1, typename E2>
167 : public BindableExpression<RTYPE, JoinOp<RTYPE, E1, E2> >,
168 public Rcpp::MatrixBase<RTYPE, true, JoinOp<RTYPE, E1, E2> > {
169public:
171
172private:
173 const E1& e1;
174 const E2& e2;
175
176public:
179 : e1(e1_), e2(e2_)
180 {
181 if (e1.nrow() != e2.nrow()) {
182 std::string msg =
183 "Error in cbind: "
184 "Matrix and Vector operands "
185 "must have equal "
186 "number of rows (length).";
188 }
189 }
190
191 inline R_xlen_t size() const { return e1.size() + e2.size(); }
192
193 inline R_xlen_t nrow() const { return e1.nrow(); }
194
195 inline R_xlen_t ncol() const { return e1.ncol() + e2.ncol(); }
196
198 return (i < e1.size()) ? e1[i] : e2[i - e1.size()];
199 }
200
202 R_xlen_t index = i + nrow() * j;
203 return (*this)[index];
204 }
205};
206
207// binding logic; rhs scalar
208template <int RTYPE, typename E1>
209class JoinOp<RTYPE, E1, ScalarBindable<typename scalar<RTYPE>::type> >
210 : public BindableExpression<RTYPE,
211 JoinOp<RTYPE, E1,
212 ScalarBindable<typename scalar<RTYPE>::type> > >,
213 public Rcpp::MatrixBase<RTYPE, true,
214 JoinOp<RTYPE, E1,
215 ScalarBindable<typename scalar<RTYPE>::type> > > {
216public:
219
220private:
221 const E1& e1;
222 const E2& e2;
223
224public:
229
230 inline R_xlen_t size() const { return e1.size() + e1.nrow(); }
231
232 inline R_xlen_t nrow() const { return e1.nrow(); }
233
234 inline R_xlen_t ncol() const { return e1.ncol() + 1; }
235
237 return (i < e1.size()) ? e1[i] : e2[i];
238 }
239
241 R_xlen_t index = i + nrow() * j;
242 return (*this)[index];
243 }
244};
245
246// binding logic; lhs scalar
247template <int RTYPE, typename E2>
248class JoinOp<RTYPE, ScalarBindable<typename scalar<RTYPE>::type>, E2>
249 : public BindableExpression<RTYPE,
250 JoinOp<RTYPE,
251 ScalarBindable<typename scalar<RTYPE>::type>, E2> >,
252 public Rcpp::MatrixBase<RTYPE, true,
253 JoinOp<RTYPE,
254 ScalarBindable<typename scalar<RTYPE>::type>, E2> > {
255public:
258
259private:
260 const E1& e1;
261 const E2& e2;
262
263public:
268
269 inline R_xlen_t size() const { return e2.size() + e2.nrow(); }
270
271 inline R_xlen_t nrow() const { return e2.nrow(); }
272
273 inline R_xlen_t ncol() const { return e2.ncol() + 1; }
274
276 return (i < e2.nrow()) ? e1[i] : e2[i - e2.nrow()];
277 }
278
280 R_xlen_t index = i + nrow() * j;
281 return (*this)[index];
282 }
283};
284
285// binding logic; both scalar
286template <int RTYPE>
287class JoinOp<RTYPE, ScalarBindable<typename scalar<RTYPE>::type>,
288 ScalarBindable<typename scalar<RTYPE>::type> >
289 : public BindableExpression<RTYPE,
290 JoinOp<RTYPE,
291 ScalarBindable<typename scalar<RTYPE>::type>,
292 ScalarBindable<typename scalar<RTYPE>::type> > >,
293 public Rcpp::MatrixBase<RTYPE, true,
294 JoinOp<RTYPE,
295 ScalarBindable<typename scalar<RTYPE>::type>,
296 ScalarBindable<typename scalar<RTYPE>::type> > > {
297public:
301
302private:
303 const E1& e1;
304 const E2& e2;
305
306public:
311
312 inline R_xlen_t size() const { return e2.size() + e2.nrow(); }
313
314 inline R_xlen_t nrow() const { return e2.nrow(); }
315
316 inline R_xlen_t ncol() const { return e2.ncol() + 1; }
317
319 return (i < e2.nrow()) ? e1[i] : e2[i];
320 }
321
323 R_xlen_t index = i + nrow() * j;
324 return (*this)[index];
325 }
326};
327
328// for template argument deduction
329template <int RTYPE>
334
335template <int RTYPE>
340
341template <>
346
347template <>
352
353template <typename T>
354inline ScalarBindable<T>
356 return ScalarBindable<T>(t);
357}
358
359// for expressions of arbitrary length
360template <int RTYPE, typename E1, typename E2>
367
368// helpers
369namespace detail {
370
371// distinguish Matrix/Vector from scalar
372template <typename T>
374private:
375 typedef char yes;
376 typedef struct {
377 char array[2];
378 } no;
379
380 template <typename C>
381 static yes test(typename C::stored_type*);
382
383 template <typename C>
384 static no test(...);
385
386public:
387 static const bool value = sizeof(test<T>(0)) == sizeof(yes);
388};
389
390// functor to dispatch appropriate Make*Bindable() call
393
394template <typename T>
406
407// specialize for LGLSXP
408template <>
409struct MakeBindableCall<Rcpp::Matrix<LGLSXP>, true> {
411 typedef bool stored_type;
412
414
416 return MakeContainerBindable(t);
417 }
418};
419
420template <>
421struct MakeBindableCall<Rcpp::Vector<LGLSXP>, true> {
423 typedef bool stored_type;
424
426
428 return MakeContainerBindable(t);
429 }
430};
431
432template <typename T>
435
436 ScalarBindable<T> operator()(const T& t) const {
437 return MakeScalarBindable(t);
438 }
439};
440
441template <typename T>
442inline typename Rcpp::traits::enable_if<
444 MakeBindableCall<T, true>
445>::type
446MakeBindable(const T& t) {
448}
449
450template <typename T>
451inline typename Rcpp::traits::enable_if<
453 MakeBindableCall<T, false>
454>::type
455MakeBindable(const T& t) {
457}
458
459
460// determine cbind return type from first template
461// parameter, agnostic of Matrix/Vector/scalar
464
465template <typename T>
474
475// specialize for LGLSXP
476// normally would default to IntegerMatrix
477template <>
478struct matrix_return<Rcpp::Matrix<LGLSXP>, true> {
480};
481
482template <>
483struct matrix_return<Rcpp::Vector<LGLSXP>, true> {
485};
486
487template <>
491
492template <typename T>
497
498} // detail
499
502 : public detail::matrix_return<T, B> {};
503
504template <typename T>
506 : public detail::matrix_return<T, false> {};
507
508} // cbind_impl
509
510#define MakeBindable(x) (cbind_impl::detail::MakeBindable(x)(x))
511
512// begin cbind overloads
513
514template<typename T1, typename T2>
515inline typename cbind_impl::matrix_return<T1>::type
516cbind(const T1& t1, const T2& t2) {
517 return (MakeBindable(t1), MakeBindable(t2));
518}
519
520template<typename T1, typename T2, typename T3>
521inline typename cbind_impl::matrix_return<T1>::type
522cbind(const T1& t1, const T2& t2, const T3& t3) {
524}
525
526template<typename T1, typename T2, typename T3, typename T4>
527inline typename cbind_impl::matrix_return<T1>::type
528cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4) {
530}
531
532// 5
533template<typename T1, typename T2, typename T3, typename T4, typename T5>
534inline typename cbind_impl::matrix_return<T1>::type
535cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5) {
537}
538
539template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
540inline typename cbind_impl::matrix_return<T1>::type
541cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6) {
543}
544
545template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
546inline typename cbind_impl::matrix_return<T1>::type
547cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7) {
549}
550
551template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
552inline typename cbind_impl::matrix_return<T1>::type
553cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8) {
555}
556
557template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
558inline typename cbind_impl::matrix_return<T1>::type
559cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9) {
561}
562
563// 10
564template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
565inline typename cbind_impl::matrix_return<T1>::type
566cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10) {
568}
569
570template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
571inline typename cbind_impl::matrix_return<T1>::type
572cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11) {
574}
575
576template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
577inline typename cbind_impl::matrix_return<T1>::type
578cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12) {
580}
581
582template<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>
583inline typename cbind_impl::matrix_return<T1>::type
584cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13) {
586}
587
588template<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>
589inline typename cbind_impl::matrix_return<T1>::type
590cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14) {
592}
593
594// 15
595template<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>
596inline typename cbind_impl::matrix_return<T1>::type
597cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15) {
599}
600
601template<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, typename T16>
602inline typename cbind_impl::matrix_return<T1>::type
603cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16) {
605}
606
607template<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, typename T16, typename T17>
608inline typename cbind_impl::matrix_return<T1>::type
609cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17) {
611}
612
613template<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, typename T16, typename T17, typename T18>
614inline typename cbind_impl::matrix_return<T1>::type
615cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18) {
617}
618
619template<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, typename T16, typename T17, typename T18, typename T19>
620inline typename cbind_impl::matrix_return<T1>::type
621cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19) {
623}
624
625// 20
626template<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, typename T16, typename T17, typename T18, typename T19, typename T20>
627inline typename cbind_impl::matrix_return<T1>::type
628cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20) {
630}
631
632template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21>
633inline typename cbind_impl::matrix_return<T1>::type
634cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21) {
636}
637
638template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22>
639inline typename cbind_impl::matrix_return<T1>::type
640cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22) {
642}
643
644template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23>
645inline typename cbind_impl::matrix_return<T1>::type
646cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23) {
648}
649
650template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24>
651inline typename cbind_impl::matrix_return<T1>::type
652cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24) {
654}
655
656// 25
657template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25>
658inline typename cbind_impl::matrix_return<T1>::type
659cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25) {
661}
662
663template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26>
664inline typename cbind_impl::matrix_return<T1>::type
665cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26) {
667}
668
669template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27>
670inline typename cbind_impl::matrix_return<T1>::type
671cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27) {
673}
674
675template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28>
676inline typename cbind_impl::matrix_return<T1>::type
677cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28) {
679}
680
681template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29>
682inline typename cbind_impl::matrix_return<T1>::type
683cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29) {
685}
686
687// 30
688template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30>
689inline typename cbind_impl::matrix_return<T1>::type
690cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30) {
692}
693
694template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31>
695inline typename cbind_impl::matrix_return<T1>::type
696cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31) {
698}
699
700template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32>
701inline typename cbind_impl::matrix_return<T1>::type
702cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32) {
704}
705
706template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33>
707inline typename cbind_impl::matrix_return<T1>::type
708cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33) {
710}
711
712template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34>
713inline typename cbind_impl::matrix_return<T1>::type
714cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34) {
716}
717
718// 35
719template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35>
720inline typename cbind_impl::matrix_return<T1>::type
721cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35) {
723}
724
725template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36>
726inline typename cbind_impl::matrix_return<T1>::type
727cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36) {
729}
730
731template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37>
732inline typename cbind_impl::matrix_return<T1>::type
733cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37) {
735}
736
737template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38>
738inline typename cbind_impl::matrix_return<T1>::type
739cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38) {
741}
742
743template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39>
744inline typename cbind_impl::matrix_return<T1>::type
745cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39) {
747}
748
749// 40
750template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39, typename T40>
751inline typename cbind_impl::matrix_return<T1>::type
752cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40) {
754}
755
756template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39, typename T40, typename T41>
757inline typename cbind_impl::matrix_return<T1>::type
758cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41) {
760}
761
762template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39, typename T40, typename T41, typename T42>
763inline typename cbind_impl::matrix_return<T1>::type
764cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42) {
766}
767
768template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39, typename T40, typename T41, typename T42, typename T43>
769inline typename cbind_impl::matrix_return<T1>::type
770cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43) {
772}
773
774template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39, typename T40, typename T41, typename T42, typename T43, typename T44>
775inline typename cbind_impl::matrix_return<T1>::type
776cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44) {
778}
779
780// 45
781template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39, typename T40, typename T41, typename T42, typename T43, typename T44, typename T45>
782inline typename cbind_impl::matrix_return<T1>::type
783cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45) {
785}
786
787template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39, typename T40, typename T41, typename T42, typename T43, typename T44, typename T45, typename T46>
788inline typename cbind_impl::matrix_return<T1>::type
789cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46) {
791}
792
793template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39, typename T40, typename T41, typename T42, typename T43, typename T44, typename T45, typename T46, typename T47>
794inline typename cbind_impl::matrix_return<T1>::type
795cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47) {
797}
798
799template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39, typename T40, typename T41, typename T42, typename T43, typename T44, typename T45, typename T46, typename T47, typename T48>
800inline typename cbind_impl::matrix_return<T1>::type
801cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47, const T48& t48) {
803}
804
805template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39, typename T40, typename T41, typename T42, typename T43, typename T44, typename T45, typename T46, typename T47, typename T48, typename T49>
806inline typename cbind_impl::matrix_return<T1>::type
807cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47, const T48& t48, const T49& t49) {
809}
810
811// 50
812template<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, typename T16, typename T17, typename T18, typename T19, typename T20, typename T21, typename T22, typename T23, typename T24, typename T25, typename T26, typename T27, typename T28, typename T29, typename T30, typename T31, typename T32, typename T33, typename T34, typename T35, typename T36, typename T37, typename T38, typename T39, typename T40, typename T41, typename T42, typename T43, typename T44, typename T45, typename T46, typename T47, typename T48, typename T49, typename T50>
813inline typename cbind_impl::matrix_return<T1>::type
814cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7, const T8& t8, const T9& t9, const T10& t10, const T11& t11, const T12& t12, const T13& t13, const T14& t14, const T15& t15, const T16& t16, const T17& t17, const T18& t18, const T19& t19, const T20& t20, const T21& t21, const T22& t22, const T23& t23, const T24& t24, const T25& t25, const T26& t26, const T27& t27, const T28& t28, const T29& t29, const T30& t30, const T31& t31, const T32& t32, const T33& t33, const T34& t34, const T35& t35, const T36& t36, const T37& t37, const T38& t38, const T39& t39, const T40& t40, const T41& t41, const T42& t42, const T43& t43, const T44& t44, const T45& t45, const T46& t46, const T47& t47, const T48& t48, const T49& t49, const T50& t50) {
816}
817
818// end cbind overloads
819
820#undef MakeBindable
821
822} // sugar
823
824namespace {
825using sugar::cbind;
826}
827
828} // Rcpp
829
830#endif // Rcpp__sugar__cbind_h
#define MakeBindable(x)
Definition cbind.h:510
stored_type operator[](R_xlen_t i) const
Definition cbind.h:56
cbind_storage_type< RTYPE >::type stored_type
Definition cbind.h:54
stored_type operator()(R_xlen_t i, R_xlen_t j) const
Definition cbind.h:60
ContainerBindable(const Rcpp::Vector< RTYPE > &vec_)
Definition cbind.h:97
stored_type operator[](R_xlen_t i) const
Definition cbind.h:118
stored_type operator()(R_xlen_t i, R_xlen_t j) const
Definition cbind.h:122
ContainerBindable(const Rcpp::Matrix< RTYPE > &vec_)
Definition cbind.h:92
ContainerBindable(const BindableExpression< RTYPE, S > &e)
Definition cbind.h:103
cbind_storage_type< RTYPE >::type stored_type
Definition cbind.h:85
JoinOp(const BindableExpression< RTYPE, E1 > &e1_, const BindableExpression< RTYPE, E2 > &e2_)
Definition cbind.h:225
JoinOp(const BindableExpression< RTYPE, E1 > &e1_, const BindableExpression< RTYPE, E2 > &e2_)
Definition cbind.h:264
cbind_storage_type< RTYPE >::type stored_type
Definition cbind.h:170
stored_type operator()(R_xlen_t i, R_xlen_t j) const
Definition cbind.h:201
R_xlen_t size() const
Definition cbind.h:191
R_xlen_t nrow() const
Definition cbind.h:193
JoinOp(const BindableExpression< RTYPE, E1 > &e1_, const BindableExpression< RTYPE, E2 > &e2_)
Definition cbind.h:177
stored_type operator[](R_xlen_t i) const
Definition cbind.h:197
R_xlen_t ncol() const
Definition cbind.h:195
stored_type operator[](R_xlen_t i) const
Definition cbind.h:154
stored_type operator()(R_xlen_t i, R_xlen_t j) const
Definition cbind.h:158
static yes test(typename C::stored_type *)
ContainerBindable< RTYPE, Rcpp::Matrix< RTYPE > > MakeContainerBindable(const Rcpp::Matrix< RTYPE > &x)
Definition cbind.h:331
ScalarBindable< T > MakeScalarBindable(const T &t)
Definition cbind.h:355
JoinOp< RTYPE, E1, E2 > operator,(const BindableExpression< RTYPE, E1 > &e1, const BindableExpression< RTYPE, E2 > &e2)
Definition cbind.h:361
cbind_impl::matrix_return< T1 >::type cbind(const T1 &t1, const T2 &t2)
Definition cbind.h:516
Rcpp API.
Definition algo.h:28
void NORET stop(const std::string &message)
Definition exceptions.h:117
T as(SEXP x)
Definition as.h:151
ContainerBindable< LGLSXP, T > operator()(const T &t) const
Definition cbind.h:415
ContainerBindable< LGLSXP, T > operator()(const T &t) const
Definition cbind.h:427
ScalarBindable< T > operator()(const T &t) const
Definition cbind.h:436
cbind_storage_type< cbind_sexptype_traits< typenameT::stored_type >::rtype >::type stored_type
Definition cbind.h:398
ContainerBindable< RTYPE, T > operator()(const T &t) const
Definition cbind.h:402
cbind_storage_type< cbind_sexptype_traits< typenameT::stored_type >::rtype >::type stored_type
Definition cbind.h:469
cbind_storage_type< RTYPE >::type type
Definition cbind.h:130