annotate R/rdyncall/R/pack.R @ 66:7a61dd082341 default tip

pydc: - fix double free triggered by capsule destructor, when freeing pydc and callback objects, manually
author Tassilo Philipp
date Fri, 24 May 2024 18:16:29 +0200 (13 months ago)
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: R/pack.R
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
3 # Description: (un-)packing functions for access to C aggregate (struct/union) data types.
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
4
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
5 .pack <- function(x, offset, sigchar, value)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
6 {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
7 char1 <- substr(sigchar,1,1)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
8 if (char1 == "*") char1 <- "p"
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
9 .Call("pack", x, as.integer(offset), char1, value, PACKAGE="rdyncall" )
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
10 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
11
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
12 .unpack <- function(x, offset, sigchar)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
13 {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
14 sigchar <- char1 <- substr(sigchar,1,1)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
15 if (char1 == "*") sigchar <- "p"
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
16 x <- .Call("unpack", x, as.integer(offset), sigchar, PACKAGE="rdyncall" )
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
17 if (char1 == "*")
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
18 {
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
19 attr(x,"basetype") <- substr(sigchar,2,nchar(sigchar))
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
20 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
21 return(x)
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
22 }
0cfcc391201f initial from svn dyncall-1745
Daniel Adler
parents:
diff changeset
23