コード例 #1
0
ファイル: gdal-bindings.cpp プロジェクト: jeroenooms/rgdal
static void*
getGDALObjPtr(SEXP sxpObj) {

  SEXP sxpHandle = getObjHandle(sxpObj);

  void *extPtr = R_ExternalPtrAddr(sxpHandle);

  if (extPtr == NULL) error("Null external pointer\n");

  return(extPtr);

}
コード例 #2
0
ファイル: gdal-bindings.cpp プロジェクト: jeroenooms/rgdal
SEXP
RGDAL_CloseDataset(SEXP sxpDataset) {

  SEXP sxpHandle = getObjHandle(sxpDataset);

  if (sxpHandle == NULL) return(R_NilValue);

  RGDAL_CloseHandle(sxpHandle);

  return(R_NilValue);

}
コード例 #3
0
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);

}
コード例 #4
0
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);

}