Rcpp Version 0.9.10
dpq.h
Go to the documentation of this file.
00001 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 4 -*-
00002 //
00003 // dpq.h: Rcpp R/C++ interface class library -- normal distribution
00004 //
00005 // Copyright (C) 2010 - 2011 Dirk Eddelbuettel and Romain Francois
00006 //
00007 // This file is part of Rcpp.
00008 //
00009 // Rcpp is free software: you can redistribute it and/or modify it
00010 // under the terms of the GNU General Public License as published by
00011 // the Free Software Foundation, either version 2 of the License, or
00012 // (at your option) any later version.
00013 //
00014 // Rcpp is distributed in the hope that it will be useful, but
00015 // WITHOUT ANY WARRANTY; without even the implied warranty of
00016 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00017 // GNU General Public License for more details.
00018 //
00019 // You should have received a copy of the GNU General Public License
00020 // along with Rcpp.  If not, see <http://www.gnu.org/licenses/>.
00021 
00022 #ifndef Rcpp__stats__dpq__dpq_h
00023 #define Rcpp__stats__dpq__dpq_h
00024 
00025 #include <Rcpp/stats/dpq/macros.h>
00026 
00027 namespace Rcpp {
00028 namespace stats {
00029 
00030         // D
00031         
00032         template <int RTYPE, bool NA, typename T>
00033         class D0 : public Rcpp::VectorBase< REALSXP, NA, D0<RTYPE,NA,T> > {
00034         public:
00035                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00036                 typedef double (*FunPtr)(double,int) ;
00037                 
00038                 D0( FunPtr ptr_, const VEC_TYPE& vec_, bool log_ ) : 
00039                         ptr(ptr_), vec(vec_), log(log_) {}
00040                 
00041                 inline double operator[]( int i) const {
00042                         return ptr( vec[i], log );
00043                 }
00044                 
00045                 inline int size() const { return vec.size(); }
00046                 
00047         private:
00048                 FunPtr ptr ;
00049                 const VEC_TYPE& vec;
00050                 int log;
00051         } ;
00052 
00053         template <int RTYPE, bool NA, typename T>
00054         class D1 : public Rcpp::VectorBase< REALSXP, NA, D1<RTYPE,NA,T> > {
00055         public:
00056                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00057                 typedef double (*FunPtr)(double,double,int) ;
00058                 
00059                 D1( FunPtr ptr_, const VEC_TYPE& vec_, double p0_ , bool log_) : 
00060                         ptr(ptr_), vec(vec_), p0(p0_), log(log_) {}
00061                 
00062                 inline double operator[]( int i) const {
00063                         return ptr( vec[i], p0, log );
00064                 }
00065                 
00066                 inline int size() const { return vec.size(); }
00067                 
00068         private:
00069                 FunPtr ptr ;
00070                 const VEC_TYPE& vec;
00071                 double p0 ;
00072                 int log;
00073         } ;
00074         
00075         template <int RTYPE, bool NA, typename T>
00076         class D2 : public Rcpp::VectorBase< REALSXP, NA, D2<RTYPE,NA,T> > {
00077         public:
00078                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00079                 typedef double (*FunPtr)(double,double,double,int) ;
00080                 
00081                 D2( FunPtr ptr_, const VEC_TYPE& vec_, double p0_, double p1_ , bool log_) : 
00082                         ptr(ptr_), vec(vec_), p0(p0_), p1(p1_), log(log_) {}
00083                 
00084                 inline double operator[]( int i) const {
00085                         return ptr( vec[i], p0, p1, log );
00086                 }
00087                 
00088                 inline int size() const { return vec.size(); }
00089                 
00090         private:
00091                 FunPtr ptr ;
00092                 const VEC_TYPE& vec;
00093                 double p0, p1 ;
00094                 int log;
00095         } ;
00096 
00097         template <int RTYPE, bool NA, typename T>
00098         class D3 : public Rcpp::VectorBase< REALSXP, NA, D3<RTYPE,NA,T> > {
00099         public:
00100                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00101                 typedef double (*FunPtr)(double,double,double,double,int) ;
00102                 
00103                 D3( FunPtr ptr_, const VEC_TYPE& vec_, double p0_, double p1_, double p2_ , bool log_ ) : 
00104                         ptr(ptr_), vec(vec_), p0(p0_), p1(p1_), p2(p2_), log(log_) {}
00105                 
00106                 inline double operator[]( int i) const {
00107                         return ptr( vec[i], p0, p1, p2, log );
00108                 }
00109                 
00110                 inline int size() const { return vec.size(); }
00111                 
00112         private:
00113                 FunPtr ptr ;
00114                 const VEC_TYPE& vec;
00115                 double p0, p1, p2 ;
00116                 int log;
00117         } ;
00118         
00119         // P
00120 
00121         
00122         template <int RTYPE, bool NA, typename T>
00123         class P0 : public Rcpp::VectorBase< REALSXP, NA, P0<RTYPE,NA,T> >{
00124         public:
00125                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00126                 typedef double (*FunPtr)(double,int,int) ;
00127                 
00128                 P0( FunPtr ptr_, const VEC_TYPE& vec_,
00129                            bool lower_tail = true, bool log_ = false ) : 
00130                         ptr(ptr_), vec(vec_), lower(lower_tail), log(log_) {}
00131                 
00132                 inline double operator[]( int i) const {
00133                         return ptr( vec[i], lower, log );
00134                 }
00135                 
00136                 inline int size() const { return vec.size(); }
00137                 
00138         private:
00139                 FunPtr ptr ;
00140                 const VEC_TYPE& vec;
00141                 int lower, log;
00142         
00143         };
00144 
00145 
00146         template <int RTYPE, bool NA, typename T>
00147         class P1 : public Rcpp::VectorBase< REALSXP, NA, P1<RTYPE,NA,T> >{
00148         public:
00149                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00150                 typedef double (*FunPtr)(double,double,int,int) ;
00151                 
00152                 P1( FunPtr ptr_, const VEC_TYPE& vec_, double p0_, 
00153                            bool lower_tail = true, bool log_ = false ) : 
00154                         ptr(ptr_), vec(vec_), p0(p0_), lower(lower_tail), log(log_) {}
00155                 
00156                 inline double operator[]( int i) const {
00157                         return ptr( vec[i], p0, lower, log );
00158                 }
00159                 
00160                 inline int size() const { return vec.size(); }
00161                 
00162         private:
00163                 FunPtr ptr ;
00164                 const VEC_TYPE& vec;
00165                 double p0 ;
00166                 int lower, log;
00167         
00168         };
00169 
00170 
00171         template <int RTYPE, bool NA, typename T>
00172         class P2 : public Rcpp::VectorBase< REALSXP, NA, P2<RTYPE,NA,T> >{
00173         public:
00174                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00175                 typedef double (*FunPtr)(double,double,double,int,int) ;
00176                 
00177                 P2( FunPtr ptr_, const VEC_TYPE& vec_, double p0_, double p1_, 
00178                            bool lower_tail = true, bool log_ = false ) : 
00179                         ptr(ptr_), vec(vec_), p0(p0_), p1(p1_), lower(lower_tail), log(log_) {}
00180                 
00181                 inline double operator[]( int i) const {
00182                         return ptr( vec[i], p0, p1, lower, log );
00183                 }
00184                 
00185                 inline int size() const { return vec.size(); }
00186                 
00187         private:
00188                 FunPtr ptr ;
00189                 const VEC_TYPE& vec;
00190                 double p0, p1 ;
00191                 int lower, log;
00192         
00193         };
00194 
00195         template <int RTYPE, bool NA, typename T>
00196         class P3 : public Rcpp::VectorBase< REALSXP, NA, P3<RTYPE,NA,T> >{
00197         public:
00198                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00199                 typedef double (*FunPtr)(double,double,double,double,int,int) ;
00200                 
00201                 P3( FunPtr ptr_, const VEC_TYPE& vec_, double p0_, double p1_, double p2_,  
00202                            bool lower_tail = true, bool log_ = false ) : 
00203                         ptr(ptr_), vec(vec_), p0(p0_), p1(p1_), p2(p2_), lower(lower_tail), log(log_) {}
00204                 
00205                 inline double operator[]( int i) const {
00206                         return ptr( vec[i], p0, p1, p2, lower, log );
00207                 }
00208                 
00209                 inline int size() const { return vec.size(); }
00210                 
00211         private:
00212                 FunPtr ptr ;
00213                 const VEC_TYPE& vec;
00214                 double p0, p1,p2 ;
00215                 int lower, log;
00216         
00217         };
00218         
00219         // Q
00220         
00221         
00222         template <int RTYPE, bool NA, typename T>
00223         class Q0 : public Rcpp::VectorBase< REALSXP, NA, Q0<RTYPE,NA,T> >{
00224         public:
00225                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00226                 typedef double (*FunPtr)(double,int,int) ;
00227                 
00228                 Q0( FunPtr ptr_, const VEC_TYPE& vec_,
00229                            bool lower_tail = true, bool log_ = false ) : 
00230                         ptr(ptr_), vec(vec_), lower(lower_tail), log(log_) {}
00231                 
00232                 inline double operator[]( int i) const {
00233                         return ptr( vec[i], lower, log );
00234                 }
00235                 
00236                 inline int size() const { return vec.size(); }
00237                 
00238         private:
00239                 FunPtr ptr ;
00240                 const VEC_TYPE& vec;
00241                 int lower, log;
00242         
00243         };
00244 
00245         template <int RTYPE, bool NA, typename T>
00246         class Q1 : public Rcpp::VectorBase< REALSXP, NA, Q1<RTYPE,NA,T> >{
00247         public:
00248                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00249                 typedef double (*FunPtr)(double,double,int,int) ;
00250                 
00251                 Q1( FunPtr ptr_, const VEC_TYPE& vec_, double p0_,
00252                            bool lower_tail = true, bool log_ = false ) : 
00253                         ptr(ptr_), vec(vec_), p0(p0_), lower(lower_tail), log(log_) {}
00254                 
00255                 inline double operator[]( int i) const {
00256                         return ptr( vec[i], p0, lower, log );
00257                 }
00258                 
00259                 inline int size() const { return vec.size(); }
00260                 
00261         private:
00262                 FunPtr ptr ;
00263                 const VEC_TYPE& vec;
00264                 double p0 ;
00265                 int lower, log;
00266         
00267         };
00268 
00269         template <int RTYPE, bool NA, typename T>
00270         class Q2 : public Rcpp::VectorBase< REALSXP, NA, Q2<RTYPE,NA,T> >{
00271         public:
00272                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00273                 typedef double (*FunPtr)(double,double,double,int,int) ;
00274                 
00275                 Q2( FunPtr ptr_, const VEC_TYPE& vec_, double p0_, double p1_,
00276                            bool lower_tail = true, bool log_ = false ) : 
00277                         ptr(ptr_), vec(vec_), p0(p0_), p1(p1_), lower(lower_tail), log(log_) {}
00278                 
00279                 inline double operator[]( int i) const {
00280                         return ptr( vec[i], p0, p1, lower, log );
00281                 }
00282                 
00283                 inline int size() const { return vec.size(); }
00284                 
00285         private:
00286                 FunPtr ptr ;
00287                 const VEC_TYPE& vec;
00288                 double p0, p1 ;
00289                 int lower, log;
00290         
00291         };
00292 
00293         template <int RTYPE, bool NA, typename T>
00294         class Q3 : public Rcpp::VectorBase< REALSXP, NA, Q3<RTYPE,NA,T> >{
00295         public:
00296                 typedef typename Rcpp::VectorBase<RTYPE,NA,T> VEC_TYPE ;
00297                 typedef double (*FunPtr)(double,double,double,double,int,int) ;
00298                 
00299                 Q3( FunPtr ptr_, const VEC_TYPE& vec_, double p0_, double p1_, double p2_, 
00300                            bool lower_tail = true, bool log_ = false ) : 
00301                         ptr(ptr_), vec(vec_), p0(p0_), p1(p1_), p2(p2_), lower(lower_tail), log(log_) {}
00302                 
00303                 inline double operator[]( int i) const {
00304                         return ptr( vec[i], p0, p1, p2, lower, log );
00305                 }
00306                 
00307                 inline int size() const { return vec.size(); }
00308                 
00309         private:
00310                 FunPtr ptr ;
00311                 const VEC_TYPE& vec;
00312                 double p0, p1, p2 ;
00313                 int lower, log;
00314         
00315         };
00316 
00317         
00318 } // stats
00319 } // Rcpp
00320 
00321 #define RCPP_DPQ_0(__NAME__,__D__,__P__,__Q__)                                         \
00322 namespace Rcpp {                                                                       \
00323 template <int RTYPE, bool NA, typename T>                                                         \
00324 inline stats::D0<RTYPE,NA,T> d##__NAME__(                                                    \
00325         const Rcpp::VectorBase<RTYPE,NA,T>& x, bool log = false                          \
00326 ) {                                                                                    \
00327         return stats::D0<RTYPE,NA,T>( __D__, x, log );                                           \
00328 }                                                                                      \
00329 template <int RTYPE, bool NA, typename T>                                                         \
00330 inline stats::P0<RTYPE,NA,T> p##__NAME__(                                                    \
00331         const Rcpp::VectorBase<RTYPE,NA,T>& x, bool lower = true, bool log = false       \
00332 ) {                                                                                    \
00333         return stats::P0<RTYPE,NA,T>( __P__, x, lower, log );                                    \
00334 }                                                                                      \
00335 template <int RTYPE, bool NA, typename T>                                                         \
00336 inline stats::Q0<RTYPE,NA,T> q##__NAME__(                                                    \
00337         const Rcpp::VectorBase<RTYPE,NA,T>& x, bool lower = true, bool log = false       \
00338 ) {                                                                                    \
00339         return stats::Q0<RTYPE,NA,T>( __Q__, x, lower, log );                                    \
00340 } }
00341 
00342 
00343 #define RCPP_DPQ_1(__NAME__,__D__,__P__,__Q__)                                         \
00344 namespace Rcpp {                                                                       \
00345 template <int RTYPE, bool NA, typename T>                                                         \
00346 inline stats::D1<RTYPE,NA,T> d##__NAME__(                                                    \
00347         const Rcpp::VectorBase<RTYPE,NA,T>& x, double p0, bool log = false                          \
00348 ) {                                                                                    \
00349         return stats::D1<RTYPE,NA,T>( __D__, x, p0, log );                                           \
00350 }                                                                                      \
00351 template <int RTYPE, bool NA, typename T>                                                         \
00352 inline stats::P1<RTYPE,NA,T> p##__NAME__(                                                    \
00353         const Rcpp::VectorBase<RTYPE,NA,T>& x, double p0, bool lower = true, bool log = false       \
00354 ) {                                                                                    \
00355         return stats::P1<RTYPE,NA,T>( __P__, x, p0, lower, log );                                    \
00356 }                                                                                      \
00357 template <int RTYPE, bool NA, typename T>                                                         \
00358 inline stats::Q1<RTYPE,NA,T> q##__NAME__(                                                    \
00359         const Rcpp::VectorBase<RTYPE,NA,T>& x, double p0, bool lower = true, bool log = false       \
00360 ) {                                                                                    \
00361         return stats::Q1<RTYPE,NA,T>( __Q__, x, p0, lower, log );                                    \
00362 } }
00363 
00364 
00365 
00366 #define RCPP_DPQ_2(__NAME__,__D__,__P__,__Q__)                                         \
00367 namespace Rcpp {                                                                       \
00368 template <int RTYPE, bool NA, typename T>                                                         \
00369 inline stats::D2<RTYPE,NA,T> d##__NAME__(                                                    \
00370         const Rcpp::VectorBase<RTYPE,NA,T>& x, double p0, double p1, bool log = false                          \
00371 ) {                                                                                    \
00372         return stats::D2<RTYPE,NA,T>( __D__, x, p0, p1, log );                                           \
00373 }                                                                                      \
00374 template <int RTYPE, bool NA, typename T>                                                         \
00375 inline stats::P2<RTYPE,NA,T> p##__NAME__(                                                    \
00376         const Rcpp::VectorBase<RTYPE,NA,T>& x, double p0, double p1, bool lower = true, bool log = false       \
00377 ) {                                                                                    \
00378         return stats::P2<RTYPE,NA,T>( __P__, x, p0, p1, lower, log );                                    \
00379 }                                                                                      \
00380 template <int RTYPE, bool NA, typename T>                                                         \
00381 inline stats::Q2<RTYPE,NA,T> q##__NAME__(                                                    \
00382         const Rcpp::VectorBase<RTYPE,NA,T>& x, double p0, double p1, bool lower = true, bool log = false       \
00383 ) {                                                                                    \
00384         return stats::Q2<RTYPE,NA,T>( __Q__, x, p0, p1, lower, log );                                    \
00385 } }
00386 
00387 
00388 
00389 #define RCPP_DPQ_3(__NAME__,__D__,__P__,__Q__)                                         \
00390 namespace Rcpp {                                                                       \
00391 template <int RTYPE, bool NA, typename T>                                                         \
00392 inline stats::D3<RTYPE,NA,T> d##__NAME__(                                                    \
00393         const Rcpp::VectorBase<RTYPE,NA,T>& x, double p0, double p1, double p2, bool log = false                          \
00394 ) {                                                                                    \
00395         return stats::D3<RTYPE,NA,T>( __D__, x, p0, p1, p2, log );                                           \
00396 }                                                                                      \
00397 template <int RTYPE, bool NA, typename T>                                                         \
00398 inline stats::P3<RTYPE,NA,T> p##__NAME__(                                                    \
00399         const Rcpp::VectorBase<RTYPE,NA,T>& x, double p0, double p1, double p2, bool lower = true, bool log = false       \
00400 ) {                                                                                    \
00401         return stats::P3<RTYPE,NA,T>( __P__, x, p0, p1, p2, lower, log );                                    \
00402 }                                                                                      \
00403 template <int RTYPE, bool NA, typename T>                                                         \
00404 inline stats::Q3<RTYPE,NA,T> q##__NAME__(                                                    \
00405         const Rcpp::VectorBase<RTYPE,NA,T>& x, double p0, double p1, double p2, bool lower = true, bool log = false       \
00406 ) {                                                                                    \
00407         return stats::Q3<RTYPE,NA,T>( __Q__, x, p0, p1, p2, lower, log );                                    \
00408 } }
00409 
00410 
00411 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Friends Defines