1 #include "cpp11/list.hpp"
2 #include "cpp11/sexp.hpp"
3 #include "cpp11/strings.hpp"
4
5 #include "connection.h"
6 #include <fstream>
7 #include <ostream>
8
write_lines_(const cpp11::strings & lines,const cpp11::sexp & connection,const std::string & na,const std::string & sep)9 [[cpp11::register]] void write_lines_(
10 const cpp11::strings& lines,
11 const cpp11::sexp& connection,
12 const std::string& na,
13 const std::string& sep) {
14
15 for (cpp11::strings::const_iterator i = lines.begin(); i != lines.end();
16 ++i) {
17 if (*i == NA_STRING) {
18 write_bytes(connection, na.c_str(), na.size());
19 } else {
20 const char* str = Rf_translateCharUTF8(*i);
21 write_bytes(connection, str, strlen(str));
22 }
23 write_bytes(connection, sep.c_str(), sep.size());
24 }
25 }
26
write_lines_raw_(const cpp11::list & x,const cpp11::sexp & connection,const std::string & sep)27 [[cpp11::register]] void write_lines_raw_(
28 const cpp11::list& x,
29 const cpp11::sexp& connection,
30 const std::string& sep) {
31
32 for (auto i : x) {
33 cpp11::raws y(i);
34 write_bytes(
35 connection,
36 reinterpret_cast<const char*>(RAW(y)),
37 y.size() * sizeof(RAW(y)[0]));
38 write_bytes(connection, sep.c_str(), sep.size());
39 }
40 }
41
42 [[cpp11::register]] void
write_file_(const std::string & x,const cpp11::sexp & connection)43 write_file_(const std::string& x, const cpp11::sexp& connection) {
44 write_bytes(connection, x.c_str(), x.size());
45 }
46
47 [[cpp11::register]] void
write_file_raw_(const cpp11::raws & x,const cpp11::sexp & connection)48 write_file_raw_(const cpp11::raws& x, const cpp11::sexp& connection) {
49
50 write_bytes(
51 connection,
52 reinterpret_cast<const char*>(RAW(x)),
53 x.size() * sizeof(RAW(x)[0]));
54 }
55