123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- #ifdef __cplusplus
- #include <exception>
- extern "C" {
- #endif
- /* for raw pointer */
- #define SWIG_ConvertPtr(obj, pptr, type, flags) SWIG_R_ConvertPtr(obj, pptr, type, flags)
- #define SWIG_ConvertPtrAndOwn(obj,pptr,type,flags,own) SWIG_R_ConvertPtr(obj, pptr, type, flags)
- #define SWIG_NewPointerObj(ptr, type, flags) SWIG_R_NewPointerObj(ptr, type, flags)
- /* Remove global namespace pollution */
- #if !defined(SWIG_NO_R_NO_REMAP)
- # define R_NO_REMAP
- #endif
- #if !defined(SWIG_NO_STRICT_R_HEADERS)
- # define STRICT_R_HEADERS
- #endif
- #include <Rdefines.h>
- #include <Rversion.h>
- #include <stdlib.h>
- #include <assert.h>
- #if R_VERSION >= R_Version(2,6,0)
- #define VMAXTYPE void *
- #else
- #define VMAXTYPE char *
- #endif
- /*
- This is mainly a way to avoid having lots of local variables that may
- conflict with those in the routine.
- Change name to R_SWIG_Callb....
- */
- typedef struct RCallbackFunctionData {
- SEXP fun;
- SEXP userData;
- SEXP expr;
- SEXP retValue;
- int errorOccurred;
- SEXP el; /* Temporary pointer used in the construction of the expression to call the R function. */
- struct RCallbackFunctionData *previous; /* Stack */
- } RCallbackFunctionData;
- static RCallbackFunctionData *callbackFunctionDataStack;
- SWIGRUNTIME SEXP
- R_SWIG_debug_getCallbackFunctionData()
- {
- int n, i;
- SEXP ans;
- RCallbackFunctionData *p = callbackFunctionDataStack;
- n = 0;
- while(p) {
- n++;
- p = p->previous;
- }
- Rf_protect(ans = Rf_allocVector(VECSXP, n));
- for(p = callbackFunctionDataStack, i = 0; i < n; p = p->previous, i++)
- SET_VECTOR_ELT(ans, i, p->fun);
- Rf_unprotect(1);
- return(ans);
- }
- SWIGRUNTIME RCallbackFunctionData *
- R_SWIG_pushCallbackFunctionData(SEXP fun, SEXP userData)
- {
- RCallbackFunctionData *el;
- el = (RCallbackFunctionData *) calloc(1, sizeof(RCallbackFunctionData));
- el->fun = fun;
- el->userData = userData;
- el->previous = callbackFunctionDataStack;
- callbackFunctionDataStack = el;
- return(el);
- }
- SWIGRUNTIME SEXP
- R_SWIG_R_pushCallbackFunctionData(SEXP fun, SEXP userData)
- {
- R_SWIG_pushCallbackFunctionData(fun, userData);
- return R_NilValue;
- }
- SWIGRUNTIME RCallbackFunctionData *
- R_SWIG_getCallbackFunctionData()
- {
- if(!callbackFunctionDataStack) {
- Rf_error("Supposedly impossible error occurred in the SWIG callback mechanism."
- " No callback function data set.");
- }
-
- return callbackFunctionDataStack;
- }
- SWIGRUNTIME void
- R_SWIG_popCallbackFunctionData(int doFree)
- {
- RCallbackFunctionData *el = NULL;
- if(!callbackFunctionDataStack)
- return ; /* Error !!! */
- el = callbackFunctionDataStack ;
- callbackFunctionDataStack = callbackFunctionDataStack->previous;
- if(doFree)
- free(el);
- }
- /*
- Interface to S function
- is(obj, type)
- which is to be used to determine if an
- external pointer inherits from the right class.
- Ideally, we would like to be able to do this without an explicit call to the is() function.
- When the S4 class system uses its own SEXP types, then we will hopefully be able to do this
- in the C code.
- Should we make the expression static and preserve it to avoid the overhead of
- allocating each time.
- */
- SWIGRUNTIME int
- R_SWIG_checkInherits(SEXP obj, SEXP tag, const char *type)
- {
- SEXP e, val;
- int check_err = 0;
- Rf_protect(e = Rf_allocVector(LANGSXP, 3));
- SETCAR(e, Rf_install("extends"));
- SETCAR(CDR(e), Rf_mkString(CHAR(PRINTNAME(tag))));
- SETCAR(CDR(CDR(e)), Rf_mkString(type));
- val = R_tryEval(e, R_GlobalEnv, &check_err);
- Rf_unprotect(1);
- if(check_err)
- return(0);
- return(LOGICAL(val)[0]);
- }
- SWIGRUNTIME void *
- R_SWIG_resolveExternalRef(SEXP arg, const char * const type, const char * const argName, Rboolean nullOk)
- {
- void *ptr;
- SEXP orig = arg;
- if(TYPEOF(arg) != EXTPTRSXP)
- arg = GET_SLOT(arg, Rf_mkString("ref"));
-
- if(TYPEOF(arg) != EXTPTRSXP) {
- Rf_error("argument %s must be an external pointer (from an ExternalReference)", argName);
- }
- ptr = R_ExternalPtrAddr(arg);
- if(ptr == NULL && nullOk == (Rboolean) FALSE) {
- Rf_error("the external pointer (of type %s) for argument %s has value NULL", argName, type);
- }
- if(type[0] && R_ExternalPtrTag(arg) != Rf_install(type) && strcmp(type, "voidRef")
- && !R_SWIG_checkInherits(orig, R_ExternalPtrTag(arg), type)) {
- Rf_error("the external pointer for argument %s has tag %s, not the expected value %s",
- argName, CHAR(PRINTNAME(R_ExternalPtrTag(arg))), type);
- }
- return(ptr);
- }
- SWIGRUNTIME void
- R_SWIG_ReferenceFinalizer(SEXP el)
- {
- void *ptr = R_SWIG_resolveExternalRef(el, "", "<finalizer>", (Rboolean) 1);
- fprintf(stderr, "In R_SWIG_ReferenceFinalizer for %p\n", ptr);
- Rf_PrintValue(el);
- if(ptr) {
- if(TYPEOF(el) != EXTPTRSXP)
- el = GET_SLOT(el, Rf_mkString("ref"));
- if(TYPEOF(el) == EXTPTRSXP)
- R_ClearExternalPtr(el);
- free(ptr);
- }
- return;
- }
- typedef enum {R_SWIG_EXTERNAL, R_SWIG_OWNER } R_SWIG_Owner;
- SWIGRUNTIME SEXP
- SWIG_MakePtr(void *ptr, const char *typeName, R_SWIG_Owner owner)
- {
- SEXP external, r_obj;
- const char *p = typeName;
- if(typeName[0] == '_')
- p = typeName + 1;
- Rf_protect(external = R_MakeExternalPtr(ptr, Rf_install(typeName), R_NilValue));
- Rf_protect(r_obj = NEW_OBJECT(MAKE_CLASS((char *) typeName)));
- if(owner)
- R_RegisterCFinalizer(external, R_SWIG_ReferenceFinalizer);
- r_obj = SET_SLOT(r_obj, Rf_mkString((char *) "ref"), external);
- SET_S4_OBJECT(r_obj);
- Rf_unprotect(2);
- return(r_obj);
- }
- SWIGRUNTIME SEXP
- R_SWIG_create_SWIG_R_Array(const char *typeName, SEXP ref, int len)
- {
- SEXP arr;
- /*XXX remove the char * cast when we can. MAKE_CLASS should be declared appropriately. */
- Rf_protect(arr = NEW_OBJECT(MAKE_CLASS((char *) typeName)));
- Rf_protect(arr = R_do_slot_assign(arr, Rf_mkString("ref"), ref));
- Rf_protect(arr = R_do_slot_assign(arr, Rf_mkString("dims"), Rf_ScalarInteger(len)));
- Rf_unprotect(3);
- SET_S4_OBJECT(arr);
- return arr;
- }
- #define ADD_OUTPUT_ARG(result, pos, value, name) r_ans = AddOutputArgToReturn(pos, value, name, OutputValues);
- SWIGRUNTIME SEXP
- AddOutputArgToReturn(int pos, SEXP value, const char *name, SEXP output)
- {
- SET_VECTOR_ELT(output, pos, value);
- return(output);
- }
- /* Create a new pointer object */
- SWIGRUNTIMEINLINE SEXP
- SWIG_R_NewPointerObj(void *ptr, swig_type_info *type, int flags) {
- SEXP rptr = R_MakeExternalPtr(ptr,
- R_MakeExternalPtr(type, R_NilValue, R_NilValue), R_NilValue);
- SET_S4_OBJECT(rptr);
- return rptr;
- }
- /* Convert a pointer value */
- SWIGRUNTIMEINLINE int
- SWIG_R_ConvertPtr(SEXP obj, void **ptr, swig_type_info *ty, int flags) {
- void *vptr;
- if (!obj) return SWIG_ERROR;
- if (obj == R_NilValue) {
- if (ptr) *ptr = NULL;
- return SWIG_OK;
- }
- vptr = R_ExternalPtrAddr(obj);
- if (ty) {
- swig_type_info *to = (swig_type_info*)
- R_ExternalPtrAddr(R_ExternalPtrTag(obj));
- if (to == ty) {
- if (ptr) *ptr = vptr;
- } else {
- swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
- int newmemory = 0;
- if (ptr) *ptr = SWIG_TypeCast(tc,vptr,&newmemory);
- assert(!newmemory); /* newmemory handling not yet implemented */
- }
- } else {
- if (ptr) *ptr = vptr;
- }
- return SWIG_OK;
- }
- SWIGRUNTIME swig_module_info *
- SWIG_GetModule(void *SWIGUNUSEDPARM(clientdata)) {
- static void *type_pointer = (void *)0;
- return (swig_module_info *) type_pointer;
- }
- SWIGRUNTIME void
- SWIG_SetModule(void *v, swig_module_info *swig_module) {
- }
- typedef struct {
- void *pack;
- swig_type_info *ty;
- size_t size;
- } RSwigPacked;
- /* Create a new packed object */
- SWIGRUNTIMEINLINE SEXP RSwigPacked_New(void *ptr, size_t sz,
- swig_type_info *ty) {
- SEXP rptr;
- RSwigPacked *sobj =
- (RSwigPacked*) malloc(sizeof(RSwigPacked));
- if (sobj) {
- void *pack = malloc(sz);
- if (pack) {
- memcpy(pack, ptr, sz);
- sobj->pack = pack;
- sobj->ty = ty;
- sobj->size = sz;
- } else {
- sobj = 0;
- }
- }
- rptr = R_MakeExternalPtr(sobj, R_NilValue, R_NilValue);
- return rptr;
- }
- SWIGRUNTIME swig_type_info *
- RSwigPacked_UnpackData(SEXP obj, void *ptr, size_t size)
- {
- RSwigPacked *sobj =
- (RSwigPacked *)R_ExternalPtrAddr(obj);
- if (sobj->size != size) return 0;
- memcpy(ptr, sobj->pack, size);
- return sobj->ty;
- }
- SWIGRUNTIMEINLINE SEXP
- SWIG_R_NewPackedObj(void *ptr, size_t sz, swig_type_info *type) {
- return ptr ? RSwigPacked_New((void *) ptr, sz, type) : R_NilValue;
- }
- /* Convert a packed value value */
- SWIGRUNTIME int
- SWIG_R_ConvertPacked(SEXP obj, void *ptr, size_t sz, swig_type_info *ty) {
- swig_type_info *to = RSwigPacked_UnpackData(obj, ptr, sz);
- if (!to) return SWIG_ERROR;
- if (ty) {
- if (to != ty) {
- /* check type cast? */
- swig_cast_info *tc = SWIG_TypeCheck(to->name,ty);
- if (!tc) return SWIG_ERROR;
- }
- }
- return SWIG_OK;
- }
- #ifdef __cplusplus
- #define SWIG_exception_noreturn(code, msg) do { throw std::runtime_error(msg); } while(0)
- #else
- #define SWIG_exception_noreturn(code, msg) do { return result; } while(0)
- #endif
- #ifdef __cplusplus
- }
- #endif
|