Rcpp Version 1.0.9
mapply_3.h
Go to the documentation of this file.
1 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-
2 //
3 // mapply_3.h: Rcpp R/C++ interface class library -- mapply_3
4 //
5 // Copyright (C) 2012 Dirk Eddelbuettel and Romain Francois
6 //
7 // This file is part of Rcpp.
8 //
9 // Rcpp is free software: you can redistribute it and/or modify it
10 // under the terms of the GNU General Public License as published by
11 // the Free Software Foundation, either version 2 of the License, or
12 // (at your option) any later version.
13 //
14 // Rcpp is distributed in the hope that it will be useful, but
15 // WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 // GNU General Public License for more details.
18 //
19 // You should have received a copy of the GNU General Public License
20 // along with Rcpp. If not, see <http://www.gnu.org/licenses/>.
21 
22 #ifndef Rcpp__sugar__mapply_3_h
23 #define Rcpp__sugar__mapply_3_h
24 
25 namespace Rcpp{
26 namespace sugar{
27 
28 template <
29  int RTYPE_1, bool NA_1, typename T_1,
30  int RTYPE_2, bool NA_2, typename T_2,
31  int RTYPE_3, bool NA_3, typename T_3,
32  typename Function
33 >
34 class Mapply_3 : public VectorBase<
35  Rcpp::traits::r_sexptype_traits<
36  typename ::Rcpp::traits::result_of<Function>::type
37  >::rtype ,
38  true ,
39  Mapply_3<RTYPE_1,NA_1,T_1,RTYPE_2,NA_2,T_2,RTYPE_3,NA_3,T_3,Function>
40 > {
41 public:
42  typedef typename ::Rcpp::traits::result_of<Function>::type result_type ;
43 
47 
51 
52  Mapply_3( const VEC_1& vec_1_, const VEC_2& vec_2_, const VEC_3& vec_3_, Function fun_ ) :
53  vec_1(vec_1_.get_ref()), vec_2(vec_2_.get_ref()), vec_3(vec_3_.get_ref()), fun(fun_){}
54 
55  inline result_type operator[]( R_xlen_t i ) const {
56  return fun( vec_1[i], vec_2[i], vec_3[i] );
57  }
58  inline R_xlen_t size() const { return vec_1.size() ; }
59 
60 private:
61  const EXT_1& vec_1 ;
62  const EXT_2& vec_2 ;
63  const EXT_3& vec_3 ;
65 } ;
66 
67 } // sugar
68 
69 template <
70  int RTYPE_1, bool NA_1, typename T_1,
71  int RTYPE_2, bool NA_2, typename T_2,
72  int RTYPE_3, bool NA_3, typename T_3,
73  typename Function
74  >
80  Function fun
81 ){
83 }
84 
85 } // Rcpp
86 
87 #endif
Rcpp::VectorBase< RTYPE_1, NA_1, T_1 > VEC_1
Definition: mapply_3.h:44
Rcpp::VectorBase< RTYPE_2, NA_2, T_2 > VEC_2
Definition: mapply_3.h:45
Rcpp::traits::Extractor< RTYPE_3, NA_3, T_3 >::type EXT_3
Definition: mapply_3.h:50
R_xlen_t size() const
Definition: mapply_3.h:58
result_type operator[](R_xlen_t i) const
Definition: mapply_3.h:55
const EXT_1 & vec_1
Definition: mapply_3.h:61
Mapply_3(const VEC_1 &vec_1_, const VEC_2 &vec_2_, const VEC_3 &vec_3_, Function fun_)
Definition: mapply_3.h:52
Rcpp::VectorBase< RTYPE_3, NA_3, T_3 > VEC_3
Definition: mapply_3.h:46
const EXT_3 & vec_3
Definition: mapply_3.h:63
const EXT_2 & vec_2
Definition: mapply_3.h:62
Rcpp::traits::Extractor< RTYPE_1, NA_1, T_1 >::type EXT_1
Definition: mapply_3.h:48
Rcpp::traits::Extractor< RTYPE_2, NA_2, T_2 >::type EXT_2
Definition: mapply_3.h:49
::Rcpp::traits::result_of< Function >::type result_type
Definition: mapply_3.h:42
Rcpp API.
Definition: algo.h:28
Function_Impl< PreserveStorage > Function
Definition: Function.h:122
sugar::Mapply_2< RTYPE, NA_1, T_1, NA_2, T_2, Function > mapply(const Rcpp::VectorBase< RTYPE, NA_1, T_1 > &t1, const Rcpp::VectorBase< RTYPE, NA_2, T_2 > &t2, Function fun)
Definition: mapply_2.h:126