1 #define SWIG_Error(code, msg) Rf_warning(msg); return Rf_ScalarLogical(NA_LOGICAL) 2 3 #define SWIG_fail return Rf_ScalarLogical(NA_LOGICAL) 4 5 /* for raw pointers */ 6 #define SWIG_ConvertPtr(oc, ptr, ty, flags) SWIG_R_ConvertPtr(oc, ptr, ty, flags) 7 #define SWIG_ConvertFunctionPtr(oc, ptr, ty) SWIG_R_ConvertPtr(oc, ptr, ty, 0) 8 #define SWIG_NewPointerObj(ptr, ty, flags) SWIG_R_NewPointerObj(ptr, ty, flags) 9 #define SWIG_NewFunctionPtrObj(ptr, ty) SWIG_R_NewPointerObj(ptr, ty, 0) 10 11 /* for raw packed data */ 12 #define SWIG_ConvertPacked(obj, ptr, sz, ty) SWIG_R_ConvertPacked(obj, ptr, sz, ty) 13 #define SWIG_NewPackedObj(ptr, sz, ty) SWIG_R_NewPackedObj(ptr, sz, ty) 14 15 /* for class or struct pointers */ 16 #define SWIG_ConvertInstance(obj, pptr, ty, flags) SWIG_ConvertPtr(obj, pptr, ty, flags) 17 #define SWIG_NewInstanceObj(ptr, ty, flags) SWIG_NewPointerObj(ptr, ty, flags) 18 19 /* for C++ member pointers, ie, member methods */ 20 #define SWIG_ConvertMember(obj, ptr, sz, ty) SWIG_R_ConvertPacked(obj, ptr, sz, ty) 21 #define SWIG_NewMemberObj(ptr, sz, ty) SWIG_R_NewPackedObj(ptr, sz, ty) 22 23 24 /* Runtime API */ 25 26 #define SWIG_GetModule(clientdata) SWIG_R_GetModule() 27 #define SWIG_SetModule(clientdata, pointer) SWIG_R_SetModule(pointer) 28 29 %fragment(SWIG_From_frag(long),"header") { 30 SWIGINTERNINLINE SEXP 31 SWIG_From_dec(long)(long value) 32 { 33 return Rf_ScalarInteger((int)value); 34 } 35 } 36 37 %fragment(SWIG_AsVal_frag(long),"header") { 38 SWIGINTERNINLINE int 39 SWIG_AsVal_dec(long)(SEXP obj, long *val) 40 { 41 if (val) *val = Rf_asInteger(obj); 42 return SWIG_OK; 43 } 44 } 45 46 47 %fragment(SWIG_From_frag(long long),"header") { 48 SWIGINTERNINLINE SEXP 49 SWIG_From_dec(long long)(long long value) 50 { 51 return Rf_ScalarInteger((int)value); 52 } 53 } 54 55 %fragment(SWIG_AsVal_frag(long long),"header") { 56 SWIGINTERNINLINE int 57 SWIG_AsVal_dec(long long)(SEXP obj, long long *val) 58 { 59 if (val) *val = Rf_asInteger(obj); 60 return SWIG_OK; 61 } 62 } 63 64 %fragment(SWIG_From_frag(unsigned long),"header") { 65 SWIGINTERNINLINE SEXP 66 SWIG_From_dec(unsigned long)(unsigned long value) 67 { 68 return Rf_ScalarInteger((int)value); 69 } 70 } 71 72 73 %fragment(SWIG_AsVal_frag(unsigned long),"header") { 74 SWIGINTERNINLINE int 75 SWIG_AsVal_dec(unsigned long)(SEXP obj, unsigned long *val) 76 { 77 if (val) *val = Rf_asInteger(obj); 78 return SWIG_OK; 79 } 80 } 81 82 83 %fragment(SWIG_From_frag(unsigned long long),"header") { 84 SWIGINTERNINLINE SEXP 85 SWIG_From_dec(unsigned long long)(unsigned long long value) 86 { 87 return Rf_ScalarInteger((int)value); 88 } 89 } 90 91 92 %fragment(SWIG_AsVal_frag(unsigned long long),"header") { 93 SWIGINTERNINLINE int 94 SWIG_AsVal_dec(unsigned long long)(SEXP obj, unsigned long long *val) 95 { 96 if (val) *val = Rf_asInteger(obj); 97 return SWIG_OK; 98 } 99 } 100 101 %fragment(SWIG_From_frag(double),"header") { 102 SWIGINTERNINLINE SEXP 103 SWIG_From_dec(double)(double value) 104 { 105 return Rf_ScalarReal(value); 106 } 107 } 108 109 110 %fragment(SWIG_AsVal_frag(double),"header") { 111 SWIGINTERNINLINE int 112 SWIG_AsVal_dec(double)(SEXP obj, double *val) 113 { 114 if (val) *val = Rf_asReal(obj); 115 return SWIG_OK; 116 } 117 } 118 119 %fragment("SWIG_AsCharPtrAndSize", "header") 120 { 121 SWIGINTERN int 122 SWIG_AsCharPtrAndSize(SEXP obj, char** cptr, size_t* psize, int *alloc) 123 { 124 if (cptr && Rf_isString(obj)) { 125 char *cstr = %const_cast(CHAR(STRING_ELT(obj, 0)), char *); 126 int len = strlen(cstr); 127 128 if (alloc) { 129 if (*alloc == SWIG_NEWOBJ) { 130 *cptr = %new_copy_array(cstr, len + 1, char); 131 *alloc = SWIG_NEWOBJ; 132 } else { 133 *cptr = cstr; 134 } 135 } else { 136 *cptr = %reinterpret_cast(malloc(len + 1), char *); 137 *cptr = strcpy(*cptr, cstr); 138 } 139 if (psize) *psize = len + 1; 140 return SWIG_OK; 141 } 142 return SWIG_TypeError; 143 } 144 } 145 146 %fragment("SWIG_strdup","header") 147 { 148 SWIGINTERN char * 149 SWIG_strdup(const char *str) 150 { 151 char *newstr = %reinterpret_cast(malloc(strlen(str) + 1), char *); 152 return strcpy(newstr, str); 153 } 154 } 155 156 # This is modified from the R header files 157 158 %fragment("SWIG_FromCharPtrAndSize","header") 159 { 160 SWIGINTERN SEXP 161 SWIG_FromCharPtrAndSize(const char* carray, size_t size) 162 { 163 SEXP t, c; 164 if (!carray) return R_NilValue; 165 /* See R internals document 1.10. 166 MkCharLen was introduced in 2.7.0. Use that instead of hand 167 creating vector. 168 169 Starting in 2.8.0 creating strings via vectors was deprecated in 170 order to allow for use of CHARSXP caches. */ 171 172 Rf_protect(t = Rf_allocVector(STRSXP, 1)); 173 %#if R_VERSION >= R_Version(2,7,0) 174 c = Rf_mkCharLen(carray, size); 175 %#else 176 c = Rf_allocVector(CHARSXP, size); 177 strncpy((char *)CHAR(c), carray, size); 178 %#endif 179 SET_STRING_ELT(t, 0, c); 180 Rf_unprotect(1); 181 return t; 182 } 183 } 184