diff R/rdyncall/R/dynport.R @ 0:0cfcc391201f

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:26:28 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/R/rdyncall/R/dynport.R	Thu Mar 19 22:26:28 2015 +0100
@@ -0,0 +1,36 @@
+# 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)
+  }
+}
+