Rcpp Version 0.12.12
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 
25 namespace Rcpp {
26 namespace sugar {
27 namespace cbind_impl {
28 
29 // override r_sexptype_traits<SEXP> for STRSXP
30 template <typename T>
32  : public Rcpp::traits::r_sexptype_traits<T> {};
33 
34 template <>
35 struct cbind_sexptype_traits<SEXP> {
36  enum { rtype = STRSXP };
37 };
38 
39 // override storage_type<LGLSXP> (int)
40 template <int RTYPE>
42  : public Rcpp::traits::storage_type<RTYPE> {};
43 
44 template <>
45 struct cbind_storage_type<LGLSXP> {
46  typedef bool type;
47 };
48 
49 
50 // CRTP base
51 template <int RTYPE, typename E>
53 public:
55 
56  inline stored_type operator[](R_xlen_t i) const {
57  return static_cast<const E&>(*this)[i];
58  }
59 
60  inline stored_type operator()(R_xlen_t i, R_xlen_t j) const {
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
81 template <int RTYPE, typename T>
83  : public BindableExpression<RTYPE, ContainerBindable<RTYPE, T> > {
84 public:
86 
87 private:
88  T vec;
89  R_xlen_t len, nr, nc;
90 
91 public:
93  : vec(vec_), len(vec.ncol() * vec.nrow()),
94  nr(vec.nrow()), nc(vec.ncol())
95  {}
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 
118  inline stored_type operator[](R_xlen_t i) const {
119  return vec[i];
120  }
121 
122  inline stored_type operator()(R_xlen_t i, R_xlen_t j) const {
123  return vec[i + nr * j];
124  }
125 };
126 
127 
128 template <int RTYPE>
129 struct scalar {
131 };
132 
133 // scalar interface to BindableExpression
134 template <typename T>
136  : public BindableExpression<
137  cbind_sexptype_traits<T>::rtype, ScalarBindable<T> > {
138 public:
139  typedef T stored_type;
141 
142 private:
143  T t;
144 
145 public:
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 
154  inline stored_type operator[](R_xlen_t i) const {
155  return t;
156  }
157 
158  inline stored_type operator()(R_xlen_t i, R_xlen_t j) const {
159  return t;
160  }
161 };
162 
163 
164 // binding logic; non-scalar operands
165 template <int RTYPE, typename E1, typename E2>
166 class JoinOp
167  : public BindableExpression<RTYPE, JoinOp<RTYPE, E1, E2> >,
168  public Rcpp::MatrixBase<RTYPE, true, JoinOp<RTYPE, E1, E2> > {
169 public:
171 
172 private:
173  const E1& e1;
174  const E2& e2;
175 
176 public:
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).";
187  Rcpp::stop(msg);
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 
197  inline stored_type operator[](R_xlen_t i) const {
198  return (i < e1.size()) ? e1[i] : e2[i - e1.size()];
199  }
200 
201  inline stored_type operator()(R_xlen_t i, R_xlen_t j) const {
202  R_xlen_t index = i + nrow() * j;
203  return (*this)[index];
204  }
205 };
206 
207 // binding logic; rhs scalar
208 template <int RTYPE, typename E1>
209 class 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> > > {
216 public:
219 
220 private:
221  const E1& e1;
222  const E2& e2;
223 
224 public:
227  : e1(e1_), e2(e2_)
228  {}
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 
236  inline stored_type operator[](R_xlen_t i) const {
237  return (i < e1.size()) ? e1[i] : e2[i];
238  }
239 
240  inline stored_type operator()(R_xlen_t i, R_xlen_t j) const {
241  R_xlen_t index = i + nrow() * j;
242  return (*this)[index];
243  }
244 };
245 
246 // binding logic; lhs scalar
247 template <int RTYPE, typename E2>
248 class 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> > {
255 public:
258 
259 private:
260  const E1& e1;
261  const E2& e2;
262 
263 public:
266  : e1(e1_), e2(e2_)
267  {}
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 
275  inline stored_type operator[](R_xlen_t i) const {
276  return (i < e2.nrow()) ? e1[i] : e2[i - e2.nrow()];
277  }
278 
279  inline stored_type operator()(R_xlen_t i, R_xlen_t j) const {
280  R_xlen_t index = i + nrow() * j;
281  return (*this)[index];
282  }
283 };
284 
285 // binding logic; both scalar
286 template <int RTYPE>
287 class 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> > > {
297 public:
301 
302 private:
303  const E1& e1;
304  const E2& e2;
305 
306 public:
309  : e1(e1_), e2(e2_)
310  {}
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 
318  inline stored_type operator[](R_xlen_t i) const {
319  return (i < e2.nrow()) ? e1[i] : e2[i];
320  }
321 
322  inline stored_type operator()(R_xlen_t i, R_xlen_t j) const {
323  R_xlen_t index = i + nrow() * j;
324  return (*this)[index];
325  }
326 };
327 
328 // for template argument deduction
329 template <int RTYPE>
333 }
334 
335 template <int RTYPE>
339 }
340 
341 template <>
345 }
346 
347 template <>
351 }
352 
353 template <typename T>
354 inline ScalarBindable<T>
355 MakeScalarBindable(const T& t) {
356  return ScalarBindable<T>(t);
357 }
358 
359 // for expressions of arbitrary length
360 template <int RTYPE, typename E1, typename E2>
364 {
365  return JoinOp<RTYPE, E1, E2>(e1, e2);
366 }
367 
368 // helpers
369 namespace detail {
370 
371 // distinguish Matrix/Vector from scalar
372 template <typename T>
374 private:
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 
386 public:
387  static const bool value = sizeof(test<T>(0)) == sizeof(yes);
388 };
389 
390 // functor to dispatch appropriate Make*Bindable() call
391 template <typename T, bool is_container = has_stored_type<T>::value>
393 
394 template <typename T>
395 struct MakeBindableCall<T, true> {
396  typedef typename cbind_storage_type<
398  >::type stored_type;
399 
401 
403  return MakeContainerBindable(t);
404  }
405 };
406 
407 // specialize for LGLSXP
408 template <>
409 struct MakeBindableCall<Rcpp::Matrix<LGLSXP>, true> {
411  typedef bool stored_type;
412 
414 
416  return MakeContainerBindable(t);
417  }
418 };
419 
420 template <>
421 struct MakeBindableCall<Rcpp::Vector<LGLSXP>, true> {
423  typedef bool stored_type;
424 
426 
428  return MakeContainerBindable(t);
429  }
430 };
431 
432 template <typename T>
433 struct MakeBindableCall<T, false> {
435 
436  ScalarBindable<T> operator()(const T& t) const {
437  return MakeScalarBindable(t);
438  }
439 };
440 
441 template <typename T>
442 inline typename Rcpp::traits::enable_if<
445 >::type
446 MakeBindable(const T& t) {
447  return MakeBindableCall<T, true>();
448 }
449 
450 template <typename T>
451 inline typename Rcpp::traits::enable_if<
452  !has_stored_type<T>::value,
454 >::type
455 MakeBindable(const T& t) {
457 }
458 
459 
460 // determine cbind return type from first template
461 // parameter, agnostic of Matrix/Vector/scalar
462 template <typename T, bool is_container = has_stored_type<T>::value>
463 struct matrix_return {};
464 
465 template <typename T>
466 struct matrix_return<T, true> {
467  typedef typename cbind_storage_type<
470 
473 };
474 
475 // specialize for LGLSXP
476 // normally would default to IntegerMatrix
477 template <>
478 struct matrix_return<Rcpp::Matrix<LGLSXP>, true> {
480 };
481 
482 template <>
483 struct matrix_return<Rcpp::Vector<LGLSXP>, true> {
485 };
486 
487 template <>
488 struct matrix_return<bool, false> {
490 };
491 
492 template <typename T>
493 struct matrix_return<T, false> {
496 };
497 
498 } // detail
499 
500 template <typename T, bool B = detail::has_stored_type<T>::value>
502  : public detail::matrix_return<T, B> {};
503 
504 template <typename T>
505 struct matrix_return<T, false>
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 
514 template<typename T1, typename T2>
515 inline typename cbind_impl::matrix_return<T1>::type
516 cbind(const T1& t1, const T2& t2) {
517  return (MakeBindable(t1), MakeBindable(t2));
518 }
519 
520 template<typename T1, typename T2, typename T3>
522 cbind(const T1& t1, const T2& t2, const T3& t3) {
523  return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3));
524 }
525 
526 template<typename T1, typename T2, typename T3, typename T4>
528 cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4) {
529  return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4));
530 }
531 
532 // 5
533 template<typename T1, typename T2, typename T3, typename T4, typename T5>
535 cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5) {
536  return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5));
537 }
538 
539 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
541 cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6) {
542  return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6));
543 }
544 
545 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
547 cbind(const T1& t1, const T2& t2, const T3& t3, const T4& t4, const T5& t5, const T6& t6, const T7& t7) {
548  return (MakeBindable(t1), MakeBindable(t2), MakeBindable(t3), MakeBindable(t4), MakeBindable(t5), MakeBindable(t6), MakeBindable(t7));
549 }
550 
551 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
553 cbind(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 
557 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
559 cbind(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
564 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
566 cbind(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 
570 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11>
572 cbind(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 
576 template<typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10, typename T11, typename T12>
578 cbind(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 
582 template<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>
584 cbind(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 
588 template<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>
590 cbind(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
595 template<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>
597 cbind(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 
601 template<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>
603 cbind(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 
607 template<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>
609 cbind(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 
613 template<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>
615 cbind(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 
619 template<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>
621 cbind(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
626 template<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>
628 cbind(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 
632 template<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>
634 cbind(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 
638 template<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>
640 cbind(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 
644 template<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>
646 cbind(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 
650 template<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>
652 cbind(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
657 template<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>
659 cbind(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 
663 template<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>
665 cbind(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 
669 template<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>
671 cbind(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 
675 template<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>
677 cbind(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 
681 template<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>
683 cbind(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
688 template<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>
690 cbind(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 
694 template<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>
696 cbind(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 
700 template<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>
702 cbind(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 
706 template<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>
708 cbind(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 
712 template<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>
714 cbind(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
719 template<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>
721 cbind(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 
725 template<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>
727 cbind(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 
731 template<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>
733 cbind(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 
737 template<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>
739 cbind(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 
743 template<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>
745 cbind(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
750 template<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>
752 cbind(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 
756 template<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>
758 cbind(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 
762 template<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>
764 cbind(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 
768 template<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>
770 cbind(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 
774 template<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>
776 cbind(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
781 template<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>
783 cbind(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 
787 template<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>
789 cbind(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 
793 template<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>
795 cbind(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 
799 template<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>
801 cbind(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 
805 template<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>
807 cbind(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
812 template<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>
814 cbind(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 
824 namespace {
825 using sugar::cbind;
826 }
827 
828 } // Rcpp
829 
830 #endif // Rcpp__sugar__cbind_h
cbind_storage_type< RTYPE >::type type
Definition: cbind.h:130
stored_type operator[](R_xlen_t i) const
Definition: cbind.h:154
cbind_storage_type< RTYPE >::type stored_type
Definition: cbind.h:170
JoinOp< RTYPE, E1, E2 > operator,(const BindableExpression< RTYPE, E1 > &e1, const BindableExpression< RTYPE, E2 > &e2)
Definition: cbind.h:361
ContainerBindable(const Rcpp::Matrix< RTYPE > &vec_)
Definition: cbind.h:92
JoinOp(const BindableExpression< RTYPE, E1 > &e1_, const BindableExpression< RTYPE, E2 > &e2_)
Definition: cbind.h:307
cbind_storage_type< cbind_sexptype_traits< typename T::stored_type >::rtype >::type stored_type
Definition: cbind.h:469
ContainerBindable< RTYPE, T > operator()(const T &t) const
Definition: cbind.h:402
ScalarBindable< T > MakeScalarBindable(const T &t)
Definition: cbind.h:355
R_xlen_t size() const
Definition: cbind.h:191
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:122
ContainerBindable< LGLSXP, T > operator()(const T &t) const
Definition: cbind.h:427
ContainerBindable< LGLSXP, T > operator()(const T &t) const
Definition: cbind.h:415
ContainerBindable< RTYPE, Rcpp::Matrix< RTYPE > > MakeContainerBindable(const Rcpp::Matrix< RTYPE > &x)
Definition: cbind.h:331
R_xlen_t ncol() const
Definition: cbind.h:195
stored_type operator()(R_xlen_t i, R_xlen_t j) const
Definition: cbind.h:201
R_xlen_t nrow() const
Definition: cbind.h:193
stored_type operator()(R_xlen_t i, R_xlen_t j) const
Definition: cbind.h:60
cbind_impl::matrix_return< T1 >::type cbind(const T1 &t1, const T2 &t2)
Definition: cbind.h:516
ContainerBindable(const BindableExpression< RTYPE, S > &e)
Definition: cbind.h:103
stored_type operator[](R_xlen_t i) const
Definition: cbind.h:197
cbind_storage_type< RTYPE >::type stored_type
Definition: cbind.h:85
cbind_storage_type< cbind_sexptype_traits< typename T::stored_type >::rtype >::type stored_type
Definition: cbind.h:398
void NORET stop(const char *fmt, Args &&...args)
Definition: exceptions.h:51
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:118
Rcpp API.
Definition: algo.h:28
JoinOp(const BindableExpression< RTYPE, E1 > &e1_, const BindableExpression< RTYPE, E2 > &e2_)
Definition: cbind.h:225
ContainerBindable(const Rcpp::Vector< RTYPE > &vec_)
Definition: cbind.h:97
JoinOp(const BindableExpression< RTYPE, E1 > &e1_, const BindableExpression< RTYPE, E2 > &e2_)
Definition: cbind.h:264
stored_type operator()(R_xlen_t i, R_xlen_t j) const
Definition: cbind.h:158
#define MakeBindable(x)
Definition: cbind.h:510
stored_type operator[](R_xlen_t i) const
Definition: cbind.h:56
ScalarBindable< T > operator()(const T &t) const
Definition: cbind.h:436