static void* getGDALObjPtr(SEXP sxpObj) { SEXP sxpHandle = getObjHandle(sxpObj); void *extPtr = R_ExternalPtrAddr(sxpHandle); if (extPtr == NULL) error("Null external pointer\n"); return(extPtr); }
SEXP RGDAL_CloseDataset(SEXP sxpDataset) { SEXP sxpHandle = getObjHandle(sxpDataset); if (sxpHandle == NULL) return(R_NilValue); RGDAL_CloseHandle(sxpHandle); return(R_NilValue); }
SEXP isGDALObjPtrNULL(SEXP sxpObj) { SEXP sxpHandle = getObjHandle(sxpObj); SEXP res; PROTECT(res = NEW_LOGICAL(1)); LOGICAL_POINTER(res)[0] = FALSE; void *extPtr = R_ExternalPtrAddr(sxpHandle); if (extPtr == NULL) LOGICAL_POINTER(res)[0] = TRUE; UNPROTECT(1); return(res); }
SEXP RGDAL_CloseDataset(SEXP sxpDataset) { SEXP sxpHandle = getObjHandle(sxpDataset); if (sxpHandle == NULL) return(R_NilValue); const char *classname = asString(getAttrib(sxpDataset, R_ClassSymbol)); if (strcmp(classname, "GDALTransientDataset") == 0) { RGDAL_DeleteHandle(sxpHandle); } else { RGDAL_CloseHandle(sxpHandle); } return(R_NilValue); }