annotate R/rdyncall/demo/callbacks.R @ 29:6cc2b7fc7ea2

bigger pydc update: - cleanups and refactoring - python 2 fixes in var conversions (especially w/ respect to int vs long) - fix to pydc.free() which didn't work at all - fix to return python bool as actual bool - test lib covering all conversions (manual verification, though :-/)
author Tassilo Philipp
date Wed, 08 Apr 2020 22:17:43 +0200
parents 0cfcc391201f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
1 # Package: rdyncall
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
2 # File: demo/callbacks.R
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 # Description: Creating a callback and call it via .dyncall
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 # The function to wrap:
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 f <- function(x,y) x+y
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 # Create the callback:
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 cb <- new.callback("ii)i", f)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11 # Call the callback
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 r <- .dyncall(cb, "ii)i", 20, 3)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 r == 23
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 # Recursive callback example:
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 f <- function(x,y,f,i)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 if (i > 1) .dyncall(f, "iipi)i", x,y,f,i-1)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 x+y
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23 cb <- new.callback("iipi)i", f)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
24
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
25 r <- .dyncall(cb, "iipi)i", 1,1,cb,100 )
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
26 r == 2
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
27