The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
While R has no native support for 64-bit integer values, the bit64
package by Jens Oehlschlägel is widely used to fill this gap by (very carefully) passing the bitmaps of int64_t
values around in double
. This works on the R side by virtue of a S3 class integer64
with proper dispatching, and on the C/C++ side where the values can be past by memcpy
. What one cannot do is simply copying or casting: the tradeoff made in representing a double
with as large a range is that the ‘delta’ between values is not constant acros the range and naive casting between both representation will be lossy and distort values.
This package contains helper functions that were previously appearing in helper header files in different packages, and reorganizes them along with a proper unit tests. The key header file provided here can be included directly. Function to assert integer64
source, convert to and from in both scalar and vector cases as well as a pair of as<>()
and wrap()
converters are provided.
As our nanotime package builds on the same integer64
infrastructure, its bi-directional conversions between R and C++ are also supported.
The example for the included demonstration function show how a vector of integer64
values (here spanning the power of 10 ranging from 0 to 18) can be received in C++, altered (where we just add one) and returned, all while maintaining integer64
aka int64_t
type.
> example(Int64toInt64)
I64I64> # generate all powers of 10 fro 0 .. 18
I64I64> v <- bit64::as.integer64(10^seq(0,18))
I64I64> # pass them to function which will add one to each, print and return
I64I64> Int64toInt64(v)
2
11
101
1001
10001
100001
1000001
10000001
100000001
1000000001
10000000001
100000000001
1000000000001
10000000000001
100000000000001
1000000000000001
10000000000000001
100000000000000001
1000000000000000001
integer64
[1] 2 11 101
[4] 1001 10001 100001
[7] 1000001 10000001 100000001
[10] 1000000001 10000000001 100000000001
[13] 1000000000001 10000000000001 100000000000001
[16] 1000000000000001 10000000000000001 100000000000000001
[19] 1000000000000000001
>
Similarly, we can instantiate a vector of nanotime
values and increment, show, and return its values.
> example(NanotimeToNanotime)
NntmTN> # generate all powers of 10 fro 0 .. 18
NntmTN> if (requireNamespace("nanotime", quietly=TRUE)) {
NntmTN+ v <- nanotime::as.nanotime(10^seq(0,18))
NntmTN+ # pass them to function which will add one to each, print and return
NntmTN+ NanotimeToNanotime(v)
NntmTN+ }
2
11
101
1001
10001
100001
1000001
10000001
100000001
1000000001
10000000001
100000000001
1000000000001
10000000000001
100000000000001
1000000000000001
10000000000000001
100000000000000001
1000000000000000001
[1] 1970-01-01T00:00:00.000000002+00:00 1970-01-01T00:00:00.000000011+00:00
[3] 1970-01-01T00:00:00.000000101+00:00 1970-01-01T00:00:00.000001001+00:00
[5] 1970-01-01T00:00:00.000010001+00:00 1970-01-01T00:00:00.000100001+00:00
[7] 1970-01-01T00:00:00.001000001+00:00 1970-01-01T00:00:00.010000001+00:00
[9] 1970-01-01T00:00:00.100000001+00:00 1970-01-01T00:00:01.000000001+00:00
[11] 1970-01-01T00:00:10.000000001+00:00 1970-01-01T00:01:40.000000001+00:00
[13] 1970-01-01T00:16:40.000000001+00:00 1970-01-01T02:46:40.000000001+00:00
[15] 1970-01-02T03:46:40.000000001+00:00 1970-01-12T13:46:40.000000001+00:00
[17] 1970-04-26T17:46:40.000000001+00:00 1973-03-03T09:46:40.000000001+00:00
[19] 2001-09-09T01:46:40.000000001+00:00
>
The package is available via CRAN and can be installed the usual way via install.packages("RcppInt64")
.
Any problems, bug reports, or features requests for the package can be submitted and handled most conveniently as Github issues in the repository.
Before submitting pull requests, it is frequently preferable to first discuss need and scope in such an issue ticket. See the file Contributing.md (in the Rcpp repo) for a brief discussion.
Dirk Eddelbuettel
GPL (>= 2)
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.