6 #ifndef TURI_SFRAME_COMMA_ESCAPE_STRING_HPP 7 #define TURI_SFRAME_COMMA_ESCAPE_STRING_HPP 14 constexpr
char replace_char =
'\x1F';
16 inline void comma_escape_string(
const std::string& val,
17 std::string& output,
size_t& output_len) {
18 if (output.size() < 2 * val.size()) {
19 output.resize(2 * val.size());
21 char* cur_out = &(output[0]);
23 for (
size_t i = 0; i < val.size(); ++i) {
27 if (i < val.size() - 1 && (val[i+1] ==
'u' || val[i+1] ==
'x')) {
36 (*cur_out++) = replace_char;
66 size_t len = cur_out - &(output[0]);
71 inline void comma_unescape_string(
const std::string& val,
72 std::string& output,
size_t& output_len) {
73 if (output.size() < val.size()) {
74 output.resize(val.size());
76 char* cur_out = &(output[0]);
77 for (
size_t i = 0; i < val.size(); ++i) {
81 if (i < val.size() - 1 && (val[i+1] ==
'\\' )) {
85 else if (i < val.size() - 1 && (val[i+1] == replace_char )) {
89 else if (i < val.size() - 1 && (val[i+1] ==
'\'' )) {
93 else if (i < val.size() - 1 && (val[i+1] ==
'\"' )) {
97 else if (i < val.size() - 1 && (val[i+1] ==
'n' )) {
101 else if (i < val.size() - 1 && (val[i+1] ==
'b' )) {
105 else if (i < val.size() - 1 && (val[i+1] ==
't' )) {
109 else if (i < val.size() - 1 && (val[i+1] ==
'r' )) {
121 size_t len = cur_out - &(output[0]);