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