Mercurial > pub > dyncall > bindings
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 ) +}