diff R/rdc/R/bind.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/rdc/R/bind.R	Thu Mar 19 22:26:28 2015 +0100
@@ -0,0 +1,22 @@
+#
+# bind library by import string
+#
+
+eatws <- function(x) gsub("[ \n\t]*","",x)
+
+bind1 <- function(symbol, signature, libh, callvm, envir=parent.frame() )
+{
+  funcptr <- rdcFind(libh, symbol)  
+  f <- function(...) NULL
+  body(f) <- substitute( dcCall( callvm, funcptr, signature, ... ), list(funcptr=funcptr, signature=signature) )  
+  assign( symbol, f, envir=envir )
+}
+
+rdcBind <- function(libname, sigs, callvm, envir=parent.frame() )
+{
+  libh <- rdcLoad(libname)
+  sigs <- eatws(sigs)
+  sigs <- strsplit(sigs, ";")[[1]]
+  sigs <- strsplit(sigs, "\\(")
+  for (i in seq(along=sigs)) bind1(sigs[[i]][[1]], sigs[[i]][[2]], libh, callvm, envir )  
+}