-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathData.h
More file actions
158 lines (146 loc) · 11.3 KB
/
Data.h
File metadata and controls
158 lines (146 loc) · 11.3 KB
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