Mercurial > pub > dyncall > bindings
comparison R/rdyncall/man/packing.Rd @ 0:0cfcc391201f
initial from svn dyncall-1745
author | Daniel Adler |
---|---|
date | Thu, 19 Mar 2015 22:26:28 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:0cfcc391201f |
---|---|
1 \name{packing} | |
2 \alias{.pack} | |
3 \alias{packing} | |
4 \alias{.unpack} | |
5 \title{Handling of foreign C fundamental data types} | |
6 \description{Functions to unpack/pack (read/write) foreign C data types from/to R atomic vectors and C data objects such as arrays and pointers to structures.} | |
7 \usage{ | |
8 .pack(x, offset, sigchar, value) | |
9 .unpack(x, offset, sigchar) | |
10 } | |
11 \arguments{ | |
12 \item{x}{atomic vector (logical, raw, integer or double) or external pointer.} | |
13 \item{offset}{integer specifying \emph{byte offset} starting at 0.} | |
14 \item{sigchar}{character string specifying the C data type by a \link{type signature}.} | |
15 \item{value}{R object value to be coerced and packed to a foreign C data type.} | |
16 } | |
17 \details{ | |
18 The function \code{.pack} converts an R \code{value} into a C data type specified by the \link{signature} \code{sigchar} | |
19 and it writes the raw C foreign data value at byte position \code{offset} into the object \code{x}. | |
20 The function \code{.unpack} extracts a C data type according to the \link{signature} \code{sigchar} | |
21 at byte position \code{offset} from the object \code{x} and converts the C value to an R value and returns it. | |
22 | |
23 Byte \code{offset} calculations start at 0 relative to the first byte in an atomic vectors data area. | |
24 | |
25 If \code{x} is an atomic vector, a bound check is carried out before read/write access. | |
26 Otherwise, if \code{x} is an external pointer, there is only a C NULL pointer check. | |
27 } | |
28 \value{ | |
29 \code{.unpack} returns a read C data type coerced to an R value. | |
30 } | |
31 \seealso{ | |
32 \code{\link{.dyncall}} for details on type signatures. | |
33 } | |
34 \examples{ | |
35 # transfer double to array of floats and back, compare precision: | |
36 n <- 6 | |
37 input <- rnorm(n) | |
38 buf <- raw(n*4) | |
39 for (i in 1:n) { | |
40 .pack(buf, 4*(i-1), "f", input[i]) | |
41 } | |
42 output <- numeric(n) | |
43 for (i in 1:n) { | |
44 output[i] <- .unpack(buf, 4*(i-1), "f") | |
45 } | |
46 # difference between double and float | |
47 difference <- output-input | |
48 print( cbind(input,output,difference) ) | |
49 } |