File: converter.R

package info (click to toggle)
rjava 1.0-11-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,184 kB
  • sloc: java: 13,223; ansic: 5,479; sh: 3,776; xml: 325; makefile: 250; perl: 33
file content (43 lines) | stat: -rw-r--r-- 1,003 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# in: Java -> R
.conv.in <- new.env(parent=emptyenv())
.conv.in$. <- FALSE
# out: R -> Java
.conv.out <- new.env(parent=emptyenv())
.conv.out$. <- FALSE

# --- internal fns
.convert.in <- function(jobj, verify.class=TRUE) {  
  jcl <- if (verify.class) .jclass(jobj) else gsub("/",".",jobj@jclass)
  cv <- .conv.in[[jcl]]
  if (!is.null(cv)) jobj else cv$fn(jobj)
}

.convert.out <- function(robj) {
  for (cl in class(robj)) {
    cv <- .conv.out[[cl]]
    if (!is.null(cv)) return(cv$fn(robj))
  }
  robj
}

# external fns
.jsetJConvertor <- function(java.class, fn) {
  if (is.null(fn)) {
    rm(list=java.class, envir=.conv.in)
    if (!length(ls(.conv.in))) .conv.in$. <- FALSE
  } else {
    .conv.in$. <- TRUE
    .conv.in[[java.class]] <- list(fn=fn)
  }
}

.jsetRConvertor <- function(r.class, fn) {
  if (is.null(fn)) {
    rm(list=r.class, envir=.conv.out)
    if (!length(ls(.conv.out))) .conv.out$. <- FALSE
  } else {
    .conv.out$. <- TRUE
    .conv.out[[r.class]] <- list(fn=fn)
  }
}