|
3 | 3 | // dispatch.h: Rcpp R/C++ interface class library -- macros for dispatch
|
4 | 4 | //
|
5 | 5 | // Copyright (C) 2012 - 2016 Dirk Eddelbuettel and Romain Francois
|
6 |
| -// Copyright (C) 2016 Dirk Eddelbuettel, Romain Francois, Artem Klevtsov and Nathan Russell |
| 6 | +// Copyright (C) 2016 - 2025 Dirk Eddelbuettel, Romain Francois, Artem Klevtsov and Nathan Russell |
7 | 7 | //
|
8 | 8 | // This file is part of Rcpp.
|
9 | 9 | //
|
|
23 | 23 | #ifndef Rcpp__macros__dispatch_h
|
24 | 24 | #define Rcpp__macros__dispatch_h
|
25 | 25 |
|
26 |
| -// The variadic macros below incorporate techniques presented by |
| 26 | +// The variadic macros below incorporate techniques presented by |
27 | 27 | // Stack Overflow user Richard Hansen in this answer
|
28 | 28 | //
|
29 |
| -// http://stackoverflow.com/a/11172679/1869097 |
| 29 | +// http://stackoverflow.com/a/11172679/1869097 |
30 | 30 | //
|
31 | 31 | // and are necessary to avoid the use of GNU compiler extensions.
|
32 | 32 |
|
33 |
| -#ifdef RCPP_USING_CXX11 |
34 |
| - |
35 | 33 | #define ___RCPP_HANDLE_CASE___(___RTYPE___, ___FUN___, ___RCPPTYPE___, ...) \
|
36 | 34 | case ___RTYPE___: \
|
37 | 35 | return ___FUN___(::Rcpp::___RCPPTYPE___<___RTYPE___>(RCPP_MACRO_FIRST(__VA_ARGS__)) \
|
|
77 | 75 | #define RCPP_MACRO_SELECT_25TH(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, \
|
78 | 76 | a13, a14, a15, a16, a17, a18, a19, a20, a21, a22, a23, a24, a25, ...) a25
|
79 | 77 |
|
80 |
| -#else |
81 |
| - |
82 |
| -#define ___RCPP_HANDLE_CASE___(___RTYPE___, ___FUN___, ___OBJECT___, \ |
83 |
| - ___RCPPTYPE___) \ |
84 |
| - case ___RTYPE___: \ |
85 |
| - return ___FUN___(::Rcpp::___RCPPTYPE___<___RTYPE___>(___OBJECT___)); |
86 |
| - |
87 |
| -#define ___RCPP_RETURN___(__FUN__, __SEXP__, __RCPPTYPE__) \ |
88 |
| - SEXP __TMP__ = __SEXP__; \ |
89 |
| - switch (TYPEOF(__TMP__)) { \ |
90 |
| - ___RCPP_HANDLE_CASE___(INTSXP, __FUN__, __TMP__, __RCPPTYPE__) \ |
91 |
| - ___RCPP_HANDLE_CASE___(REALSXP, __FUN__, __TMP__, __RCPPTYPE__) \ |
92 |
| - ___RCPP_HANDLE_CASE___(RAWSXP, __FUN__, __TMP__, __RCPPTYPE__) \ |
93 |
| - ___RCPP_HANDLE_CASE___(LGLSXP, __FUN__, __TMP__, __RCPPTYPE__) \ |
94 |
| - ___RCPP_HANDLE_CASE___(CPLXSXP, __FUN__, __TMP__, __RCPPTYPE__) \ |
95 |
| - ___RCPP_HANDLE_CASE___(STRSXP, __FUN__, __TMP__, __RCPPTYPE__) \ |
96 |
| - ___RCPP_HANDLE_CASE___(VECSXP, __FUN__, __TMP__, __RCPPTYPE__) \ |
97 |
| - ___RCPP_HANDLE_CASE___(EXPRSXP, __FUN__, __TMP__, __RCPPTYPE__) \ |
98 |
| - default: \ |
99 |
| - throw std::range_error("Not a vector"); \ |
100 |
| - } |
101 |
| - |
102 |
| -#define RCPP_RETURN_VECTOR(_FUN_, _SEXP_) \ |
103 |
| - ___RCPP_RETURN___(_FUN_, _SEXP_, Vector) |
104 |
| -#define RCPP_RETURN_MATRIX(_FUN_, _SEXP_) \ |
105 |
| - ___RCPP_RETURN___(_FUN_, _SEXP_, Matrix) |
106 |
| -#endif |
107 |
| - |
108 | 78 | #endif
|
0 commit comments