view R/rdyncall/R/dynport.R @ 61:c5a69c454963 default tip

- allow use of 'None' with 'Z' - bumped version to 1.4 (be in sync current dyncall version)
author Tassilo Philipp
date Mon, 03 Apr 2023 19:06:07 +0200
parents 0cfcc391201f
children
line wrap: on
line source

# Project: rdyncall
# File: R/dynports.R
# Description: repository for multi-platform bindings to binary components.
# Author: Daniel Adler <dadler@uni-goettingen.de> 

dynport <- function(portname, portfile=NULL, repo=system.file("dynports", package="rdyncall"))
{
  # literate portname string
  portname <- as.character(substitute(portname))
  if (missing(portfile))
  {
    # search for portfile
    portfile <- file.path( repo, paste(portname,".R",sep="") )
    if ( !file.exists(portfile) ) portfile <- file.path( repo, paste(portname,".json",sep="") )        
    if ( !file.exists(portfile) ) stop("dynport '", portname, "' not found.")    
  }
  loadDynportNamespace(portname, portfile)  
}

loadDynportNamespace <- function(name, portfile, do.attach=TRUE)
{ 
  name <- as.character(name)
  portfile <- as.character(portfile)
  if (do.attach) {
    envname <- paste("dynport", name, sep=":")
    if ( envname %in% search() ) return()
    env <- new.env()
    sys.source(portfile, envir=env) 
    attach(env, name=envname)
  } else {
    env <- new.env()
    sys.source(portfile, envir=env) 
    return(env)
  }
}