File: load.R

package info (click to toggle)
rcpp 1.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,480 kB
  • sloc: cpp: 27,436; ansic: 7,778; sh: 53; makefile: 2
file content (53 lines) | stat: -rw-r--r-- 1,573 bytes parent folder | download | duplicates (7)
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
44
45
46
47
48
49
50
51
52
53
setRcppClass("RcppClassWorld", module = "RcppClassModule", fields = list(more = "character"),
             methods = list(test = function(what) message("Testing: ", what, "; ", more)),
             saveAs = "genWorld"
             )

setRcppClass("stdNumeric", "vec", "stdVector")

## some methods that use C++ methods
evalqOnLoad({
    ##library(methods)
    stdNumeric$methods(
        getEl = function(i) {
            i <- as.integer(i)
            if(i < 1 || i > size())
                NA_real_
            else
                at(i-1L)
        },
        setEl = function(i, value) {
            value <- as.numeric(value)
            if(length(value) != 1)
                stop("Only assigns single values")
            i <- as.integer(i)
            if(i < 1 || i > size())
                stop("index out of bounds")
            else
                set(i-1L, value)
        },
        initialize = function(data = numeric()) {
            callSuper()
            data <- as.double(data)
            n <- as.integer(max(50, length(data) * 2))
            reserve(n)
            assign(data)
        }
    )
})


## loadModule("NumEx")

## loading the module should have defined the C++ class

## setRcppClass("NumEx", "Num")


## For R 2.15.1 and later this also works. Note that calling loadModule() triggers
## a load action, so this does not have to be placed in .onLoad() or evalqOnLoad().
loadModule("NumEx", TRUE)
loadModule("RcppClassModule", TRUE)
loadModule("stdVector", TRUE)

loadModule("RcppClassModule", c("bar", baz = "bla", baz1 = "bla1", "foo"))