Mercurial > pub > dyncall > bindings
view R/rdyncall/man/utils.Rd @ 63:9b6cdffd30dd
- further fixes of inccorect overflow errors for int (and long on LLP64 systems)
* prev commit had bugs
* added overflow tests for also int, long, long long (for both, lp64 and llp64)
- while at it, fixing a reference leak when not using python with utf8 caching
author | Tassilo Philipp |
---|---|
date | Sun, 19 May 2024 15:33:18 +0200 |
parents | 0cfcc391201f |
children |
line wrap: on
line source
\name{utils} \alias{is.nullptr} \alias{as.extptr} \alias{is.externalptr} \alias{floatraw} \alias{as.floatraw} \alias{floatraw2numeric} \alias{ptr2str} \alias{strarrayptr} \alias{strptr} \alias{offsetPtr} \title{Utility functions for working with foreign C data types} \description{Functions for low-level operations on C pointers as well as helper functions and objects to handle C \code{float} arrays and strings.} \usage{ is.nullptr(x) as.extptr(x) is.externalptr(x) floatraw(n) as.floatraw(x) floatraw2numeric(x) ptr2str(x) strarrayptr(x) strptr(x) offsetPtr(x, offset) } \arguments{ \item{x}{an R object.} \item{n}{number of elements to allocate.} \item{offset}{a offset given in bytes.} } \details{ \code{is.nullptr} tests if the external pointer given by \code{x} represents a C \code{NULL} pointer. \code{as.extptr} returns an external pointer to the data area of atomic vector given by \code{x}. The external pointer holds an additional reference to the \code{x} R object to prevent it from garbage collection. \code{is.externalptr} tests if the object given by \code{x} is an external pointer. \code{floatraw} creates an array with a capacity to store \code{n} single-precision C \code{float} values. The array is implemented via a \code{\link[base]{raw}} vector. \code{as.floatraw} coerces a numeric vector into a single-precision C \code{float} vector. Values given by \code{x} are converted to C \code{float} values and stored in the R raw vector via \code{.pack}. This function is useful when calling foreign functions that expeect a C \code{float} pointer via \code{\link{.dyncall}}. \code{floatraw2numeric} coerces a C \code{float} (raw) vector to a numeric vector. \code{ptr2str}, \code{strarrayptr}, \code{strptr} are currently experimental. \code{offsetPtr} creates a new external pointer pointing to \code{x} plus the byte \code{offset}. If \code{x} is given as an external pointer, the address is increased by the \code{offset}, or, if \code{x} is given as a atomic vector, the address of the data (pointing to offset zero) is taken as basis and increased by the \code{offset}. The returned external pointer is protected (as offered by the C function \code{R_MakeExternalPtr}) by the external pointer \code{x}. } \value{ A logical value is returned by \code{is.nullptr} and \code{is.externalptr}. \code{as.extptr} returns an external pointer value. \code{floatraw} and \code{as.floatraw} return an atomic vector of type \code{raw} tagged with class \code{'floatraw'}. \code{floatraw2numeric} returns a \code{numeric} atomic vector. } \keyword{programming} \keyword{interface}