|
24 | 24 | #include "tiledb_version.h" |
25 | 25 |
|
26 | 26 | #include <fstream> |
| 27 | +#include <algorithm> |
27 | 28 | #include <unistd.h> |
28 | 29 |
|
29 | 30 | using namespace Rcpp; |
30 | 31 |
|
| 32 | +// This is an auxiliary method for schema dumps wherein a fill value may include |
| 33 | +// the null character. It isn't a general-purpose C++ string-search-and-replace, |
| 34 | +// as C++ makes that a surprisingly non-straightforward operation. This suffices |
| 35 | +// for our purposes. |
| 36 | +std::string denull(const std::string& str) { |
| 37 | + std::stringstream ss; |
| 38 | + for (char c : str) { |
| 39 | + if (c == '\0') { |
| 40 | + ss << "\\0"; |
| 41 | + } else { |
| 42 | + ss << c; |
| 43 | + } |
| 44 | + } |
| 45 | + return ss.str(); |
| 46 | +} |
| 47 | + |
31 | 48 | const char *_tiledb_datatype_to_string(tiledb_datatype_t dtype) { |
32 | 49 | switch (dtype) { |
33 | 50 | case TILEDB_INT8: |
@@ -1302,13 +1319,14 @@ bool libtiledb_domain_has_dimension(XPtr<tiledb::Domain> domain, |
1302 | 1319 | return domain->has_dimension(name.c_str()); |
1303 | 1320 | } |
1304 | 1321 |
|
| 1322 | + |
1305 | 1323 | // [[Rcpp::export]] |
1306 | 1324 | void libtiledb_domain_dump(XPtr<tiledb::Domain> domain) { |
1307 | 1325 | check_xptr_tag<tiledb::Domain>(domain); |
1308 | 1326 | #if TILEDB_VERSION >= TileDB_Version(2, 25, 0) |
1309 | 1327 | std::stringstream ss; |
1310 | 1328 | ss << *domain; |
1311 | | - Rcpp::Rcout << ss.str(); |
| 1329 | + Rcpp::Rcout << denull(ss.str()); |
1312 | 1330 | #else |
1313 | 1331 | domain->dump(); |
1314 | 1332 | #endif |
@@ -1624,7 +1642,7 @@ void libtiledb_attribute_dump(XPtr<tiledb::Attribute> attr) { |
1624 | 1642 | #if TILEDB_VERSION >= TileDB_Version(2, 25, 0) |
1625 | 1643 | std::stringstream ss; |
1626 | 1644 | ss << *attr; |
1627 | | - Rcpp::Rcout << ss.str(); |
| 1645 | + Rcpp::Rcout << denull(ss.str()); |
1628 | 1646 | #else |
1629 | 1647 | attr->dump(); |
1630 | 1648 | #endif |
@@ -2182,7 +2200,7 @@ void libtiledb_array_schema_dump(XPtr<tiledb::ArraySchema> schema) { |
2182 | 2200 | #if TILEDB_VERSION >= TileDB_Version(2, 25, 0) |
2183 | 2201 | std::stringstream ss; |
2184 | 2202 | ss << *schema; |
2185 | | - Rcpp::Rcout << ss.str(); |
| 2203 | + Rcpp::Rcout << denull(ss.str()); |
2186 | 2204 | #else |
2187 | 2205 | schema->dump(); |
2188 | 2206 | #endif |
|
0 commit comments