Do not use non-standard __uint128
diff --git a/make_escape_dct.py b/make_escape_dct.py
index b994e69..2c0669f 100755
--- a/make_escape_dct.py
+++ b/make_escape_dct.py
@@ -21,7 +21,9 @@
s = '\\r'
elif c == ord('\t'):
s = '\\t'
- elif (c < 0x20) or (c >= 0x7f) or (chr(c) in '''"'&<>\\'''):
+ elif c == ord('"'):
+ s = '\\"'
+ elif (c < 0x20) or (c >= 0x7f) or (chr(c) in "'&<>\\"):
s = f'\\u{c:04x}'
else:
s = f'{c:c}'
@@ -32,14 +34,13 @@
f"'{c}'" if c != '\\' else f"'\\\\'"
for c in s
] + ['0'] * 6
- print(' {' + ', '.join(t[:8]) + '},', file=f)
+ l = ', '.join(t[:8])
+ print(f' {{ {l:35s} }}, /* 0x{c:02x} {chr(c)!r} */', file=f)
print('};', file=f)
escaped = unescaped ^ ((1 << 128) - 1)
- print('const unsigned __int128 EscapeDct::is_escaped_array = (', file=f)
- print(f' ((unsigned __int128) 0x{(escaped >> 64):016x} << 64) |', file=f)
- print(f' ((unsigned __int128) 0x{(escaped & ((1 << 64) - 1)):016x})', file=f)
- print(');', file=f)
+ print(f'const std::uint64_t EscapeDct::is_escaped_lo = UINT64_C(0x{(escaped & ((1 << 64) - 1)):016x});', file=f)
+ print(f'const std::uint64_t EscapeDct::is_escaped_hi = UINT64_C(0x{(escaped >> 64):016x});', file=f)
argparser = ArgumentParser(description='Generate src/_escape_dct.hpp')
diff --git a/src/_escape_dct.hpp b/src/_escape_dct.hpp
index 9d5df94..4942e7d 100644
--- a/src/_escape_dct.hpp
+++ b/src/_escape_dct.hpp
@@ -1,262 +1,260 @@
const EscapeDct::Items EscapeDct::items = {
- {6, '\\', 'u', '0', '0', '0', '0', 0},
- {6, '\\', 'u', '0', '0', '0', '1', 0},
- {6, '\\', 'u', '0', '0', '0', '2', 0},
- {6, '\\', 'u', '0', '0', '0', '3', 0},
- {6, '\\', 'u', '0', '0', '0', '4', 0},
- {6, '\\', 'u', '0', '0', '0', '5', 0},
- {6, '\\', 'u', '0', '0', '0', '6', 0},
- {6, '\\', 'u', '0', '0', '0', '7', 0},
- {2, '\\', 'b', 0, 0, 0, 0, 0},
- {2, '\\', 't', 0, 0, 0, 0, 0},
- {2, '\\', 'n', 0, 0, 0, 0, 0},
- {6, '\\', 'u', '0', '0', '0', 'b', 0},
- {2, '\\', 'f', 0, 0, 0, 0, 0},
- {2, '\\', 'r', 0, 0, 0, 0, 0},
- {6, '\\', 'u', '0', '0', '0', 'e', 0},
- {6, '\\', 'u', '0', '0', '0', 'f', 0},
- {6, '\\', 'u', '0', '0', '1', '0', 0},
- {6, '\\', 'u', '0', '0', '1', '1', 0},
- {6, '\\', 'u', '0', '0', '1', '2', 0},
- {6, '\\', 'u', '0', '0', '1', '3', 0},
- {6, '\\', 'u', '0', '0', '1', '4', 0},
- {6, '\\', 'u', '0', '0', '1', '5', 0},
- {6, '\\', 'u', '0', '0', '1', '6', 0},
- {6, '\\', 'u', '0', '0', '1', '7', 0},
- {6, '\\', 'u', '0', '0', '1', '8', 0},
- {6, '\\', 'u', '0', '0', '1', '9', 0},
- {6, '\\', 'u', '0', '0', '1', 'a', 0},
- {6, '\\', 'u', '0', '0', '1', 'b', 0},
- {6, '\\', 'u', '0', '0', '1', 'c', 0},
- {6, '\\', 'u', '0', '0', '1', 'd', 0},
- {6, '\\', 'u', '0', '0', '1', 'e', 0},
- {6, '\\', 'u', '0', '0', '1', 'f', 0},
- {1, ' ', 0, 0, 0, 0, 0, 0},
- {1, '!', 0, 0, 0, 0, 0, 0},
- {6, '\\', 'u', '0', '0', '2', '2', 0},
- {1, '#', 0, 0, 0, 0, 0, 0},
- {1, '$', 0, 0, 0, 0, 0, 0},
- {1, '%', 0, 0, 0, 0, 0, 0},
- {6, '\\', 'u', '0', '0', '2', '6', 0},
- {6, '\\', 'u', '0', '0', '2', '7', 0},
- {1, '(', 0, 0, 0, 0, 0, 0},
- {1, ')', 0, 0, 0, 0, 0, 0},
- {1, '*', 0, 0, 0, 0, 0, 0},
- {1, '+', 0, 0, 0, 0, 0, 0},
- {1, ',', 0, 0, 0, 0, 0, 0},
- {1, '-', 0, 0, 0, 0, 0, 0},
- {1, '.', 0, 0, 0, 0, 0, 0},
- {1, '/', 0, 0, 0, 0, 0, 0},
- {1, '0', 0, 0, 0, 0, 0, 0},
- {1, '1', 0, 0, 0, 0, 0, 0},
- {1, '2', 0, 0, 0, 0, 0, 0},
- {1, '3', 0, 0, 0, 0, 0, 0},
- {1, '4', 0, 0, 0, 0, 0, 0},
- {1, '5', 0, 0, 0, 0, 0, 0},
- {1, '6', 0, 0, 0, 0, 0, 0},
- {1, '7', 0, 0, 0, 0, 0, 0},
- {1, '8', 0, 0, 0, 0, 0, 0},
- {1, '9', 0, 0, 0, 0, 0, 0},
- {1, ':', 0, 0, 0, 0, 0, 0},
- {1, ';', 0, 0, 0, 0, 0, 0},
- {6, '\\', 'u', '0', '0', '3', 'c', 0},
- {1, '=', 0, 0, 0, 0, 0, 0},
- {6, '\\', 'u', '0', '0', '3', 'e', 0},
- {1, '?', 0, 0, 0, 0, 0, 0},
- {1, '@', 0, 0, 0, 0, 0, 0},
- {1, 'A', 0, 0, 0, 0, 0, 0},
- {1, 'B', 0, 0, 0, 0, 0, 0},
- {1, 'C', 0, 0, 0, 0, 0, 0},
- {1, 'D', 0, 0, 0, 0, 0, 0},
- {1, 'E', 0, 0, 0, 0, 0, 0},
- {1, 'F', 0, 0, 0, 0, 0, 0},
- {1, 'G', 0, 0, 0, 0, 0, 0},
- {1, 'H', 0, 0, 0, 0, 0, 0},
- {1, 'I', 0, 0, 0, 0, 0, 0},
- {1, 'J', 0, 0, 0, 0, 0, 0},
- {1, 'K', 0, 0, 0, 0, 0, 0},
- {1, 'L', 0, 0, 0, 0, 0, 0},
- {1, 'M', 0, 0, 0, 0, 0, 0},
- {1, 'N', 0, 0, 0, 0, 0, 0},
- {1, 'O', 0, 0, 0, 0, 0, 0},
- {1, 'P', 0, 0, 0, 0, 0, 0},
- {1, 'Q', 0, 0, 0, 0, 0, 0},
- {1, 'R', 0, 0, 0, 0, 0, 0},
- {1, 'S', 0, 0, 0, 0, 0, 0},
- {1, 'T', 0, 0, 0, 0, 0, 0},
- {1, 'U', 0, 0, 0, 0, 0, 0},
- {1, 'V', 0, 0, 0, 0, 0, 0},
- {1, 'W', 0, 0, 0, 0, 0, 0},
- {1, 'X', 0, 0, 0, 0, 0, 0},
- {1, 'Y', 0, 0, 0, 0, 0, 0},
- {1, 'Z', 0, 0, 0, 0, 0, 0},
- {1, '[', 0, 0, 0, 0, 0, 0},
- {2, '\\', '\\', 0, 0, 0, 0, 0},
- {1, ']', 0, 0, 0, 0, 0, 0},
- {1, '^', 0, 0, 0, 0, 0, 0},
- {1, '_', 0, 0, 0, 0, 0, 0},
- {1, '`', 0, 0, 0, 0, 0, 0},
- {1, 'a', 0, 0, 0, 0, 0, 0},
- {1, 'b', 0, 0, 0, 0, 0, 0},
- {1, 'c', 0, 0, 0, 0, 0, 0},
- {1, 'd', 0, 0, 0, 0, 0, 0},
- {1, 'e', 0, 0, 0, 0, 0, 0},
- {1, 'f', 0, 0, 0, 0, 0, 0},
- {1, 'g', 0, 0, 0, 0, 0, 0},
- {1, 'h', 0, 0, 0, 0, 0, 0},
- {1, 'i', 0, 0, 0, 0, 0, 0},
- {1, 'j', 0, 0, 0, 0, 0, 0},
- {1, 'k', 0, 0, 0, 0, 0, 0},
- {1, 'l', 0, 0, 0, 0, 0, 0},
- {1, 'm', 0, 0, 0, 0, 0, 0},
- {1, 'n', 0, 0, 0, 0, 0, 0},
- {1, 'o', 0, 0, 0, 0, 0, 0},
- {1, 'p', 0, 0, 0, 0, 0, 0},
- {1, 'q', 0, 0, 0, 0, 0, 0},
- {1, 'r', 0, 0, 0, 0, 0, 0},
- {1, 's', 0, 0, 0, 0, 0, 0},
- {1, 't', 0, 0, 0, 0, 0, 0},
- {1, 'u', 0, 0, 0, 0, 0, 0},
- {1, 'v', 0, 0, 0, 0, 0, 0},
- {1, 'w', 0, 0, 0, 0, 0, 0},
- {1, 'x', 0, 0, 0, 0, 0, 0},
- {1, 'y', 0, 0, 0, 0, 0, 0},
- {1, 'z', 0, 0, 0, 0, 0, 0},
- {1, '{', 0, 0, 0, 0, 0, 0},
- {1, '|', 0, 0, 0, 0, 0, 0},
- {1, '}', 0, 0, 0, 0, 0, 0},
- {1, '~', 0, 0, 0, 0, 0, 0},
- {6, '\\', 'u', '0', '0', '7', 'f', 0},
- {6, '\\', 'u', '0', '0', '8', '0', 0},
- {6, '\\', 'u', '0', '0', '8', '1', 0},
- {6, '\\', 'u', '0', '0', '8', '2', 0},
- {6, '\\', 'u', '0', '0', '8', '3', 0},
- {6, '\\', 'u', '0', '0', '8', '4', 0},
- {6, '\\', 'u', '0', '0', '8', '5', 0},
- {6, '\\', 'u', '0', '0', '8', '6', 0},
- {6, '\\', 'u', '0', '0', '8', '7', 0},
- {6, '\\', 'u', '0', '0', '8', '8', 0},
- {6, '\\', 'u', '0', '0', '8', '9', 0},
- {6, '\\', 'u', '0', '0', '8', 'a', 0},
- {6, '\\', 'u', '0', '0', '8', 'b', 0},
- {6, '\\', 'u', '0', '0', '8', 'c', 0},
- {6, '\\', 'u', '0', '0', '8', 'd', 0},
- {6, '\\', 'u', '0', '0', '8', 'e', 0},
- {6, '\\', 'u', '0', '0', '8', 'f', 0},
- {6, '\\', 'u', '0', '0', '9', '0', 0},
- {6, '\\', 'u', '0', '0', '9', '1', 0},
- {6, '\\', 'u', '0', '0', '9', '2', 0},
- {6, '\\', 'u', '0', '0', '9', '3', 0},
- {6, '\\', 'u', '0', '0', '9', '4', 0},
- {6, '\\', 'u', '0', '0', '9', '5', 0},
- {6, '\\', 'u', '0', '0', '9', '6', 0},
- {6, '\\', 'u', '0', '0', '9', '7', 0},
- {6, '\\', 'u', '0', '0', '9', '8', 0},
- {6, '\\', 'u', '0', '0', '9', '9', 0},
- {6, '\\', 'u', '0', '0', '9', 'a', 0},
- {6, '\\', 'u', '0', '0', '9', 'b', 0},
- {6, '\\', 'u', '0', '0', '9', 'c', 0},
- {6, '\\', 'u', '0', '0', '9', 'd', 0},
- {6, '\\', 'u', '0', '0', '9', 'e', 0},
- {6, '\\', 'u', '0', '0', '9', 'f', 0},
- {6, '\\', 'u', '0', '0', 'a', '0', 0},
- {6, '\\', 'u', '0', '0', 'a', '1', 0},
- {6, '\\', 'u', '0', '0', 'a', '2', 0},
- {6, '\\', 'u', '0', '0', 'a', '3', 0},
- {6, '\\', 'u', '0', '0', 'a', '4', 0},
- {6, '\\', 'u', '0', '0', 'a', '5', 0},
- {6, '\\', 'u', '0', '0', 'a', '6', 0},
- {6, '\\', 'u', '0', '0', 'a', '7', 0},
- {6, '\\', 'u', '0', '0', 'a', '8', 0},
- {6, '\\', 'u', '0', '0', 'a', '9', 0},
- {6, '\\', 'u', '0', '0', 'a', 'a', 0},
- {6, '\\', 'u', '0', '0', 'a', 'b', 0},
- {6, '\\', 'u', '0', '0', 'a', 'c', 0},
- {6, '\\', 'u', '0', '0', 'a', 'd', 0},
- {6, '\\', 'u', '0', '0', 'a', 'e', 0},
- {6, '\\', 'u', '0', '0', 'a', 'f', 0},
- {6, '\\', 'u', '0', '0', 'b', '0', 0},
- {6, '\\', 'u', '0', '0', 'b', '1', 0},
- {6, '\\', 'u', '0', '0', 'b', '2', 0},
- {6, '\\', 'u', '0', '0', 'b', '3', 0},
- {6, '\\', 'u', '0', '0', 'b', '4', 0},
- {6, '\\', 'u', '0', '0', 'b', '5', 0},
- {6, '\\', 'u', '0', '0', 'b', '6', 0},
- {6, '\\', 'u', '0', '0', 'b', '7', 0},
- {6, '\\', 'u', '0', '0', 'b', '8', 0},
- {6, '\\', 'u', '0', '0', 'b', '9', 0},
- {6, '\\', 'u', '0', '0', 'b', 'a', 0},
- {6, '\\', 'u', '0', '0', 'b', 'b', 0},
- {6, '\\', 'u', '0', '0', 'b', 'c', 0},
- {6, '\\', 'u', '0', '0', 'b', 'd', 0},
- {6, '\\', 'u', '0', '0', 'b', 'e', 0},
- {6, '\\', 'u', '0', '0', 'b', 'f', 0},
- {6, '\\', 'u', '0', '0', 'c', '0', 0},
- {6, '\\', 'u', '0', '0', 'c', '1', 0},
- {6, '\\', 'u', '0', '0', 'c', '2', 0},
- {6, '\\', 'u', '0', '0', 'c', '3', 0},
- {6, '\\', 'u', '0', '0', 'c', '4', 0},
- {6, '\\', 'u', '0', '0', 'c', '5', 0},
- {6, '\\', 'u', '0', '0', 'c', '6', 0},
- {6, '\\', 'u', '0', '0', 'c', '7', 0},
- {6, '\\', 'u', '0', '0', 'c', '8', 0},
- {6, '\\', 'u', '0', '0', 'c', '9', 0},
- {6, '\\', 'u', '0', '0', 'c', 'a', 0},
- {6, '\\', 'u', '0', '0', 'c', 'b', 0},
- {6, '\\', 'u', '0', '0', 'c', 'c', 0},
- {6, '\\', 'u', '0', '0', 'c', 'd', 0},
- {6, '\\', 'u', '0', '0', 'c', 'e', 0},
- {6, '\\', 'u', '0', '0', 'c', 'f', 0},
- {6, '\\', 'u', '0', '0', 'd', '0', 0},
- {6, '\\', 'u', '0', '0', 'd', '1', 0},
- {6, '\\', 'u', '0', '0', 'd', '2', 0},
- {6, '\\', 'u', '0', '0', 'd', '3', 0},
- {6, '\\', 'u', '0', '0', 'd', '4', 0},
- {6, '\\', 'u', '0', '0', 'd', '5', 0},
- {6, '\\', 'u', '0', '0', 'd', '6', 0},
- {6, '\\', 'u', '0', '0', 'd', '7', 0},
- {6, '\\', 'u', '0', '0', 'd', '8', 0},
- {6, '\\', 'u', '0', '0', 'd', '9', 0},
- {6, '\\', 'u', '0', '0', 'd', 'a', 0},
- {6, '\\', 'u', '0', '0', 'd', 'b', 0},
- {6, '\\', 'u', '0', '0', 'd', 'c', 0},
- {6, '\\', 'u', '0', '0', 'd', 'd', 0},
- {6, '\\', 'u', '0', '0', 'd', 'e', 0},
- {6, '\\', 'u', '0', '0', 'd', 'f', 0},
- {6, '\\', 'u', '0', '0', 'e', '0', 0},
- {6, '\\', 'u', '0', '0', 'e', '1', 0},
- {6, '\\', 'u', '0', '0', 'e', '2', 0},
- {6, '\\', 'u', '0', '0', 'e', '3', 0},
- {6, '\\', 'u', '0', '0', 'e', '4', 0},
- {6, '\\', 'u', '0', '0', 'e', '5', 0},
- {6, '\\', 'u', '0', '0', 'e', '6', 0},
- {6, '\\', 'u', '0', '0', 'e', '7', 0},
- {6, '\\', 'u', '0', '0', 'e', '8', 0},
- {6, '\\', 'u', '0', '0', 'e', '9', 0},
- {6, '\\', 'u', '0', '0', 'e', 'a', 0},
- {6, '\\', 'u', '0', '0', 'e', 'b', 0},
- {6, '\\', 'u', '0', '0', 'e', 'c', 0},
- {6, '\\', 'u', '0', '0', 'e', 'd', 0},
- {6, '\\', 'u', '0', '0', 'e', 'e', 0},
- {6, '\\', 'u', '0', '0', 'e', 'f', 0},
- {6, '\\', 'u', '0', '0', 'f', '0', 0},
- {6, '\\', 'u', '0', '0', 'f', '1', 0},
- {6, '\\', 'u', '0', '0', 'f', '2', 0},
- {6, '\\', 'u', '0', '0', 'f', '3', 0},
- {6, '\\', 'u', '0', '0', 'f', '4', 0},
- {6, '\\', 'u', '0', '0', 'f', '5', 0},
- {6, '\\', 'u', '0', '0', 'f', '6', 0},
- {6, '\\', 'u', '0', '0', 'f', '7', 0},
- {6, '\\', 'u', '0', '0', 'f', '8', 0},
- {6, '\\', 'u', '0', '0', 'f', '9', 0},
- {6, '\\', 'u', '0', '0', 'f', 'a', 0},
- {6, '\\', 'u', '0', '0', 'f', 'b', 0},
- {6, '\\', 'u', '0', '0', 'f', 'c', 0},
- {6, '\\', 'u', '0', '0', 'f', 'd', 0},
- {6, '\\', 'u', '0', '0', 'f', 'e', 0},
- {6, '\\', 'u', '0', '0', 'f', 'f', 0},
+ { 6, '\\', 'u', '0', '0', '0', '0', 0 }, /* 0x00 '\x00' */
+ { 6, '\\', 'u', '0', '0', '0', '1', 0 }, /* 0x01 '\x01' */
+ { 6, '\\', 'u', '0', '0', '0', '2', 0 }, /* 0x02 '\x02' */
+ { 6, '\\', 'u', '0', '0', '0', '3', 0 }, /* 0x03 '\x03' */
+ { 6, '\\', 'u', '0', '0', '0', '4', 0 }, /* 0x04 '\x04' */
+ { 6, '\\', 'u', '0', '0', '0', '5', 0 }, /* 0x05 '\x05' */
+ { 6, '\\', 'u', '0', '0', '0', '6', 0 }, /* 0x06 '\x06' */
+ { 6, '\\', 'u', '0', '0', '0', '7', 0 }, /* 0x07 '\x07' */
+ { 2, '\\', 'b', 0, 0, 0, 0, 0 }, /* 0x08 '\x08' */
+ { 2, '\\', 't', 0, 0, 0, 0, 0 }, /* 0x09 '\t' */
+ { 2, '\\', 'n', 0, 0, 0, 0, 0 }, /* 0x0a '\n' */
+ { 6, '\\', 'u', '0', '0', '0', 'b', 0 }, /* 0x0b '\x0b' */
+ { 2, '\\', 'f', 0, 0, 0, 0, 0 }, /* 0x0c '\x0c' */
+ { 2, '\\', 'r', 0, 0, 0, 0, 0 }, /* 0x0d '\r' */
+ { 6, '\\', 'u', '0', '0', '0', 'e', 0 }, /* 0x0e '\x0e' */
+ { 6, '\\', 'u', '0', '0', '0', 'f', 0 }, /* 0x0f '\x0f' */
+ { 6, '\\', 'u', '0', '0', '1', '0', 0 }, /* 0x10 '\x10' */
+ { 6, '\\', 'u', '0', '0', '1', '1', 0 }, /* 0x11 '\x11' */
+ { 6, '\\', 'u', '0', '0', '1', '2', 0 }, /* 0x12 '\x12' */
+ { 6, '\\', 'u', '0', '0', '1', '3', 0 }, /* 0x13 '\x13' */
+ { 6, '\\', 'u', '0', '0', '1', '4', 0 }, /* 0x14 '\x14' */
+ { 6, '\\', 'u', '0', '0', '1', '5', 0 }, /* 0x15 '\x15' */
+ { 6, '\\', 'u', '0', '0', '1', '6', 0 }, /* 0x16 '\x16' */
+ { 6, '\\', 'u', '0', '0', '1', '7', 0 }, /* 0x17 '\x17' */
+ { 6, '\\', 'u', '0', '0', '1', '8', 0 }, /* 0x18 '\x18' */
+ { 6, '\\', 'u', '0', '0', '1', '9', 0 }, /* 0x19 '\x19' */
+ { 6, '\\', 'u', '0', '0', '1', 'a', 0 }, /* 0x1a '\x1a' */
+ { 6, '\\', 'u', '0', '0', '1', 'b', 0 }, /* 0x1b '\x1b' */
+ { 6, '\\', 'u', '0', '0', '1', 'c', 0 }, /* 0x1c '\x1c' */
+ { 6, '\\', 'u', '0', '0', '1', 'd', 0 }, /* 0x1d '\x1d' */
+ { 6, '\\', 'u', '0', '0', '1', 'e', 0 }, /* 0x1e '\x1e' */
+ { 6, '\\', 'u', '0', '0', '1', 'f', 0 }, /* 0x1f '\x1f' */
+ { 1, ' ', 0, 0, 0, 0, 0, 0 }, /* 0x20 ' ' */
+ { 1, '!', 0, 0, 0, 0, 0, 0 }, /* 0x21 '!' */
+ { 2, '\\', '"', 0, 0, 0, 0, 0 }, /* 0x22 '"' */
+ { 1, '#', 0, 0, 0, 0, 0, 0 }, /* 0x23 '#' */
+ { 1, '$', 0, 0, 0, 0, 0, 0 }, /* 0x24 '$' */
+ { 1, '%', 0, 0, 0, 0, 0, 0 }, /* 0x25 '%' */
+ { 6, '\\', 'u', '0', '0', '2', '6', 0 }, /* 0x26 '&' */
+ { 6, '\\', 'u', '0', '0', '2', '7', 0 }, /* 0x27 "'" */
+ { 1, '(', 0, 0, 0, 0, 0, 0 }, /* 0x28 '(' */
+ { 1, ')', 0, 0, 0, 0, 0, 0 }, /* 0x29 ')' */
+ { 1, '*', 0, 0, 0, 0, 0, 0 }, /* 0x2a '*' */
+ { 1, '+', 0, 0, 0, 0, 0, 0 }, /* 0x2b '+' */
+ { 1, ',', 0, 0, 0, 0, 0, 0 }, /* 0x2c ',' */
+ { 1, '-', 0, 0, 0, 0, 0, 0 }, /* 0x2d '-' */
+ { 1, '.', 0, 0, 0, 0, 0, 0 }, /* 0x2e '.' */
+ { 1, '/', 0, 0, 0, 0, 0, 0 }, /* 0x2f '/' */
+ { 1, '0', 0, 0, 0, 0, 0, 0 }, /* 0x30 '0' */
+ { 1, '1', 0, 0, 0, 0, 0, 0 }, /* 0x31 '1' */
+ { 1, '2', 0, 0, 0, 0, 0, 0 }, /* 0x32 '2' */
+ { 1, '3', 0, 0, 0, 0, 0, 0 }, /* 0x33 '3' */
+ { 1, '4', 0, 0, 0, 0, 0, 0 }, /* 0x34 '4' */
+ { 1, '5', 0, 0, 0, 0, 0, 0 }, /* 0x35 '5' */
+ { 1, '6', 0, 0, 0, 0, 0, 0 }, /* 0x36 '6' */
+ { 1, '7', 0, 0, 0, 0, 0, 0 }, /* 0x37 '7' */
+ { 1, '8', 0, 0, 0, 0, 0, 0 }, /* 0x38 '8' */
+ { 1, '9', 0, 0, 0, 0, 0, 0 }, /* 0x39 '9' */
+ { 1, ':', 0, 0, 0, 0, 0, 0 }, /* 0x3a ':' */
+ { 1, ';', 0, 0, 0, 0, 0, 0 }, /* 0x3b ';' */
+ { 6, '\\', 'u', '0', '0', '3', 'c', 0 }, /* 0x3c '<' */
+ { 1, '=', 0, 0, 0, 0, 0, 0 }, /* 0x3d '=' */
+ { 6, '\\', 'u', '0', '0', '3', 'e', 0 }, /* 0x3e '>' */
+ { 1, '?', 0, 0, 0, 0, 0, 0 }, /* 0x3f '?' */
+ { 1, '@', 0, 0, 0, 0, 0, 0 }, /* 0x40 '@' */
+ { 1, 'A', 0, 0, 0, 0, 0, 0 }, /* 0x41 'A' */
+ { 1, 'B', 0, 0, 0, 0, 0, 0 }, /* 0x42 'B' */
+ { 1, 'C', 0, 0, 0, 0, 0, 0 }, /* 0x43 'C' */
+ { 1, 'D', 0, 0, 0, 0, 0, 0 }, /* 0x44 'D' */
+ { 1, 'E', 0, 0, 0, 0, 0, 0 }, /* 0x45 'E' */
+ { 1, 'F', 0, 0, 0, 0, 0, 0 }, /* 0x46 'F' */
+ { 1, 'G', 0, 0, 0, 0, 0, 0 }, /* 0x47 'G' */
+ { 1, 'H', 0, 0, 0, 0, 0, 0 }, /* 0x48 'H' */
+ { 1, 'I', 0, 0, 0, 0, 0, 0 }, /* 0x49 'I' */
+ { 1, 'J', 0, 0, 0, 0, 0, 0 }, /* 0x4a 'J' */
+ { 1, 'K', 0, 0, 0, 0, 0, 0 }, /* 0x4b 'K' */
+ { 1, 'L', 0, 0, 0, 0, 0, 0 }, /* 0x4c 'L' */
+ { 1, 'M', 0, 0, 0, 0, 0, 0 }, /* 0x4d 'M' */
+ { 1, 'N', 0, 0, 0, 0, 0, 0 }, /* 0x4e 'N' */
+ { 1, 'O', 0, 0, 0, 0, 0, 0 }, /* 0x4f 'O' */
+ { 1, 'P', 0, 0, 0, 0, 0, 0 }, /* 0x50 'P' */
+ { 1, 'Q', 0, 0, 0, 0, 0, 0 }, /* 0x51 'Q' */
+ { 1, 'R', 0, 0, 0, 0, 0, 0 }, /* 0x52 'R' */
+ { 1, 'S', 0, 0, 0, 0, 0, 0 }, /* 0x53 'S' */
+ { 1, 'T', 0, 0, 0, 0, 0, 0 }, /* 0x54 'T' */
+ { 1, 'U', 0, 0, 0, 0, 0, 0 }, /* 0x55 'U' */
+ { 1, 'V', 0, 0, 0, 0, 0, 0 }, /* 0x56 'V' */
+ { 1, 'W', 0, 0, 0, 0, 0, 0 }, /* 0x57 'W' */
+ { 1, 'X', 0, 0, 0, 0, 0, 0 }, /* 0x58 'X' */
+ { 1, 'Y', 0, 0, 0, 0, 0, 0 }, /* 0x59 'Y' */
+ { 1, 'Z', 0, 0, 0, 0, 0, 0 }, /* 0x5a 'Z' */
+ { 1, '[', 0, 0, 0, 0, 0, 0 }, /* 0x5b '[' */
+ { 2, '\\', '\\', 0, 0, 0, 0, 0 }, /* 0x5c '\\' */
+ { 1, ']', 0, 0, 0, 0, 0, 0 }, /* 0x5d ']' */
+ { 1, '^', 0, 0, 0, 0, 0, 0 }, /* 0x5e '^' */
+ { 1, '_', 0, 0, 0, 0, 0, 0 }, /* 0x5f '_' */
+ { 1, '`', 0, 0, 0, 0, 0, 0 }, /* 0x60 '`' */
+ { 1, 'a', 0, 0, 0, 0, 0, 0 }, /* 0x61 'a' */
+ { 1, 'b', 0, 0, 0, 0, 0, 0 }, /* 0x62 'b' */
+ { 1, 'c', 0, 0, 0, 0, 0, 0 }, /* 0x63 'c' */
+ { 1, 'd', 0, 0, 0, 0, 0, 0 }, /* 0x64 'd' */
+ { 1, 'e', 0, 0, 0, 0, 0, 0 }, /* 0x65 'e' */
+ { 1, 'f', 0, 0, 0, 0, 0, 0 }, /* 0x66 'f' */
+ { 1, 'g', 0, 0, 0, 0, 0, 0 }, /* 0x67 'g' */
+ { 1, 'h', 0, 0, 0, 0, 0, 0 }, /* 0x68 'h' */
+ { 1, 'i', 0, 0, 0, 0, 0, 0 }, /* 0x69 'i' */
+ { 1, 'j', 0, 0, 0, 0, 0, 0 }, /* 0x6a 'j' */
+ { 1, 'k', 0, 0, 0, 0, 0, 0 }, /* 0x6b 'k' */
+ { 1, 'l', 0, 0, 0, 0, 0, 0 }, /* 0x6c 'l' */
+ { 1, 'm', 0, 0, 0, 0, 0, 0 }, /* 0x6d 'm' */
+ { 1, 'n', 0, 0, 0, 0, 0, 0 }, /* 0x6e 'n' */
+ { 1, 'o', 0, 0, 0, 0, 0, 0 }, /* 0x6f 'o' */
+ { 1, 'p', 0, 0, 0, 0, 0, 0 }, /* 0x70 'p' */
+ { 1, 'q', 0, 0, 0, 0, 0, 0 }, /* 0x71 'q' */
+ { 1, 'r', 0, 0, 0, 0, 0, 0 }, /* 0x72 'r' */
+ { 1, 's', 0, 0, 0, 0, 0, 0 }, /* 0x73 's' */
+ { 1, 't', 0, 0, 0, 0, 0, 0 }, /* 0x74 't' */
+ { 1, 'u', 0, 0, 0, 0, 0, 0 }, /* 0x75 'u' */
+ { 1, 'v', 0, 0, 0, 0, 0, 0 }, /* 0x76 'v' */
+ { 1, 'w', 0, 0, 0, 0, 0, 0 }, /* 0x77 'w' */
+ { 1, 'x', 0, 0, 0, 0, 0, 0 }, /* 0x78 'x' */
+ { 1, 'y', 0, 0, 0, 0, 0, 0 }, /* 0x79 'y' */
+ { 1, 'z', 0, 0, 0, 0, 0, 0 }, /* 0x7a 'z' */
+ { 1, '{', 0, 0, 0, 0, 0, 0 }, /* 0x7b '{' */
+ { 1, '|', 0, 0, 0, 0, 0, 0 }, /* 0x7c '|' */
+ { 1, '}', 0, 0, 0, 0, 0, 0 }, /* 0x7d '}' */
+ { 1, '~', 0, 0, 0, 0, 0, 0 }, /* 0x7e '~' */
+ { 6, '\\', 'u', '0', '0', '7', 'f', 0 }, /* 0x7f '\x7f' */
+ { 6, '\\', 'u', '0', '0', '8', '0', 0 }, /* 0x80 '\x80' */
+ { 6, '\\', 'u', '0', '0', '8', '1', 0 }, /* 0x81 '\x81' */
+ { 6, '\\', 'u', '0', '0', '8', '2', 0 }, /* 0x82 '\x82' */
+ { 6, '\\', 'u', '0', '0', '8', '3', 0 }, /* 0x83 '\x83' */
+ { 6, '\\', 'u', '0', '0', '8', '4', 0 }, /* 0x84 '\x84' */
+ { 6, '\\', 'u', '0', '0', '8', '5', 0 }, /* 0x85 '\x85' */
+ { 6, '\\', 'u', '0', '0', '8', '6', 0 }, /* 0x86 '\x86' */
+ { 6, '\\', 'u', '0', '0', '8', '7', 0 }, /* 0x87 '\x87' */
+ { 6, '\\', 'u', '0', '0', '8', '8', 0 }, /* 0x88 '\x88' */
+ { 6, '\\', 'u', '0', '0', '8', '9', 0 }, /* 0x89 '\x89' */
+ { 6, '\\', 'u', '0', '0', '8', 'a', 0 }, /* 0x8a '\x8a' */
+ { 6, '\\', 'u', '0', '0', '8', 'b', 0 }, /* 0x8b '\x8b' */
+ { 6, '\\', 'u', '0', '0', '8', 'c', 0 }, /* 0x8c '\x8c' */
+ { 6, '\\', 'u', '0', '0', '8', 'd', 0 }, /* 0x8d '\x8d' */
+ { 6, '\\', 'u', '0', '0', '8', 'e', 0 }, /* 0x8e '\x8e' */
+ { 6, '\\', 'u', '0', '0', '8', 'f', 0 }, /* 0x8f '\x8f' */
+ { 6, '\\', 'u', '0', '0', '9', '0', 0 }, /* 0x90 '\x90' */
+ { 6, '\\', 'u', '0', '0', '9', '1', 0 }, /* 0x91 '\x91' */
+ { 6, '\\', 'u', '0', '0', '9', '2', 0 }, /* 0x92 '\x92' */
+ { 6, '\\', 'u', '0', '0', '9', '3', 0 }, /* 0x93 '\x93' */
+ { 6, '\\', 'u', '0', '0', '9', '4', 0 }, /* 0x94 '\x94' */
+ { 6, '\\', 'u', '0', '0', '9', '5', 0 }, /* 0x95 '\x95' */
+ { 6, '\\', 'u', '0', '0', '9', '6', 0 }, /* 0x96 '\x96' */
+ { 6, '\\', 'u', '0', '0', '9', '7', 0 }, /* 0x97 '\x97' */
+ { 6, '\\', 'u', '0', '0', '9', '8', 0 }, /* 0x98 '\x98' */
+ { 6, '\\', 'u', '0', '0', '9', '9', 0 }, /* 0x99 '\x99' */
+ { 6, '\\', 'u', '0', '0', '9', 'a', 0 }, /* 0x9a '\x9a' */
+ { 6, '\\', 'u', '0', '0', '9', 'b', 0 }, /* 0x9b '\x9b' */
+ { 6, '\\', 'u', '0', '0', '9', 'c', 0 }, /* 0x9c '\x9c' */
+ { 6, '\\', 'u', '0', '0', '9', 'd', 0 }, /* 0x9d '\x9d' */
+ { 6, '\\', 'u', '0', '0', '9', 'e', 0 }, /* 0x9e '\x9e' */
+ { 6, '\\', 'u', '0', '0', '9', 'f', 0 }, /* 0x9f '\x9f' */
+ { 6, '\\', 'u', '0', '0', 'a', '0', 0 }, /* 0xa0 '\xa0' */
+ { 6, '\\', 'u', '0', '0', 'a', '1', 0 }, /* 0xa1 '¡' */
+ { 6, '\\', 'u', '0', '0', 'a', '2', 0 }, /* 0xa2 '¢' */
+ { 6, '\\', 'u', '0', '0', 'a', '3', 0 }, /* 0xa3 '£' */
+ { 6, '\\', 'u', '0', '0', 'a', '4', 0 }, /* 0xa4 '¤' */
+ { 6, '\\', 'u', '0', '0', 'a', '5', 0 }, /* 0xa5 '¥' */
+ { 6, '\\', 'u', '0', '0', 'a', '6', 0 }, /* 0xa6 '¦' */
+ { 6, '\\', 'u', '0', '0', 'a', '7', 0 }, /* 0xa7 '§' */
+ { 6, '\\', 'u', '0', '0', 'a', '8', 0 }, /* 0xa8 '¨' */
+ { 6, '\\', 'u', '0', '0', 'a', '9', 0 }, /* 0xa9 '©' */
+ { 6, '\\', 'u', '0', '0', 'a', 'a', 0 }, /* 0xaa 'ª' */
+ { 6, '\\', 'u', '0', '0', 'a', 'b', 0 }, /* 0xab '«' */
+ { 6, '\\', 'u', '0', '0', 'a', 'c', 0 }, /* 0xac '¬' */
+ { 6, '\\', 'u', '0', '0', 'a', 'd', 0 }, /* 0xad '\xad' */
+ { 6, '\\', 'u', '0', '0', 'a', 'e', 0 }, /* 0xae '®' */
+ { 6, '\\', 'u', '0', '0', 'a', 'f', 0 }, /* 0xaf '¯' */
+ { 6, '\\', 'u', '0', '0', 'b', '0', 0 }, /* 0xb0 '°' */
+ { 6, '\\', 'u', '0', '0', 'b', '1', 0 }, /* 0xb1 '±' */
+ { 6, '\\', 'u', '0', '0', 'b', '2', 0 }, /* 0xb2 '²' */
+ { 6, '\\', 'u', '0', '0', 'b', '3', 0 }, /* 0xb3 '³' */
+ { 6, '\\', 'u', '0', '0', 'b', '4', 0 }, /* 0xb4 '´' */
+ { 6, '\\', 'u', '0', '0', 'b', '5', 0 }, /* 0xb5 'µ' */
+ { 6, '\\', 'u', '0', '0', 'b', '6', 0 }, /* 0xb6 '¶' */
+ { 6, '\\', 'u', '0', '0', 'b', '7', 0 }, /* 0xb7 '·' */
+ { 6, '\\', 'u', '0', '0', 'b', '8', 0 }, /* 0xb8 '¸' */
+ { 6, '\\', 'u', '0', '0', 'b', '9', 0 }, /* 0xb9 '¹' */
+ { 6, '\\', 'u', '0', '0', 'b', 'a', 0 }, /* 0xba 'º' */
+ { 6, '\\', 'u', '0', '0', 'b', 'b', 0 }, /* 0xbb '»' */
+ { 6, '\\', 'u', '0', '0', 'b', 'c', 0 }, /* 0xbc '¼' */
+ { 6, '\\', 'u', '0', '0', 'b', 'd', 0 }, /* 0xbd '½' */
+ { 6, '\\', 'u', '0', '0', 'b', 'e', 0 }, /* 0xbe '¾' */
+ { 6, '\\', 'u', '0', '0', 'b', 'f', 0 }, /* 0xbf '¿' */
+ { 6, '\\', 'u', '0', '0', 'c', '0', 0 }, /* 0xc0 'À' */
+ { 6, '\\', 'u', '0', '0', 'c', '1', 0 }, /* 0xc1 'Á' */
+ { 6, '\\', 'u', '0', '0', 'c', '2', 0 }, /* 0xc2 'Â' */
+ { 6, '\\', 'u', '0', '0', 'c', '3', 0 }, /* 0xc3 'Ã' */
+ { 6, '\\', 'u', '0', '0', 'c', '4', 0 }, /* 0xc4 'Ä' */
+ { 6, '\\', 'u', '0', '0', 'c', '5', 0 }, /* 0xc5 'Å' */
+ { 6, '\\', 'u', '0', '0', 'c', '6', 0 }, /* 0xc6 'Æ' */
+ { 6, '\\', 'u', '0', '0', 'c', '7', 0 }, /* 0xc7 'Ç' */
+ { 6, '\\', 'u', '0', '0', 'c', '8', 0 }, /* 0xc8 'È' */
+ { 6, '\\', 'u', '0', '0', 'c', '9', 0 }, /* 0xc9 'É' */
+ { 6, '\\', 'u', '0', '0', 'c', 'a', 0 }, /* 0xca 'Ê' */
+ { 6, '\\', 'u', '0', '0', 'c', 'b', 0 }, /* 0xcb 'Ë' */
+ { 6, '\\', 'u', '0', '0', 'c', 'c', 0 }, /* 0xcc 'Ì' */
+ { 6, '\\', 'u', '0', '0', 'c', 'd', 0 }, /* 0xcd 'Í' */
+ { 6, '\\', 'u', '0', '0', 'c', 'e', 0 }, /* 0xce 'Î' */
+ { 6, '\\', 'u', '0', '0', 'c', 'f', 0 }, /* 0xcf 'Ï' */
+ { 6, '\\', 'u', '0', '0', 'd', '0', 0 }, /* 0xd0 'Ð' */
+ { 6, '\\', 'u', '0', '0', 'd', '1', 0 }, /* 0xd1 'Ñ' */
+ { 6, '\\', 'u', '0', '0', 'd', '2', 0 }, /* 0xd2 'Ò' */
+ { 6, '\\', 'u', '0', '0', 'd', '3', 0 }, /* 0xd3 'Ó' */
+ { 6, '\\', 'u', '0', '0', 'd', '4', 0 }, /* 0xd4 'Ô' */
+ { 6, '\\', 'u', '0', '0', 'd', '5', 0 }, /* 0xd5 'Õ' */
+ { 6, '\\', 'u', '0', '0', 'd', '6', 0 }, /* 0xd6 'Ö' */
+ { 6, '\\', 'u', '0', '0', 'd', '7', 0 }, /* 0xd7 '×' */
+ { 6, '\\', 'u', '0', '0', 'd', '8', 0 }, /* 0xd8 'Ø' */
+ { 6, '\\', 'u', '0', '0', 'd', '9', 0 }, /* 0xd9 'Ù' */
+ { 6, '\\', 'u', '0', '0', 'd', 'a', 0 }, /* 0xda 'Ú' */
+ { 6, '\\', 'u', '0', '0', 'd', 'b', 0 }, /* 0xdb 'Û' */
+ { 6, '\\', 'u', '0', '0', 'd', 'c', 0 }, /* 0xdc 'Ü' */
+ { 6, '\\', 'u', '0', '0', 'd', 'd', 0 }, /* 0xdd 'Ý' */
+ { 6, '\\', 'u', '0', '0', 'd', 'e', 0 }, /* 0xde 'Þ' */
+ { 6, '\\', 'u', '0', '0', 'd', 'f', 0 }, /* 0xdf 'ß' */
+ { 6, '\\', 'u', '0', '0', 'e', '0', 0 }, /* 0xe0 'à' */
+ { 6, '\\', 'u', '0', '0', 'e', '1', 0 }, /* 0xe1 'á' */
+ { 6, '\\', 'u', '0', '0', 'e', '2', 0 }, /* 0xe2 'â' */
+ { 6, '\\', 'u', '0', '0', 'e', '3', 0 }, /* 0xe3 'ã' */
+ { 6, '\\', 'u', '0', '0', 'e', '4', 0 }, /* 0xe4 'ä' */
+ { 6, '\\', 'u', '0', '0', 'e', '5', 0 }, /* 0xe5 'å' */
+ { 6, '\\', 'u', '0', '0', 'e', '6', 0 }, /* 0xe6 'æ' */
+ { 6, '\\', 'u', '0', '0', 'e', '7', 0 }, /* 0xe7 'ç' */
+ { 6, '\\', 'u', '0', '0', 'e', '8', 0 }, /* 0xe8 'è' */
+ { 6, '\\', 'u', '0', '0', 'e', '9', 0 }, /* 0xe9 'é' */
+ { 6, '\\', 'u', '0', '0', 'e', 'a', 0 }, /* 0xea 'ê' */
+ { 6, '\\', 'u', '0', '0', 'e', 'b', 0 }, /* 0xeb 'ë' */
+ { 6, '\\', 'u', '0', '0', 'e', 'c', 0 }, /* 0xec 'ì' */
+ { 6, '\\', 'u', '0', '0', 'e', 'd', 0 }, /* 0xed 'í' */
+ { 6, '\\', 'u', '0', '0', 'e', 'e', 0 }, /* 0xee 'î' */
+ { 6, '\\', 'u', '0', '0', 'e', 'f', 0 }, /* 0xef 'ï' */
+ { 6, '\\', 'u', '0', '0', 'f', '0', 0 }, /* 0xf0 'ð' */
+ { 6, '\\', 'u', '0', '0', 'f', '1', 0 }, /* 0xf1 'ñ' */
+ { 6, '\\', 'u', '0', '0', 'f', '2', 0 }, /* 0xf2 'ò' */
+ { 6, '\\', 'u', '0', '0', 'f', '3', 0 }, /* 0xf3 'ó' */
+ { 6, '\\', 'u', '0', '0', 'f', '4', 0 }, /* 0xf4 'ô' */
+ { 6, '\\', 'u', '0', '0', 'f', '5', 0 }, /* 0xf5 'õ' */
+ { 6, '\\', 'u', '0', '0', 'f', '6', 0 }, /* 0xf6 'ö' */
+ { 6, '\\', 'u', '0', '0', 'f', '7', 0 }, /* 0xf7 '÷' */
+ { 6, '\\', 'u', '0', '0', 'f', '8', 0 }, /* 0xf8 'ø' */
+ { 6, '\\', 'u', '0', '0', 'f', '9', 0 }, /* 0xf9 'ù' */
+ { 6, '\\', 'u', '0', '0', 'f', 'a', 0 }, /* 0xfa 'ú' */
+ { 6, '\\', 'u', '0', '0', 'f', 'b', 0 }, /* 0xfb 'û' */
+ { 6, '\\', 'u', '0', '0', 'f', 'c', 0 }, /* 0xfc 'ü' */
+ { 6, '\\', 'u', '0', '0', 'f', 'd', 0 }, /* 0xfd 'ý' */
+ { 6, '\\', 'u', '0', '0', 'f', 'e', 0 }, /* 0xfe 'þ' */
+ { 6, '\\', 'u', '0', '0', 'f', 'f', 0 }, /* 0xff 'ÿ' */
};
-const unsigned __int128 EscapeDct::is_escaped_array = (
- ((unsigned __int128) 0x8000000010000000 << 64) |
- ((unsigned __int128) 0x500000c4ffffffff)
-);
+const std::uint64_t EscapeDct::is_escaped_lo = UINT64_C(0x500000c4ffffffff);
+const std::uint64_t EscapeDct::is_escaped_hi = UINT64_C(0x8000000010000000);
diff --git a/src/native.hpp b/src/native.hpp
index 591a559..1fb3a1e 100644
--- a/src/native.hpp
+++ b/src/native.hpp
@@ -1,4 +1,5 @@
-#pragma once
+#ifndef JSON5EncoderCpp_native
+#define JSON5EncoderCpp_native
#include <array>
#include <cstdint>
@@ -57,18 +58,22 @@
constexpr char HEX[] = "0123456789abcdef";
struct EscapeDct {
- using Item = std::array<char, 8>; // length, unto 6 characters, terminator (actually not needed)
+ using Item = std::array<char, 8>; // length, upto 6 characters, terminator (actually not needed)
static constexpr std::size_t length = 0x100;
using Items = Item[length];
static const Items items;
- static const unsigned __int128 is_escaped_array;
+ static const std::uint64_t is_escaped_lo;
+ static const std::uint64_t is_escaped_hi;
static inline bool is_escaped(std::uint32_t c) {
- return (c >= 0x0080) || (is_escaped_array & (
- static_cast<unsigned __int128>(1) <<
- static_cast<std::uint8_t>(c)
- ));
+ if (c < 0x40) {
+ return is_escaped_lo & (static_cast<std::uint64_t>(1) << c);
+ } else if (c < 0x80) {
+ return is_escaped_hi & (static_cast<std::uint64_t>(1) << (c - 0x40));
+ } else {
+ return true;
+ }
}
template <class S>
@@ -96,3 +101,5 @@
static constexpr std::size_t LONGDESCRIPTION_LENGTH = sizeof(LONGDESCRIPTION) - 1;
}
+
+#endif