-
Notifications
You must be signed in to change notification settings - Fork 0
/
Data.h
158 lines (146 loc) · 11.3 KB
/
Data.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#ifndef DATA_H
#define DATA_H
#include <iostream>
#include <string>
#include <vector>
#include <array>
#include <cstdint>
using Byte = uint8_t;
using byteVec = std::vector<Byte>;
enum Encoding{
NUMERIC,
ALPHANUM,
BYTE_ENC,
KANJI
};
enum Err_Level{
_L_, // 7% recovery
_M_, // 15% recovery
_Q_, // 25% recovery
_H_, // 30% recovery
_UNDEF_ // Invalid setting
};
static constexpr std::array<Byte, 7> finder_dat = {
0b1111111,
0b1000001,
0b1011101,
0b1011101,
0b1011101,
0b1000001,
0b1111111
};
static constexpr std::array<Byte, 5> align_dat = {
0b11111,
0b10001,
0b10101,
0b10001,
0b11111
};
static constexpr std::array<std::array<Byte, 4>, 3> indicator_len = {{
{ 10, 9, 8, 8 },
{ 12, 11, 16, 10 },
{ 14, 13, 16, 12 }
}};
// LMQH
static constexpr std::array<std::array<unsigned, 4>, 160> versionSize = {{
// _L_ ...
//{NUMERIC,ALPHANUM,BYTE,KANJI}, ...
{ 41, 25, 17, 10 }, { 34, 20, 14, 8 }, { 27, 16, 11, 7 }, { 17, 10, 7, 4 },// VERSION 1
{ 77, 47, 32, 20 }, { 63, 38, 26, 16 }, { 48, 29, 20, 12 }, { 34, 20, 14, 8 },// VERSION 2
{ 127, 77, 53, 32 }, { 101, 61, 42, 26 }, { 77, 47, 32, 20 }, { 58, 35, 24, 15 },// VERSION 3
{ 187, 114, 78, 48 }, { 149, 90, 62, 38 }, { 111, 67, 46, 28 }, { 82, 50, 34, 21 },// VERSION 4
{ 255, 154, 106, 65 }, { 202, 122, 84, 52 }, { 144, 87, 60, 37 }, { 106, 64, 44, 27 },// VERSION 5
{ 322, 195, 134, 82 }, { 255, 154, 106, 65 }, { 178, 108, 74, 45 }, { 139, 84, 58, 36 },// VERSION 6
{ 370, 224, 154, 95 }, { 293, 178, 122, 75 }, { 207, 125, 86, 53 }, { 154, 93, 64, 39 },// VERSION 7
{ 461, 279, 192, 118 }, { 365, 221, 152, 93 }, { 259, 157, 108, 66 }, { 202, 122, 84, 52 },// VERSION 8
{ 552, 335, 230, 141 }, { 432, 262, 180, 111 }, { 312, 189, 130, 80 }, { 235, 143, 98, 60 },// VERSION 9
{ 652, 395, 271, 167 }, { 513, 311, 213, 131 }, { 364, 221, 151, 93 }, { 288, 174, 119, 74 },// VERSION 10
{ 772, 468, 321, 198 }, { 604, 366, 251, 155 }, { 427, 259, 177, 109 }, { 331, 200, 137, 85 },// VERSION 11
{ 883, 535, 367, 226 }, { 691, 419, 287, 177 }, { 489, 296, 203, 125 }, { 374, 227, 155, 96 },// VERSION 12
{ 1022, 619, 425, 262 }, { 796, 483, 331, 204 }, { 580, 352, 241, 149 }, { 427, 259, 177, 109 },// VERSION 13
{ 1101, 667, 458, 282 }, { 871, 528, 362, 223 }, { 621, 376, 258, 159 }, { 468, 283, 194, 120 },// VERSION 14
{ 1250, 758, 520, 320 }, { 991, 600, 412, 254 }, { 703, 426, 292, 180 }, { 530, 321, 220, 136 },// VERSION 15
{ 1408, 854, 586, 361 }, { 1082, 656, 450, 277 }, { 775, 470, 322, 198 }, { 602, 365, 250, 154 },// VERSION 16
{ 1548, 938, 644, 397 }, { 1212, 734, 504, 310 }, { 876, 531, 364, 224 }, { 674, 408, 280, 173 },// VERSION 17
{ 1725, 1046, 718, 442 }, { 1346, 816, 560, 345 }, { 948, 574, 394, 243 }, { 746, 452, 310, 191 },// VERSION 18
{ 1903, 1153, 792, 488 }, { 1500, 909, 624, 384 }, { 1063, 644, 442, 272 }, { 813, 493, 338, 208 },// VERSION 19
{ 2061, 1249, 858, 528 }, { 1600, 970, 666, 410 }, { 1159, 702, 482, 297 }, { 919, 557, 382, 235 },// VERSION 20
{ 2232, 1352, 929, 572 }, { 1708, 1035, 711, 438 }, { 1224, 742, 509, 314 }, { 969, 587, 403, 248 },// VERSION 21
{ 2409, 1460, 1003, 618 }, { 1872, 1134, 779, 480 }, { 1358, 823, 565, 348 }, { 1056, 640, 439, 270 },// VERSION 22
{ 2620, 1588, 1091, 672 }, { 2059, 1248, 857, 528 }, { 1468, 890, 611, 376 }, { 1108, 672, 461, 284 },// VERSION 23
{ 2812, 1704, 1171, 721 }, { 2188, 1326, 911, 561 }, { 1588, 963, 661, 407 }, { 1228, 744, 511, 315 },// VERSION 24
{ 3057, 1853, 1273, 784 }, { 2395, 1451, 997, 614 }, { 1718, 1041, 715, 440 }, { 1286, 779, 535, 330 },// VERSION 25
{ 3283, 1990, 1367, 842 }, { 2544, 1542, 1059, 652 }, { 1804, 1094, 751, 462 }, { 1425, 864, 593, 365 },// VERSION 26
{ 3517, 2132, 1465, 902 }, { 2701, 1637, 1125, 692 }, { 1933, 1172, 805, 496 }, { 1501, 910, 625, 385 },// VERSION 27
{ 3669, 2223, 1528, 940 }, { 2857, 1732, 1190, 732 }, { 2085, 1263, 868, 534 }, { 1581, 958, 658, 405 },// VERSION 28
{ 3909, 2369, 1628, 1002 }, { 3035, 1839, 1264, 778 }, { 2181, 1322, 908, 559 }, { 1677, 1016, 698, 430 },// VERSION 29
{ 4158, 2520, 1732, 1066 }, { 3289, 1994, 1370, 843 }, { 2358, 1429, 982, 604 }, { 1782, 1080, 742, 457 },// VERSION 30
{ 4417, 2677, 1840, 1132 }, { 3486, 2113, 1452, 894 }, { 2473, 1499, 1030, 634 }, { 1897, 1150, 790, 486 },// VERSION 31
{ 4686, 2840, 1952, 1201 }, { 3693, 2238, 1538, 947 }, { 2670, 1618, 1112, 684 }, { 2022, 1226, 842, 518 },// VERSION 32
{ 4965, 3009, 2068, 1273 }, { 3909, 2369, 1628, 1002 }, { 2805, 1700, 1168, 719 }, { 2157, 1307, 898, 553 },// VERSION 33
{ 5253, 3183, 2188, 1347 }, { 4134, 2506, 1722, 1060 }, { 2949, 1787, 1228, 756 }, { 2301, 1394, 958, 590 },// VERSION 34
{ 5529, 3351, 2303, 1417 }, { 4343, 2632, 1809, 1113 }, { 3081, 1867, 1283, 790 }, { 2361, 1431, 983, 605 },// VERSION 35
{ 5836, 3537, 2431, 1496 }, { 4588, 2780, 1911, 1176 }, { 3244, 1966, 1351, 832 }, { 2524, 1530, 1051, 647 },// VERSION 36
{ 6153, 3729, 2563, 1577 }, { 4775, 2894, 1989, 1224 }, { 3417, 2071, 1423, 876 }, { 2625, 1591, 1093, 673 },// VERSION 37
{ 6479, 3927, 2699, 1661 }, { 5039, 3054, 2099, 1292 }, { 3599, 2181, 1499, 923 }, { 2735, 1658, 1139, 701 },// VERSION 38
{ 6743, 4087, 2809, 1729 }, { 5313, 3220, 2213, 1362 }, { 3791, 2298, 1579, 972 }, { 2927, 1774, 1219, 750 },// VERSION 39
{ 7089, 4296, 2953, 1817 }, { 5596, 3391, 2331, 1435 }, { 3993, 2420, 1663, 1024 }, { 3057, 1852, 1273, 784 } // VERSION 40
}};
static constexpr std::array<std::array<unsigned, 6>, 160> errorBlockInfo = {{
// # of Codewords,
// # of EC Codewords per block
// # of blocks in group 1
// # of Data Codewords in first blocks of group
// # of blocks in group 2
// # of Data Codewords in 2nd blocks of group
{ 19, 7, 1, 19, 0, 0 }, { 16, 10, 1, 16, 0, 0 }, { 13, 13, 1, 13, 0, 0 }, { 9, 17, 1, 9, 0, 0 }, // 1
{ 34, 10, 1, 34, 0, 0 }, { 28, 16, 1, 28, 0, 0 }, { 22, 22, 1, 22, 0, 0 }, { 16, 28, 1, 16, 0, 0 }, // 2
{ 55, 15, 1, 55, 0, 0 }, { 44, 26, 1, 44, 0, 0 }, { 34, 18, 2, 17, 0, 0 }, { 26, 22, 2, 13, 0, 0 }, // 3
{ 80, 20, 1, 80, 0, 0 }, { 64, 18, 2, 32, 0, 0 }, { 48, 26, 2, 24, 0, 0 }, { 36, 16, 4, 9, 0, 0 }, // 4
{ 108, 26, 1, 108, 0, 0 }, { 86, 24, 2, 43, 0, 0 }, { 62, 18, 2, 15, 2, 16 }, { 46, 22, 2, 11, 2, 12 }, // 5
{ 136, 18, 2, 68, 0, 0 }, { 108, 16, 4, 27, 0, 0 }, { 76, 24, 4, 19, 0, 0 }, { 60, 28, 4, 15, 0, 0 }, // 6
{ 156, 20, 2, 78, 0, 0 }, { 124, 18, 4, 31, 0, 0 }, { 88, 18, 2, 14, 4, 15 }, { 66, 26, 4, 13, 1, 14 }, // 7
{ 194, 24, 2, 97, 0, 0 }, { 154, 22, 2, 38, 2, 39 }, { 110, 22, 4, 18, 2, 19 }, { 86, 26, 4, 14, 2, 15 }, // 8
{ 232, 30, 2, 116, 0, 0 }, { 182, 22, 3, 36, 2, 37 }, { 132, 20, 4, 16, 4, 17 }, { 100, 24, 4, 12, 4, 13 }, // 9
{ 274, 18, 2, 68, 2, 69 }, { 216, 26, 4, 43, 1, 44 }, { 154, 24, 6, 19, 2, 20 }, { 122, 28, 6, 15, 2, 16 }, // 10
{ 324, 20, 4, 81, 0, 0 }, { 254, 30, 1, 50, 4, 51 }, { 180, 28, 4, 22, 4, 23 }, { 140, 24, 3, 12, 8, 13 }, // 11
{ 370, 24, 2, 92, 2, 93 }, { 290, 22, 6, 36, 2, 37 }, { 206, 26, 4, 20, 6, 21 }, { 158, 28, 7, 14, 4, 15 }, // 12
{ 428, 26, 4, 107, 0, 0 }, { 334, 22, 8, 37, 1, 38 }, { 244, 24, 8, 20, 4, 21 }, { 180, 22, 12, 11, 4, 12 }, // 13
{ 461, 30, 3, 115, 1, 116 }, { 365, 24, 4, 40, 5, 41 }, { 261, 20, 11, 16, 5, 17 }, { 197, 24, 11, 12, 5, 13 }, // 14
{ 523, 22, 5, 87, 1, 88 }, { 415, 24, 5, 41, 5, 42 }, { 295, 30, 5, 24, 7, 25 }, { 223, 24, 11, 12, 7, 13 }, // 15
{ 589, 24, 5, 98, 1, 99 }, { 453, 28, 7, 45, 3, 46 }, { 325, 24, 15, 19, 2, 20 }, { 253, 30, 3, 15, 13, 16 }, // 16
{ 647, 28, 1, 107, 5, 108 }, { 507, 28, 10, 46, 1, 47 }, { 367, 28, 1, 22, 15, 23 }, { 283, 28, 2, 14, 17, 15 }, // 17
{ 721, 30, 5, 120, 1, 121 }, { 563, 26, 9, 43, 4, 44 }, { 397, 28, 17, 22, 1, 23 }, { 313, 28, 2, 14, 19, 15 }, // 18
{ 795, 28, 3, 113, 4, 114 }, { 627, 26, 3, 44, 11, 45 }, { 445, 26, 17, 21, 4, 22 }, { 341, 26, 9, 13, 16, 14 }, // 19
{ 861, 28, 3, 107, 5, 108 }, { 669, 26, 3, 41, 13, 42 }, { 485, 30, 15, 24, 5, 25 }, { 385, 28, 15, 15, 10, 16 }, // 20
{ 932, 28, 4, 116, 4, 117 }, { 714, 26, 17, 42, 0, 0 }, { 512, 28, 17, 22, 6, 23 }, { 406, 30, 19, 16, 6, 17 }, // 21
{ 1006, 28, 2, 111, 7, 112 }, { 782, 28, 17, 46, 0, 0 }, { 568, 30, 7, 24, 16, 25 }, { 442, 24, 34, 13, 0, 0 }, // 22
{ 1094, 30, 4, 121, 5, 122 }, { 860, 28, 4, 47, 14, 48 }, { 614, 30, 11, 24, 14, 25 }, { 464, 30, 16, 15, 14, 16 }, // 23
{ 1174, 30, 6, 117, 4, 118 }, { 914, 28, 6, 45, 14, 46 }, { 664, 30, 11, 24, 16, 25 }, { 514, 30, 30, 16, 2, 17 }, // 24
{ 1276, 26, 8, 106, 4, 107 }, { 1000, 28, 8, 47, 13, 48 }, { 718, 30, 7, 24, 22, 25 }, { 538, 30, 22, 15, 13, 16 }, // 25
{ 1370, 28, 10, 114, 2, 115 }, { 1062, 28, 19, 46, 4, 47 }, { 754, 28, 28, 22, 6, 23 }, { 596, 30, 33, 16, 4, 17 }, // 26
{ 1468, 30, 8, 122, 4, 123 }, { 1128, 28, 22, 45, 3, 46 }, { 808, 30, 8, 23, 26, 24 }, { 628, 30, 12, 15, 28, 16 }, // 27
{ 1531, 30, 3, 117, 10, 118 }, { 1193, 28, 3, 45, 23, 46 }, { 871, 30, 4, 24, 31, 25 }, { 661, 30, 11, 15, 31, 16 }, // 28
{ 1631, 30, 7, 116, 7, 117 }, { 1267, 28, 21, 45, 7, 46 }, { 911, 30, 1, 23, 37, 24 }, { 701, 30, 19, 15, 26, 16 }, // 29
{ 1735, 30, 5, 115, 10, 116 }, { 1373, 28, 19, 47, 10, 48 }, { 985, 30, 15, 24, 25, 25 }, { 745, 30, 23, 15, 25, 16 }, // 30
{ 1843, 30, 13, 115, 3, 116 }, { 1455, 28, 2, 46, 29, 47 }, { 1033, 30, 42, 24, 1, 25 }, { 793, 30, 23, 15, 28, 16 }, // 31
{ 1955, 30, 17, 115, 0, 0 }, { 1541, 28, 10, 46, 23, 47 }, { 1115, 30, 10, 24, 35, 25 }, { 845, 30, 19, 15, 35, 16 }, // 32
{ 2071, 30, 17, 115, 1, 116 }, { 1631, 28, 14, 46, 21, 47 }, { 1171, 30, 29, 24, 19, 25 }, { 901, 30, 11, 15, 46, 16 }, // 33
{ 2191, 30, 13, 115, 6, 116 }, { 1725, 28, 14, 46, 23, 47 }, { 1231, 30, 44, 24, 7, 25 }, { 961, 30, 59, 16, 1, 17 }, // 34
{ 2306, 30, 12, 121, 7, 122 }, { 1812, 28, 12, 47, 26, 48 }, { 1286, 30, 39, 24, 14, 25 }, { 986, 30, 22, 15, 41, 16 }, // 35
{ 2434, 30, 6, 121, 14, 122 }, { 1914, 28, 6, 47, 34, 48 }, { 1354, 30, 46, 24, 10, 25 }, { 1054, 30, 2, 15, 64, 16 }, // 36
{ 2566, 30, 17, 122, 4, 123 }, { 1992, 28, 29, 46, 14, 47 }, { 1426, 30, 49, 24, 10, 25 }, { 1096, 30, 24, 15, 46, 16 }, // 37
{ 2702, 30, 4, 122, 18, 123 }, { 2102, 28, 13, 46, 32, 47 }, { 1502, 30, 48, 24, 14, 25 }, { 1142, 30, 42, 15, 32, 16 }, // 38
{ 2812, 30, 20, 117, 4, 118 }, { 2216, 28, 40, 47, 7, 48 }, { 1582, 30, 43, 24, 22, 25 }, { 1222, 30, 10, 15, 67, 16 }, // 39
{ 2956, 30, 19, 118, 6, 119 }, { 2334, 28, 18, 47, 31, 48 }, { 1666, 30, 34, 24, 34, 25 }, { 1276, 30, 20, 15, 61, 16 } // 40
}};
static const std::vector<std::vector<Byte>> alignmentDat = {
{ 6, 18 }, { 6, 22 }, { 6, 26 }, { 6, 30 }, { 6, 34 },
{ 6, 22, 38 }, { 6, 24, 42 }, { 6, 26, 46 }, { 6, 28, 50 }, { 6, 30, 54 }, { 6, 32, 58 }, { 6, 34, 62 },
{ 6, 26, 46, 66 }, { 6, 26, 48, 70 }, { 6, 26, 50, 74 }, { 6, 30, 54, 78 }, { 6, 30, 56, 82 }, { 6, 30, 58, 86 }, { 6, 34, 62, 90 },
{ 6, 28, 50, 72, 94 }, { 6, 26, 50, 74, 98 }, { 6, 30, 54, 78, 102 }, { 6, 28, 54, 80, 106 }, { 6, 32, 58, 84, 110 }, { 6, 30, 58, 86, 114 }, { 6, 34, 62, 90, 118 },
{ 6, 26, 50, 74, 98, 122 }, { 6, 30, 54, 78, 102, 126 }, { 6, 26, 52, 78, 104, 130 }, { 6, 30, 56, 82, 108, 134 }, { 6, 34, 60, 86, 112, 138 }, { 6, 30, 58, 86, 114, 142 }, { 6, 34, 62, 90, 118, 146 },
{ 6, 30, 54, 78, 102, 126, 150 }, { 6, 24, 50, 76, 102, 128, 154 }, { 6, 28, 54, 80, 106, 132, 158 }, { 6, 32, 58, 84, 110, 136, 162 }, { 6, 26, 54, 82, 110, 138, 166 }, { 6, 30, 58, 86, 114, 142, 170 }
};
constexpr std::string_view usageMsg = "Usage: QR <ec-level>\nError Correction-Levels:{ L M Q H }\n";
#endif // DATA_H