rds2cpp
Read and write RDS/RDA files in C++
Loading...
Searching...
No Matches
write_rds.hpp
Go to the documentation of this file.
1#ifndef RDS2CPP_WRITE_RDS_HPP
2#define RDS2CPP_WRITE_RDS_HPP
3
4#include <vector>
5#include <cstddef>
6
7#include "byteme/byteme.hpp"
9
10#include "RdsFile.hpp"
11#include "RObject.hpp"
12#include "utils_write.hpp"
13#include "write_object.hpp"
14#include "SharedWriteInfo.hpp"
15
22namespace rds2cpp {
23
31 bool parallel = false;
32
38};
39
49template<class Writer>
50void write_rds(const RdsFile& info, Writer& writer, const WriteRdsOptions& options) {
51 std::unique_ptr<byteme::BufferedWriter<unsigned char> > bufwriter;
52 if (options.parallel) {
53 bufwriter.reset(new byteme::ParallelBufferedWriter<unsigned char, Writer*>(&writer, options.buffer_size));
54 } else {
55 bufwriter.reset(new byteme::SerialBufferedWriter<unsigned char, Writer*>(&writer, options.buffer_size));
56 }
57
58 bufwriter->write("X\n");
59 inject_integer<std::int32_t>(info.format_version, *bufwriter);
60 write_version(info.writer_version, *bufwriter);
61 write_version(info.reader_version, *bufwriter);
62
63 const std::string encoding = string_encoding_to_name(info.encoding);
64 inject_integer<std::int32_t>(sanisizer::cast<std::int32_t>(encoding.size()), *bufwriter);
65 bufwriter->write(encoding);
66
67 SharedWriteInfo shared(info.symbols, info.environments, info.external_pointers);
68 write_object(info.object.get(), *bufwriter, shared);
69}
70
78inline void write_rds(const RdsFile& info, const char* path, const WriteRdsOptions& options) {
79 byteme::GzipFileWriter writer(path, {});
80 write_rds(info, writer, options);
81}
82
90inline void write_rds(const RdsFile& info, std::string path, const WriteRdsOptions& options) {
91 write_rds(info, path.c_str(), options);
92}
93
94
95}
96
97#endif
Representations of unserialized R objects.
Information about an RDS file.
Parse an RDS file in C++.
Definition StringEncoding.hpp:12
void write_rds(const RdsFile &info, Writer &writer, const WriteRdsOptions &options)
Definition write_rds.hpp:50
constexpr Dest_ cap(Value_ x)
constexpr Dest_ cast(Value_ x)
Contents of the parsed RDS file.
Definition RdsFile.hpp:21
std::int32_t format_version
Definition RdsFile.hpp:25
std::unique_ptr< RObject > object
Definition RdsFile.hpp:45
std::vector< Symbol > symbols
Definition RdsFile.hpp:57
std::vector< ExternalPointer > external_pointers
Definition RdsFile.hpp:63
Version reader_version
Definition RdsFile.hpp:35
StringEncoding encoding
Definition RdsFile.hpp:40
Version writer_version
Definition RdsFile.hpp:30
std::vector< Environment > environments
Definition RdsFile.hpp:51
Options for write_rds().
Definition write_rds.hpp:27
bool parallel
Definition write_rds.hpp:31
std::size_t buffer_size
Definition write_rds.hpp:37