diff options
author | Anton Samokhvalov <pg83@yandex.ru> | 2022-02-10 16:45:17 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:17 +0300 |
commit | d3a398281c6fd1d3672036cb2d63f842d2cb28c5 (patch) | |
tree | dd4bd3ca0f36b817e96812825ffaf10d645803f2 /library/cpp/yson_pull/detail/cescape_encode.h | |
parent | 72cb13b4aff9bc9cf22e49251bc8fd143f82538f (diff) | |
download | ydb-d3a398281c6fd1d3672036cb2d63f842d2cb28c5.tar.gz |
Restoring authorship annotation for Anton Samokhvalov <pg83@yandex.ru>. Commit 2 of 2.
Diffstat (limited to 'library/cpp/yson_pull/detail/cescape_encode.h')
-rw-r--r-- | library/cpp/yson_pull/detail/cescape_encode.h | 188 |
1 files changed, 94 insertions, 94 deletions
diff --git a/library/cpp/yson_pull/detail/cescape_encode.h b/library/cpp/yson_pull/detail/cescape_encode.h index d1dae0f96e..bf5765f1d9 100644 --- a/library/cpp/yson_pull/detail/cescape_encode.h +++ b/library/cpp/yson_pull/detail/cescape_encode.h @@ -6,109 +6,109 @@ // Turns UTF-8 strings into unreadable garbage for no known reason //#define CESCAPE_STRICT_ASCII -namespace NYsonPull { - namespace NDetail { - namespace NCEscape { - namespace NImpl { - inline ui8 hex_digit(ui8 value) { - constexpr ui8 hex_digits[] = "0123456789ABCDEF"; - return hex_digits[value]; - } +namespace NYsonPull { + namespace NDetail { + namespace NCEscape { + namespace NImpl { + inline ui8 hex_digit(ui8 value) { + constexpr ui8 hex_digits[] = "0123456789ABCDEF"; + return hex_digits[value]; + } - inline ui8 oct_digit(ui8 value) { - return '0' + value; - } + inline ui8 oct_digit(ui8 value) { + return '0' + value; + } - inline bool is_printable(ui8 c) { + inline bool is_printable(ui8 c) { #ifdef CESCAPE_STRICT_ASCII - return c >= 32 && c <= 126; + return c >= 32 && c <= 126; #else - return c >= 32; + return c >= 32; #endif - } + } - inline bool is_hex_digit(ui8 c) { - return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'); - } + inline bool is_hex_digit(ui8 c) { + return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'); + } - inline bool is_oct_digit(ui8 c) { - return c >= '0' && c <= '7'; - } + inline bool is_oct_digit(ui8 c) { + return c >= '0' && c <= '7'; + } - constexpr size_t ESCAPE_C_BUFFER_SIZE = 4; + constexpr size_t ESCAPE_C_BUFFER_SIZE = 4; - inline size_t escape_char( - ui8 c, - ui8 next, - ui8 r[ESCAPE_C_BUFFER_SIZE]) { - // (1) Printable characters go as-is, except backslash and double quote. - // (2) Characters \r, \n, \t and \0 ... \7 replaced by their simple escape characters (if possible). - // (3) Otherwise, character is encoded using hexadecimal escape sequence (if possible), or octal. - if (c == '\"') { - r[0] = '\\'; - r[1] = '\"'; - return 2; - } else if (c == '\\') { - r[0] = '\\'; - r[1] = '\\'; - return 2; - } else if (is_printable(c)) { - r[0] = c; - return 1; - } else if (c == '\r') { - r[0] = '\\'; - r[1] = 'r'; - return 2; - } else if (c == '\n') { - r[0] = '\\'; - r[1] = 'n'; - return 2; - } else if (c == '\t') { - r[0] = '\\'; - r[1] = 't'; - return 2; - } else if (c < 8 && !is_oct_digit(next)) { - r[0] = '\\'; - r[1] = oct_digit(c); - return 2; - } else if (!is_hex_digit(next)) { - r[0] = '\\'; - r[1] = 'x'; - r[2] = hex_digit((c & 0xF0) >> 4); - r[3] = hex_digit((c & 0x0F) >> 0); - return 4; - } else { - r[0] = '\\'; - r[1] = oct_digit((c & 0700) >> 6); - r[2] = oct_digit((c & 0070) >> 3); - r[3] = oct_digit((c & 0007) >> 0); - return 4; - } - } + inline size_t escape_char( + ui8 c, + ui8 next, + ui8 r[ESCAPE_C_BUFFER_SIZE]) { + // (1) Printable characters go as-is, except backslash and double quote. + // (2) Characters \r, \n, \t and \0 ... \7 replaced by their simple escape characters (if possible). + // (3) Otherwise, character is encoded using hexadecimal escape sequence (if possible), or octal. + if (c == '\"') { + r[0] = '\\'; + r[1] = '\"'; + return 2; + } else if (c == '\\') { + r[0] = '\\'; + r[1] = '\\'; + return 2; + } else if (is_printable(c)) { + r[0] = c; + return 1; + } else if (c == '\r') { + r[0] = '\\'; + r[1] = 'r'; + return 2; + } else if (c == '\n') { + r[0] = '\\'; + r[1] = 'n'; + return 2; + } else if (c == '\t') { + r[0] = '\\'; + r[1] = 't'; + return 2; + } else if (c < 8 && !is_oct_digit(next)) { + r[0] = '\\'; + r[1] = oct_digit(c); + return 2; + } else if (!is_hex_digit(next)) { + r[0] = '\\'; + r[1] = 'x'; + r[2] = hex_digit((c & 0xF0) >> 4); + r[3] = hex_digit((c & 0x0F) >> 0); + return 4; + } else { + r[0] = '\\'; + r[1] = oct_digit((c & 0700) >> 6); + r[2] = oct_digit((c & 0070) >> 3); + r[3] = oct_digit((c & 0007) >> 0); + return 4; + } + } - template <typename T> - inline void escape_impl(const ui8* str, size_t len, T&& consume) { - ui8 buffer[ESCAPE_C_BUFFER_SIZE]; + template <typename T> + inline void escape_impl(const ui8* str, size_t len, T&& consume) { + ui8 buffer[ESCAPE_C_BUFFER_SIZE]; - size_t i, j; - for (i = 0, j = 0; i < len; ++i) { - auto next_char = i + 1 < len ? str[i + 1] : 0; - size_t rlen = escape_char(str[i], next_char, buffer); + size_t i, j; + for (i = 0, j = 0; i < len; ++i) { + auto next_char = i + 1 < len ? str[i + 1] : 0; + size_t rlen = escape_char(str[i], next_char, buffer); - if (rlen > 1) { - consume(str + j, i - j); - j = i + 1; - consume(buffer, rlen); - } - } - - if (j > 0) { - consume(str + j, len - j); - } else { - consume(str, len); - } - } - } - } // namespace NCEscape - } // namespace NDetail -} + if (rlen > 1) { + consume(str + j, i - j); + j = i + 1; + consume(buffer, rlen); + } + } + + if (j > 0) { + consume(str + j, len - j); + } else { + consume(str, len); + } + } + } + } // namespace NCEscape + } // namespace NDetail +} |