| |
| /* These map the primitive C types to the appropriate R type |
| for use in class representations. |
| */ |
| |
| %typemap("rtype") int, int *, int & "numeric"; |
| %apply int {size_t} |
| %apply int {std::size_t} |
| %apply int {ptrdiff_t} |
| %apply int {std::ptrdiff_t} |
| |
| %typemap("rtype") long, long * "numeric"; |
| %typemap("rtype") unsigned long, |
| unsigned long * "numeric"; |
| %typemap("rtype") unsigned int, |
| unsigned int * "numeric"; |
| %typemap("rtype") double, double*, double & "numeric"; |
| %typemap("rtype") float, float *, float & "numeric"; |
| %typemap("rtype") char *, char ** "character"; |
| %typemap("rtype") char "character"; |
| %typemap("rtype") string, string *, string & "character"; |
| %typemap("rtype") std::string, std::string *, std::string & "character"; |
| %typemap("rtype") bool, bool * "logical"; |
| %typemap("rtype") enum SWIGTYPE "character"; |
| %typemap("rtype") enum SWIGTYPE * "character"; |
| %typemap("rtype") enum SWIGTYPE & "character"; |
| %typemap("rtype") SWIGTYPE * "$R_class"; |
| %typemap("rtype") SWIGTYPE & "$R_class"; |
| %typemap("rtype") SWIGTYPE "$&R_class"; |
| |
| |
| |
| /* Have to be careful that as(x, "numeric") is different from as.numeric(x). |
| The latter makes a REALSXP, whereas the former leaves an INTSXP as an |
| INTSXP. |
| */ |
| |
| |
| %typemap(scoercein) int, int *, int & |
| %{ $input = as($input, "integer"); %} |
| %typemap(scoercein) ptrdiff_t, ptrdiff_t *, ptrdiff_t & |
| %{ $input = as($input, "integer"); %} |
| %typemap(scoercein) unsigned long, unsigned long *, unsigned long & |
| %{ $input = as($input, "integer"); %} |
| %typemap(scoercein) unsigned int, unsigned int *, unsigned int & |
| %{ $input = as($input, "integer"); %} |
| %typemap(scoercein) double, double *, double & |
| %{ $input = as($input, "numeric"); %} |
| %typemap(scoercein) float, float *, float & |
| %{ $input = as($input, "numeric"); %} |
| %typemap(scoercein) char, char *, char & |
| %{ $input = as($input, "character"); %} |
| %typemap(scoercein) string, string *, string & |
| %{ $input = as($input, "character"); %} |
| %typemap(scoercein) std::string, std::string *, std::string & |
| %{ $input = as($input, "character"); %} |
| %typemap(scoercein) enum SWIGTYPE |
| %{ $input = enumToInteger($input, "$R_class") %} |
| %typemap(scoercein) enum SWIGTYPE & |
| %{ $input = enumToInteger($input, "$R_class") %} |
| %typemap(scoercein) enum SWIGTYPE * |
| %{ $input = enumToInteger($input, "$R_class") %} |
| |
| %typemap(scoercein) SWIGTYPE * |
| %{ $input = coerceIfNotSubclass($input, "$R_class") %} |
| |
| %typemap(scoercein) SWIGTYPE & |
| %{ $input = coerceIfNotSubclass($input, "$R_class") %} |
| |
| %typemap(scoercein) SWIGTYPE |
| %{ $input = coerceIfNotSubclass($input, "$&R_class") %} |
| |
| |
| %typemap(scoercein) SWIGTYPE[ANY] |
| %{ |
| if(is.list($input)) |
| assert(all(sapply($input, class) == "$R_class")) |
| %} |
| |
| |
| /* **************************************************************** */ |
| |
| %typemap(scoercein) bool, bool *, bool & |
| "$input = as.logical($input) "; |
| |
| %typemap(scoercein) int, |
| int *, |
| int &, |
| int[ANY], |
| size_t, |
| std::size_t, |
| size_t &, |
| std::size_t & |
| "$input = as.integer($input) "; |
| |
| |
| %typemap(scoercein) unsigned int, |
| unsigned long, |
| double, |
| float, |
| long, |
| long long, |
| unsigned int[], |
| unsigned long[], |
| double[], |
| float[], |
| long[], |
| long long[], |
| unsigned int[ANY], |
| unsigned long[ANY], |
| double[ANY], |
| float[ANY], |
| long[ANY], |
| long long[ANY], |
| unsigned int *, |
| unsigned long *, |
| double*, |
| float*, |
| long*, |
| long long * |
| %{ $input = as.numeric($input) %} |
| |
| |
| %typemap(scoercein) char *, string, std::string, |
| string &, std::string & |
| %{ $input = as($input, "character") %} |
| |
| %typemap(scoerceout) enum SWIGTYPE |
| %{ $result = enumFromInteger($result, "$R_class") %} |
| |
| %typemap(scoerceout) enum SWIGTYPE & |
| %{ $result = enumFromInteger($result, "$R_class") %} |
| |
| %typemap(scoerceout) enum SWIGTYPE * |
| %{ $result = enumToInteger($result, "$R_class") %} |
| |
| |
| %typemap(scoerceout) SWIGTYPE |
| %{ class($result) <- "$&R_class" %} |
| |
| %typemap(scoerceout) SWIGTYPE & |
| %{ class($result) <- "$R_class" %} |
| |
| %typemap(scoerceout) SWIGTYPE * |
| %{ class($result) <- "$R_class" %} |
| |
| /* Override the SWIGTYPE * above. */ |
| %typemap(scoerceout) char, |
| char *, |
| char &, |
| unsigned int, |
| unsigned int &, |
| unsigned long, |
| unsigned long &, |
| double, |
| double &, |
| float, |
| float &, |
| long, |
| long &, |
| long long, |
| long long &, |
| int, |
| int &, |
| bool, |
| bool &, |
| string, |
| std::string, |
| string &, |
| std::string &, |
| size_t, |
| std::size_t, |
| size_t &, |
| std::size_t &, |
| void |
| %{ %} |
| |
| |
| #if 0 |
| Just examining the values for a SWIGTYPE. |
| |
| %typemap(scoerceout) SWIGTYPE %{ |
| |
| name = $1_name |
| type = $1_type |
| ltype = $1_ltype |
| |
| mangle = $1_mangle |
| descriptor = $1_descriptor |
| |
| pointer type = $*1_type |
| pointer ltype = $*1_ltype |
| |
| pointer descriptor = $*1_descriptor |
| basetype = $*_basetype |
| |
| %} |
| #endif |
| |
| |