// In C ---------------------------------------- #include #include #include "debugging_odbc.h" SEXP check_thisHandle(SEXP chan, SEXP id) { SEXP ptr = getAttrib(chan, install("handle_ptr")); pRODBCHandle thisHandle = R_ExternalPtrAddr(ptr); return ScalarLogical(thisHandle && TRUE); } SEXP check_ptrType(SEXP chan, SEXP id) { SEXP ptr = getAttrib(chan, install("handle_ptr")); pRODBCHandle thisHandle = R_ExternalPtrAddr(ptr); return ScalarLogical(TYPEOF(ptr) == EXTPTRSXP && TRUE); } SEXP check_thisHandle_channel(SEXP chan, SEXP id) { SEXP ptr = getAttrib(chan, install("handle_ptr")); pRODBCHandle thisHandle = R_ExternalPtrAddr(ptr); return ScalarLogical(thisHandle->channel == asInteger(chan) && TRUE); } SEXP check_thisHandle_id(SEXP chan, SEXP id) { SEXP ptr = getAttrib(chan, install("handle_ptr")); pRODBCHandle thisHandle = R_ExternalPtrAddr(ptr); return ScalarLogical(thisHandle->id == asInteger(id) && TRUE); } // // # -------------------------- // # check_thisHandle <- cfunction(c(chan = "SEXP", id = "SEXP", include="~/git/orch/src/misc/debugging_odbc.h"), // # '// check_thisHandle(SEXP chan, SEXP id) // # { // # SEXP ptr = getAttrib(chan, install("handle_ptr")); // # pRODBCHandle thisHandle = R_ExternalPtrAddr(ptr); // // # return ScalarLogical(thisHandle); // # }') // // // # check_ptrType <- cfunction(c(chan = "SEXP", id = "SEXP", include="~/git/orch/src/misc/debugging_odbc.h"), // # '// check_ptrType(SEXP chan, SEXP id) // # { // # SEXP ptr = getAttrib(chan, install("handle_ptr")); // # pRODBCHandle thisHandle = R_ExternalPtrAddr(ptr); // // # return ScalarLogical(TYPEOF(ptr) == EXTPTRSXP); // # }') // // // # check_thisHandle_channel <- cfunction(c(chan = "SEXP", id = "SEXP", include="~/git/orch/src/misc/debugging_odbc.h"), // # '// check_thisHandle_channel(SEXP chan, SEXP id) // # { // # SEXP ptr = getAttrib(chan, install("handle_ptr")); // # pRODBCHandle thisHandle = R_ExternalPtrAddr(ptr); // // # return ScalarLogical(thisHandle->channel == asInteger(chan)); // # }') // // // # check_thisHandle_id <- cfunction(c(chan = "SEXP", id = "SEXP", include="~/git/orch/src/misc/debugging_odbc.h"), // # '// check_thisHandle_id(SEXP chan, SEXP id) // # { // # SEXP ptr = getAttrib(chan, install("handle_ptr")); // # pRODBCHandle thisHandle = R_ExternalPtrAddr(ptr); // // # return ScalarLogical(thisHandle->id == asInteger(id)); // # }') // // //