To facilitate using 'cereal' with Rcpp. 'cereal' is a header-only C++11 serialization library. 'cereal' takes arbitrary data types and reversibly turns them into different representations, such as compact binary encodings, XML, or JSON. 'cereal' was designed to be fast, light-weight, and easy to extend - it has no external dependencies and can be easily bundled with other code or used standalone. Please see < http://uscilab.github.io/cereal> for more information.
This package provides R with access to cereal header files. cereal is a header-only C++11 serialization library. cereal takes arbitrary data types and reversibly turns them into different representations, such as compact binary encodings, XML, or JSON. For more information, please visit the official website of cereal project: http://uscilab.github.io/cereal/
This package can be used via the
LinkingTo: field in the DESCRIPTION field of an R package and the
Rcpp::depends in the Rcpp-attributes. The R and Rcpp infrastructure tools will know how to set include flags properly.
Please use the
devtools::install_github to install the latest version of Rceral and use
Rcereal::update_version to install the content of the header files of cereal.
In this project, we will not explain how to use cereal in c++ because the official cereal project has already provides a complete documentation. Please visit the Quick Start page to learn how to use cereal.
The following example briefly shows how to use the Rcereal in Rcpp-attributes to serialize a user defined c++ structure into raw vector and deserialize from the raw vector.
//[[Rcpp::depends(Rcereal)]];//[[Rcpp::export]]RawVector//[[Rcpp::export]]void/*** Rraw_vector <- serialize_myclass(1, 2, 4)deserialize_myclass(raw_vector)*/
To compile the cpp file, the user must enable the support of c++11 before using
Sys.setenv(PKG_CXXFLAGS="-std=c++11")Rcpp::sourceCpp("<the path to the cpp file>")
To use cereal with Rcpp in the following way, the user must remember two points:
If you see the compiler reports the missing header files, please use the
Rcereal::update_version() to update the content of cereal from github. You can manual check whether a directory named
sereal is in the folder
system.file("include", package = "Rcereal").
If you see lots of error during compiling, please check the version of the compiler and the content of the environment variable
PKG_CXXFLAGS. As far as I know, cereal will fail if the gcc-4.6 is used.