mirror of
https://github.com/cberner/raptorq.git
synced 2024-06-20 13:59:00 +00:00
1081 lines
27 KiB
Rust
1081 lines
27 KiB
Rust
// K'_max as defined in section 5.1.2
|
|
pub const MAX_SOURCE_SYMBOLS_PER_BLOCK: u32 = 56403;
|
|
|
|
// Table 2, as defined in section 5.6
|
|
pub const SYSTEMATIC_INDICES_AND_PARAMETERS: [(u32, u32, u32, u32, u32); 477] = [
|
|
(10, 254, 7, 10, 17),
|
|
(12, 630, 7, 10, 19),
|
|
(18, 682, 11, 10, 29),
|
|
(20, 293, 11, 10, 31),
|
|
(26, 80, 11, 10, 37),
|
|
(30, 566, 11, 10, 41),
|
|
(32, 860, 11, 10, 43),
|
|
(36, 267, 11, 10, 47),
|
|
(42, 822, 11, 10, 53),
|
|
(46, 506, 13, 10, 59),
|
|
(48, 589, 13, 10, 61),
|
|
(49, 87, 13, 10, 61),
|
|
(55, 520, 13, 10, 67),
|
|
(60, 159, 13, 10, 71),
|
|
(62, 235, 13, 10, 73),
|
|
(69, 157, 13, 10, 79),
|
|
(75, 502, 17, 10, 89),
|
|
(84, 334, 17, 10, 97),
|
|
(88, 583, 17, 10, 101),
|
|
(91, 66, 17, 10, 103),
|
|
(95, 352, 17, 10, 107),
|
|
(97, 365, 17, 10, 109),
|
|
(101, 562, 17, 10, 113),
|
|
(114, 5, 19, 10, 127),
|
|
(119, 603, 19, 10, 131),
|
|
(125, 721, 19, 10, 137),
|
|
(127, 28, 19, 10, 139),
|
|
(138, 660, 19, 10, 149),
|
|
(140, 829, 19, 10, 151),
|
|
(149, 900, 23, 10, 163),
|
|
(153, 930, 23, 10, 167),
|
|
(160, 814, 23, 10, 173),
|
|
(166, 661, 23, 10, 179),
|
|
(168, 693, 23, 10, 181),
|
|
(179, 780, 23, 10, 191),
|
|
(181, 605, 23, 10, 193),
|
|
(185, 551, 23, 10, 197),
|
|
(187, 777, 23, 10, 199),
|
|
(200, 491, 23, 10, 211),
|
|
(213, 396, 23, 10, 223),
|
|
(217, 764, 29, 10, 233),
|
|
(225, 843, 29, 10, 241),
|
|
(236, 646, 29, 10, 251),
|
|
(242, 557, 29, 10, 257),
|
|
(248, 608, 29, 10, 263),
|
|
(257, 265, 29, 10, 271),
|
|
(263, 505, 29, 10, 277),
|
|
(269, 722, 29, 10, 283),
|
|
(280, 263, 29, 10, 293),
|
|
(295, 999, 29, 10, 307),
|
|
(301, 874, 29, 10, 313),
|
|
(305, 160, 29, 10, 317),
|
|
(324, 575, 31, 10, 337),
|
|
(337, 210, 31, 10, 349),
|
|
(341, 513, 31, 10, 353),
|
|
(347, 503, 31, 10, 359),
|
|
(355, 558, 31, 10, 367),
|
|
(362, 932, 31, 10, 373),
|
|
(368, 404, 31, 10, 379),
|
|
(372, 520, 37, 10, 389),
|
|
(380, 846, 37, 10, 397),
|
|
(385, 485, 37, 10, 401),
|
|
(393, 728, 37, 10, 409),
|
|
(405, 554, 37, 10, 421),
|
|
(418, 471, 37, 10, 433),
|
|
(428, 641, 37, 10, 443),
|
|
(434, 732, 37, 10, 449),
|
|
(447, 193, 37, 10, 461),
|
|
(453, 934, 37, 10, 467),
|
|
(466, 864, 37, 10, 479),
|
|
(478, 790, 37, 10, 491),
|
|
(486, 912, 37, 10, 499),
|
|
(491, 617, 37, 10, 503),
|
|
(497, 587, 37, 10, 509),
|
|
(511, 800, 37, 10, 523),
|
|
(526, 923, 41, 10, 541),
|
|
(532, 998, 41, 10, 547),
|
|
(542, 92, 41, 10, 557),
|
|
(549, 497, 41, 10, 563),
|
|
(557, 559, 41, 10, 571),
|
|
(563, 667, 41, 10, 577),
|
|
(573, 912, 41, 10, 587),
|
|
(580, 262, 41, 10, 593),
|
|
(588, 152, 41, 10, 601),
|
|
(594, 526, 41, 10, 607),
|
|
(600, 268, 41, 10, 613),
|
|
(606, 212, 41, 10, 619),
|
|
(619, 45, 41, 10, 631),
|
|
(633, 898, 43, 10, 647),
|
|
(640, 527, 43, 10, 653),
|
|
(648, 558, 43, 10, 661),
|
|
(666, 460, 47, 10, 683),
|
|
(675, 5, 47, 10, 691),
|
|
(685, 895, 47, 10, 701),
|
|
(693, 996, 47, 10, 709),
|
|
(703, 282, 47, 10, 719),
|
|
(718, 513, 47, 10, 733),
|
|
(728, 865, 47, 10, 743),
|
|
(736, 870, 47, 10, 751),
|
|
(747, 239, 47, 10, 761),
|
|
(759, 452, 47, 10, 773),
|
|
(778, 862, 53, 10, 797),
|
|
(792, 852, 53, 10, 811),
|
|
(802, 643, 53, 10, 821),
|
|
(811, 543, 53, 10, 829),
|
|
(821, 447, 53, 10, 839),
|
|
(835, 321, 53, 10, 853),
|
|
(845, 287, 53, 10, 863),
|
|
(860, 12, 53, 10, 877),
|
|
(870, 251, 53, 10, 887),
|
|
(891, 30, 53, 10, 907),
|
|
(903, 621, 53, 10, 919),
|
|
(913, 555, 53, 10, 929),
|
|
(926, 127, 53, 10, 941),
|
|
(938, 400, 53, 10, 953),
|
|
(950, 91, 59, 10, 971),
|
|
(963, 916, 59, 10, 983),
|
|
(977, 935, 59, 10, 997),
|
|
(989, 691, 59, 10, 1009),
|
|
(1002, 299, 59, 10, 1021),
|
|
(1020, 282, 59, 10, 1039),
|
|
(1032, 824, 59, 10, 1051),
|
|
(1050, 536, 59, 11, 1069),
|
|
(1074, 596, 59, 11, 1093),
|
|
(1085, 28, 59, 11, 1103),
|
|
(1099, 947, 59, 11, 1117),
|
|
(1111, 162, 59, 11, 1129),
|
|
(1136, 536, 59, 11, 1153),
|
|
(1152, 1000, 61, 11, 1171),
|
|
(1169, 251, 61, 11, 1187),
|
|
(1183, 673, 61, 11, 1201),
|
|
(1205, 559, 61, 11, 1223),
|
|
(1220, 923, 61, 11, 1237),
|
|
(1236, 81, 67, 11, 1259),
|
|
(1255, 478, 67, 11, 1277),
|
|
(1269, 198, 67, 11, 1291),
|
|
(1285, 137, 67, 11, 1307),
|
|
(1306, 75, 67, 11, 1327),
|
|
(1347, 29, 67, 11, 1367),
|
|
(1361, 231, 67, 11, 1381),
|
|
(1389, 532, 67, 11, 1409),
|
|
(1404, 58, 67, 11, 1423),
|
|
(1420, 60, 67, 11, 1439),
|
|
(1436, 964, 71, 11, 1459),
|
|
(1461, 624, 71, 11, 1483),
|
|
(1477, 502, 71, 11, 1499),
|
|
(1502, 636, 71, 11, 1523),
|
|
(1522, 986, 71, 11, 1543),
|
|
(1539, 950, 71, 11, 1559),
|
|
(1561, 735, 73, 11, 1583),
|
|
(1579, 866, 73, 11, 1601),
|
|
(1600, 203, 73, 11, 1621),
|
|
(1616, 83, 73, 11, 1637),
|
|
(1649, 14, 73, 11, 1669),
|
|
(1673, 522, 79, 11, 1699),
|
|
(1698, 226, 79, 11, 1723),
|
|
(1716, 282, 79, 11, 1741),
|
|
(1734, 88, 79, 11, 1759),
|
|
(1759, 636, 79, 11, 1783),
|
|
(1777, 860, 79, 11, 1801),
|
|
(1800, 324, 79, 11, 1823),
|
|
(1824, 424, 79, 11, 1847),
|
|
(1844, 999, 79, 11, 1867),
|
|
(1863, 682, 83, 11, 1889),
|
|
(1887, 814, 83, 11, 1913),
|
|
(1906, 979, 83, 11, 1931),
|
|
(1926, 538, 83, 11, 1951),
|
|
(1954, 278, 83, 11, 1979),
|
|
(1979, 580, 83, 11, 2003),
|
|
(2005, 773, 83, 11, 2029),
|
|
(2040, 911, 89, 11, 2069),
|
|
(2070, 506, 89, 11, 2099),
|
|
(2103, 628, 89, 11, 2131),
|
|
(2125, 282, 89, 11, 2153),
|
|
(2152, 309, 89, 11, 2179),
|
|
(2195, 858, 89, 11, 2221),
|
|
(2217, 442, 89, 11, 2243),
|
|
(2247, 654, 89, 11, 2273),
|
|
(2278, 82, 97, 11, 2311),
|
|
(2315, 428, 97, 11, 2347),
|
|
(2339, 442, 97, 11, 2371),
|
|
(2367, 283, 97, 11, 2399),
|
|
(2392, 538, 97, 11, 2423),
|
|
(2416, 189, 97, 11, 2447),
|
|
(2447, 438, 97, 11, 2477),
|
|
(2473, 912, 97, 11, 2503),
|
|
(2502, 1, 97, 11, 2531),
|
|
(2528, 167, 97, 11, 2557),
|
|
(2565, 272, 97, 11, 2593),
|
|
(2601, 209, 101, 11, 2633),
|
|
(2640, 927, 101, 11, 2671),
|
|
(2668, 386, 101, 11, 2699),
|
|
(2701, 653, 101, 11, 2731),
|
|
(2737, 669, 101, 11, 2767),
|
|
(2772, 431, 101, 11, 2801),
|
|
(2802, 793, 103, 11, 2833),
|
|
(2831, 588, 103, 11, 2861),
|
|
(2875, 777, 107, 11, 2909),
|
|
(2906, 939, 107, 11, 2939),
|
|
(2938, 864, 107, 11, 2971),
|
|
(2979, 627, 107, 11, 3011),
|
|
(3015, 265, 109, 11, 3049),
|
|
(3056, 976, 109, 11, 3089),
|
|
(3101, 988, 113, 11, 3137),
|
|
(3151, 507, 113, 11, 3187),
|
|
(3186, 640, 113, 11, 3221),
|
|
(3224, 15, 113, 11, 3259),
|
|
(3265, 667, 113, 11, 3299),
|
|
(3299, 24, 127, 11, 3347),
|
|
(3344, 877, 127, 11, 3391),
|
|
(3387, 240, 127, 11, 3433),
|
|
(3423, 720, 127, 11, 3469),
|
|
(3466, 93, 127, 11, 3511),
|
|
(3502, 919, 127, 11, 3547),
|
|
(3539, 635, 127, 11, 3583),
|
|
(3579, 174, 127, 11, 3623),
|
|
(3616, 647, 127, 11, 3659),
|
|
(3658, 820, 127, 11, 3701),
|
|
(3697, 56, 127, 11, 3739),
|
|
(3751, 485, 127, 11, 3793),
|
|
(3792, 210, 127, 11, 3833),
|
|
(3840, 124, 127, 11, 3881),
|
|
(3883, 546, 127, 11, 3923),
|
|
(3924, 954, 131, 11, 3967),
|
|
(3970, 262, 131, 11, 4013),
|
|
(4015, 927, 131, 11, 4057),
|
|
(4069, 957, 131, 11, 4111),
|
|
(4112, 726, 137, 11, 4159),
|
|
(4165, 583, 137, 11, 4211),
|
|
(4207, 782, 137, 11, 4253),
|
|
(4252, 37, 137, 11, 4297),
|
|
(4318, 758, 137, 11, 4363),
|
|
(4365, 777, 137, 11, 4409),
|
|
(4418, 104, 139, 11, 4463),
|
|
(4468, 476, 139, 11, 4513),
|
|
(4513, 113, 149, 11, 4567),
|
|
(4567, 313, 149, 11, 4621),
|
|
(4626, 102, 149, 11, 4679),
|
|
(4681, 501, 149, 11, 4733),
|
|
(4731, 332, 149, 11, 4783),
|
|
(4780, 786, 149, 11, 4831),
|
|
(4838, 99, 149, 11, 4889),
|
|
(4901, 658, 149, 11, 4951),
|
|
(4954, 794, 149, 11, 5003),
|
|
(5008, 37, 151, 11, 5059),
|
|
(5063, 471, 151, 11, 5113),
|
|
(5116, 94, 157, 11, 5171),
|
|
(5172, 873, 157, 11, 5227),
|
|
(5225, 918, 157, 11, 5279),
|
|
(5279, 945, 157, 11, 5333),
|
|
(5334, 211, 157, 11, 5387),
|
|
(5391, 341, 157, 11, 5443),
|
|
(5449, 11, 163, 11, 5507),
|
|
(5506, 578, 163, 11, 5563),
|
|
(5566, 494, 163, 11, 5623),
|
|
(5637, 694, 163, 11, 5693),
|
|
(5694, 252, 163, 11, 5749),
|
|
(5763, 451, 167, 11, 5821),
|
|
(5823, 83, 167, 11, 5881),
|
|
(5896, 689, 167, 11, 5953),
|
|
(5975, 488, 173, 11, 6037),
|
|
(6039, 214, 173, 11, 6101),
|
|
(6102, 17, 173, 11, 6163),
|
|
(6169, 469, 173, 11, 6229),
|
|
(6233, 263, 179, 11, 6299),
|
|
(6296, 309, 179, 11, 6361),
|
|
(6363, 984, 179, 11, 6427),
|
|
(6427, 123, 179, 11, 6491),
|
|
(6518, 360, 179, 11, 6581),
|
|
(6589, 863, 181, 11, 6653),
|
|
(6655, 122, 181, 11, 6719),
|
|
(6730, 522, 191, 11, 6803),
|
|
(6799, 539, 191, 11, 6871),
|
|
(6878, 181, 191, 11, 6949),
|
|
(6956, 64, 191, 11, 7027),
|
|
(7033, 387, 191, 11, 7103),
|
|
(7108, 967, 191, 11, 7177),
|
|
(7185, 843, 191, 11, 7253),
|
|
(7281, 999, 193, 11, 7351),
|
|
(7360, 76, 197, 11, 7433),
|
|
(7445, 142, 197, 11, 7517),
|
|
(7520, 599, 197, 11, 7591),
|
|
(7596, 576, 199, 11, 7669),
|
|
(7675, 176, 211, 11, 7759),
|
|
(7770, 392, 211, 11, 7853),
|
|
(7855, 332, 211, 11, 7937),
|
|
(7935, 291, 211, 11, 8017),
|
|
(8030, 913, 211, 11, 8111),
|
|
(8111, 608, 211, 11, 8191),
|
|
(8194, 212, 211, 11, 8273),
|
|
(8290, 696, 211, 11, 8369),
|
|
(8377, 931, 223, 11, 8467),
|
|
(8474, 326, 223, 11, 8563),
|
|
(8559, 228, 223, 11, 8647),
|
|
(8654, 706, 223, 11, 8741),
|
|
(8744, 144, 223, 11, 8831),
|
|
(8837, 83, 223, 11, 8923),
|
|
(8928, 743, 223, 11, 9013),
|
|
(9019, 187, 223, 11, 9103),
|
|
(9111, 654, 227, 11, 9199),
|
|
(9206, 359, 227, 11, 9293),
|
|
(9303, 493, 229, 11, 9391),
|
|
(9400, 369, 233, 11, 9491),
|
|
(9497, 981, 233, 11, 9587),
|
|
(9601, 276, 239, 11, 9697),
|
|
(9708, 647, 239, 11, 9803),
|
|
(9813, 389, 239, 11, 9907),
|
|
(9916, 80, 239, 11, 10009),
|
|
(10017, 396, 241, 11, 10111),
|
|
(10120, 580, 251, 11, 10223),
|
|
(10241, 873, 251, 11, 10343),
|
|
(10351, 15, 251, 11, 10453),
|
|
(10458, 976, 251, 11, 10559),
|
|
(10567, 584, 251, 11, 10667),
|
|
(10676, 267, 257, 11, 10781),
|
|
(10787, 876, 257, 11, 10891),
|
|
(10899, 642, 257, 12, 11003),
|
|
(11015, 794, 257, 12, 11119),
|
|
(11130, 78, 263, 12, 11239),
|
|
(11245, 736, 263, 12, 11353),
|
|
(11358, 882, 269, 12, 11471),
|
|
(11475, 251, 269, 12, 11587),
|
|
(11590, 434, 269, 12, 11701),
|
|
(11711, 204, 269, 12, 11821),
|
|
(11829, 256, 271, 12, 11941),
|
|
(11956, 106, 277, 12, 12073),
|
|
(12087, 375, 277, 12, 12203),
|
|
(12208, 148, 277, 12, 12323),
|
|
(12333, 496, 281, 12, 12451),
|
|
(12460, 88, 281, 12, 12577),
|
|
(12593, 826, 293, 12, 12721),
|
|
(12726, 71, 293, 12, 12853),
|
|
(12857, 925, 293, 12, 12983),
|
|
(13002, 760, 293, 12, 13127),
|
|
(13143, 130, 293, 12, 13267),
|
|
(13284, 641, 307, 12, 13421),
|
|
(13417, 400, 307, 12, 13553),
|
|
(13558, 480, 307, 12, 13693),
|
|
(13695, 76, 307, 12, 13829),
|
|
(13833, 665, 307, 12, 13967),
|
|
(13974, 910, 307, 12, 14107),
|
|
(14115, 467, 311, 12, 14251),
|
|
(14272, 964, 311, 12, 14407),
|
|
(14415, 625, 313, 12, 14551),
|
|
(14560, 362, 317, 12, 14699),
|
|
(14713, 759, 317, 12, 14851),
|
|
(14862, 728, 331, 12, 15013),
|
|
(15011, 343, 331, 12, 15161),
|
|
(15170, 113, 331, 12, 15319),
|
|
(15325, 137, 331, 12, 15473),
|
|
(15496, 308, 331, 12, 15643),
|
|
(15651, 800, 337, 12, 15803),
|
|
(15808, 177, 337, 12, 15959),
|
|
(15977, 961, 337, 12, 16127),
|
|
(16161, 958, 347, 12, 16319),
|
|
(16336, 72, 347, 12, 16493),
|
|
(16505, 732, 347, 12, 16661),
|
|
(16674, 145, 349, 12, 16831),
|
|
(16851, 577, 353, 12, 17011),
|
|
(17024, 305, 353, 12, 17183),
|
|
(17195, 50, 359, 12, 17359),
|
|
(17376, 351, 359, 12, 17539),
|
|
(17559, 175, 367, 12, 17729),
|
|
(17742, 727, 367, 12, 17911),
|
|
(17929, 902, 367, 12, 18097),
|
|
(18116, 409, 373, 12, 18289),
|
|
(18309, 776, 373, 12, 18481),
|
|
(18503, 586, 379, 12, 18679),
|
|
(18694, 451, 379, 12, 18869),
|
|
(18909, 287, 383, 12, 19087),
|
|
(19126, 246, 389, 12, 19309),
|
|
(19325, 222, 389, 12, 19507),
|
|
(19539, 563, 397, 12, 19727),
|
|
(19740, 839, 397, 12, 19927),
|
|
(19939, 897, 401, 12, 20129),
|
|
(20152, 409, 401, 12, 20341),
|
|
(20355, 618, 409, 12, 20551),
|
|
(20564, 439, 409, 12, 20759),
|
|
(20778, 95, 419, 13, 20983),
|
|
(20988, 448, 419, 13, 21191),
|
|
(21199, 133, 419, 13, 21401),
|
|
(21412, 938, 419, 13, 21613),
|
|
(21629, 423, 431, 13, 21841),
|
|
(21852, 90, 431, 13, 22063),
|
|
(22073, 640, 431, 13, 22283),
|
|
(22301, 922, 433, 13, 22511),
|
|
(22536, 250, 439, 13, 22751),
|
|
(22779, 367, 439, 13, 22993),
|
|
(23010, 447, 443, 13, 23227),
|
|
(23252, 559, 449, 13, 23473),
|
|
(23491, 121, 457, 13, 23719),
|
|
(23730, 623, 457, 13, 23957),
|
|
(23971, 450, 457, 13, 24197),
|
|
(24215, 253, 461, 13, 24443),
|
|
(24476, 106, 467, 13, 24709),
|
|
(24721, 863, 467, 13, 24953),
|
|
(24976, 148, 479, 13, 25219),
|
|
(25230, 427, 479, 13, 25471),
|
|
(25493, 138, 479, 13, 25733),
|
|
(25756, 794, 487, 13, 26003),
|
|
(26022, 247, 487, 13, 26267),
|
|
(26291, 562, 491, 13, 26539),
|
|
(26566, 53, 499, 13, 26821),
|
|
(26838, 135, 499, 13, 27091),
|
|
(27111, 21, 503, 13, 27367),
|
|
(27392, 201, 509, 13, 27653),
|
|
(27682, 169, 521, 13, 27953),
|
|
(27959, 70, 521, 13, 28229),
|
|
(28248, 386, 521, 13, 28517),
|
|
(28548, 226, 523, 13, 28817),
|
|
(28845, 3, 541, 13, 29131),
|
|
(29138, 769, 541, 13, 29423),
|
|
(29434, 590, 541, 13, 29717),
|
|
(29731, 672, 541, 13, 30013),
|
|
(30037, 713, 547, 13, 30323),
|
|
(30346, 967, 547, 13, 30631),
|
|
(30654, 368, 557, 14, 30949),
|
|
(30974, 348, 557, 14, 31267),
|
|
(31285, 119, 563, 14, 31583),
|
|
(31605, 503, 569, 14, 31907),
|
|
(31948, 181, 571, 14, 32251),
|
|
(32272, 394, 577, 14, 32579),
|
|
(32601, 189, 587, 14, 32917),
|
|
(32932, 210, 587, 14, 33247),
|
|
(33282, 62, 593, 14, 33601),
|
|
(33623, 273, 593, 14, 33941),
|
|
(33961, 554, 599, 14, 34283),
|
|
(34302, 936, 607, 14, 34631),
|
|
(34654, 483, 607, 14, 34981),
|
|
(35031, 397, 613, 14, 35363),
|
|
(35395, 241, 619, 14, 35731),
|
|
(35750, 500, 631, 14, 36097),
|
|
(36112, 12, 631, 14, 36457),
|
|
(36479, 958, 641, 14, 36833),
|
|
(36849, 524, 641, 14, 37201),
|
|
(37227, 8, 643, 14, 37579),
|
|
(37606, 100, 653, 14, 37967),
|
|
(37992, 339, 653, 14, 38351),
|
|
(38385, 804, 659, 14, 38749),
|
|
(38787, 510, 673, 14, 39163),
|
|
(39176, 18, 673, 14, 39551),
|
|
(39576, 412, 677, 14, 39953),
|
|
(39980, 394, 683, 14, 40361),
|
|
(40398, 830, 691, 15, 40787),
|
|
(40816, 535, 701, 15, 41213),
|
|
(41226, 199, 701, 15, 41621),
|
|
(41641, 27, 709, 15, 42043),
|
|
(42067, 298, 709, 15, 42467),
|
|
(42490, 368, 719, 15, 42899),
|
|
(42916, 755, 727, 15, 43331),
|
|
(43388, 379, 727, 15, 43801),
|
|
(43840, 73, 733, 15, 44257),
|
|
(44279, 387, 739, 15, 44701),
|
|
(44729, 457, 751, 15, 45161),
|
|
(45183, 761, 751, 15, 45613),
|
|
(45638, 855, 757, 15, 46073),
|
|
(46104, 370, 769, 15, 46549),
|
|
(46574, 261, 769, 15, 47017),
|
|
(47047, 299, 787, 15, 47507),
|
|
(47523, 920, 787, 15, 47981),
|
|
(48007, 269, 787, 15, 48463),
|
|
(48489, 862, 797, 15, 48953),
|
|
(48976, 349, 809, 15, 49451),
|
|
(49470, 103, 809, 15, 49943),
|
|
(49978, 115, 821, 15, 50461),
|
|
(50511, 93, 821, 16, 50993),
|
|
(51017, 982, 827, 16, 51503),
|
|
(51530, 432, 839, 16, 52027),
|
|
(52062, 340, 853, 16, 52571),
|
|
(52586, 173, 853, 16, 53093),
|
|
(53114, 421, 857, 16, 53623),
|
|
(53650, 330, 863, 16, 54163),
|
|
(54188, 624, 877, 16, 54713),
|
|
(54735, 233, 877, 16, 55259),
|
|
(55289, 362, 883, 16, 55817),
|
|
(55843, 963, 907, 16, 56393),
|
|
(56403, 471, 907, 16, 56951),
|
|
];
|
|
|
|
const P1_TABLE: [(u32, u32); 477] = [
|
|
(10, 11),
|
|
(12, 11),
|
|
(18, 11),
|
|
(20, 11),
|
|
(26, 11),
|
|
(30, 11),
|
|
(32, 11),
|
|
(36, 11),
|
|
(42, 11),
|
|
(46, 11),
|
|
(48, 11),
|
|
(49, 11),
|
|
(55, 11),
|
|
(60, 13),
|
|
(62, 13),
|
|
(69, 13),
|
|
(75, 13),
|
|
(84, 17),
|
|
(88, 17),
|
|
(91, 17),
|
|
(95, 17),
|
|
(97, 17),
|
|
(101, 17),
|
|
(114, 17),
|
|
(119, 17),
|
|
(125, 17),
|
|
(127, 17),
|
|
(138, 19),
|
|
(140, 19),
|
|
(149, 19),
|
|
(153, 19),
|
|
(160, 23),
|
|
(166, 23),
|
|
(168, 23),
|
|
(179, 23),
|
|
(181, 23),
|
|
(185, 23),
|
|
(187, 23),
|
|
(200, 23),
|
|
(213, 23),
|
|
(217, 23),
|
|
(225, 23),
|
|
(236, 29),
|
|
(242, 29),
|
|
(248, 29),
|
|
(257, 29),
|
|
(263, 29),
|
|
(269, 29),
|
|
(280, 29),
|
|
(295, 29),
|
|
(301, 29),
|
|
(305, 29),
|
|
(324, 29),
|
|
(337, 29),
|
|
(341, 29),
|
|
(347, 29),
|
|
(355, 29),
|
|
(362, 31),
|
|
(368, 31),
|
|
(372, 31),
|
|
(380, 31),
|
|
(385, 31),
|
|
(393, 31),
|
|
(405, 31),
|
|
(418, 37),
|
|
(428, 37),
|
|
(434, 37),
|
|
(447, 37),
|
|
(453, 37),
|
|
(466, 37),
|
|
(478, 37),
|
|
(486, 37),
|
|
(491, 37),
|
|
(497, 37),
|
|
(511, 37),
|
|
(526, 37),
|
|
(532, 37),
|
|
(542, 37),
|
|
(549, 37),
|
|
(557, 37),
|
|
(563, 37),
|
|
(573, 37),
|
|
(580, 41),
|
|
(588, 41),
|
|
(594, 41),
|
|
(600, 41),
|
|
(606, 41),
|
|
(619, 41),
|
|
(633, 41),
|
|
(640, 41),
|
|
(648, 41),
|
|
(666, 41),
|
|
(675, 41),
|
|
(685, 41),
|
|
(693, 41),
|
|
(703, 41),
|
|
(718, 43),
|
|
(728, 43),
|
|
(736, 43),
|
|
(747, 43),
|
|
(759, 43),
|
|
(778, 47),
|
|
(792, 47),
|
|
(802, 47),
|
|
(811, 47),
|
|
(821, 47),
|
|
(835, 47),
|
|
(845, 47),
|
|
(860, 47),
|
|
(870, 47),
|
|
(891, 47),
|
|
(903, 47),
|
|
(913, 47),
|
|
(926, 53),
|
|
(938, 53),
|
|
(950, 53),
|
|
(963, 53),
|
|
(977, 53),
|
|
(989, 53),
|
|
(1002, 53),
|
|
(1020, 53),
|
|
(1032, 53),
|
|
(1050, 53),
|
|
(1074, 53),
|
|
(1085, 53),
|
|
(1099, 53),
|
|
(1111, 53),
|
|
(1136, 53),
|
|
(1152, 53),
|
|
(1169, 59),
|
|
(1183, 59),
|
|
(1205, 59),
|
|
(1220, 59),
|
|
(1236, 59),
|
|
(1255, 59),
|
|
(1269, 59),
|
|
(1285, 59),
|
|
(1306, 59),
|
|
(1347, 59),
|
|
(1361, 59),
|
|
(1389, 59),
|
|
(1404, 59),
|
|
(1420, 59),
|
|
(1436, 59),
|
|
(1461, 61),
|
|
(1477, 61),
|
|
(1502, 61),
|
|
(1522, 61),
|
|
(1539, 67),
|
|
(1561, 67),
|
|
(1579, 67),
|
|
(1600, 67),
|
|
(1616, 67),
|
|
(1649, 67),
|
|
(1673, 67),
|
|
(1698, 67),
|
|
(1716, 67),
|
|
(1734, 67),
|
|
(1759, 67),
|
|
(1777, 67),
|
|
(1800, 67),
|
|
(1824, 67),
|
|
(1844, 67),
|
|
(1863, 71),
|
|
(1887, 71),
|
|
(1906, 71),
|
|
(1926, 71),
|
|
(1954, 71),
|
|
(1979, 71),
|
|
(2005, 71),
|
|
(2040, 71),
|
|
(2070, 71),
|
|
(2103, 73),
|
|
(2125, 73),
|
|
(2152, 73),
|
|
(2195, 79),
|
|
(2217, 79),
|
|
(2247, 79),
|
|
(2278, 79),
|
|
(2315, 79),
|
|
(2339, 79),
|
|
(2367, 79),
|
|
(2392, 79),
|
|
(2416, 79),
|
|
(2447, 79),
|
|
(2473, 79),
|
|
(2502, 79),
|
|
(2528, 79),
|
|
(2565, 83),
|
|
(2601, 83),
|
|
(2640, 83),
|
|
(2668, 83),
|
|
(2701, 83),
|
|
(2737, 83),
|
|
(2772, 83),
|
|
(2802, 83),
|
|
(2831, 89),
|
|
(2875, 89),
|
|
(2906, 89),
|
|
(2938, 89),
|
|
(2979, 89),
|
|
(3015, 89),
|
|
(3056, 89),
|
|
(3101, 89),
|
|
(3151, 89),
|
|
(3186, 89),
|
|
(3224, 89),
|
|
(3265, 97),
|
|
(3299, 97),
|
|
(3344, 97),
|
|
(3387, 97),
|
|
(3423, 97),
|
|
(3466, 97),
|
|
(3502, 97),
|
|
(3539, 97),
|
|
(3579, 97),
|
|
(3616, 97),
|
|
(3658, 97),
|
|
(3697, 97),
|
|
(3751, 97),
|
|
(3792, 97),
|
|
(3840, 97),
|
|
(3883, 101),
|
|
(3924, 101),
|
|
(3970, 101),
|
|
(4015, 101),
|
|
(4069, 101),
|
|
(4112, 101),
|
|
(4165, 103),
|
|
(4207, 103),
|
|
(4252, 103),
|
|
(4318, 103),
|
|
(4365, 107),
|
|
(4418, 107),
|
|
(4468, 107),
|
|
(4513, 107),
|
|
(4567, 107),
|
|
(4626, 107),
|
|
(4681, 109),
|
|
(4731, 109),
|
|
(4780, 109),
|
|
(4838, 109),
|
|
(4901, 113),
|
|
(4954, 113),
|
|
(5008, 113),
|
|
(5063, 113),
|
|
(5116, 113),
|
|
(5172, 113),
|
|
(5225, 127),
|
|
(5279, 127),
|
|
(5334, 127),
|
|
(5391, 127),
|
|
(5449, 127),
|
|
(5506, 127),
|
|
(5566, 127),
|
|
(5637, 127),
|
|
(5694, 127),
|
|
(5763, 127),
|
|
(5823, 127),
|
|
(5896, 127),
|
|
(5975, 127),
|
|
(6039, 127),
|
|
(6102, 127),
|
|
(6169, 127),
|
|
(6233, 127),
|
|
(6296, 127),
|
|
(6363, 127),
|
|
(6427, 127),
|
|
(6518, 127),
|
|
(6589, 131),
|
|
(6655, 131),
|
|
(6730, 131),
|
|
(6799, 131),
|
|
(6878, 131),
|
|
(6956, 131),
|
|
(7033, 137),
|
|
(7108, 137),
|
|
(7185, 137),
|
|
(7281, 137),
|
|
(7360, 137),
|
|
(7445, 137),
|
|
(7520, 137),
|
|
(7596, 137),
|
|
(7675, 139),
|
|
(7770, 139),
|
|
(7855, 149),
|
|
(7935, 149),
|
|
(8030, 149),
|
|
(8111, 149),
|
|
(8194, 149),
|
|
(8290, 149),
|
|
(8377, 149),
|
|
(8474, 149),
|
|
(8559, 149),
|
|
(8654, 149),
|
|
(8744, 149),
|
|
(8837, 149),
|
|
(8928, 149),
|
|
(9019, 151),
|
|
(9111, 151),
|
|
(9206, 151),
|
|
(9303, 157),
|
|
(9400, 157),
|
|
(9497, 157),
|
|
(9601, 157),
|
|
(9708, 157),
|
|
(9813, 157),
|
|
(9916, 157),
|
|
(10017, 163),
|
|
(10120, 163),
|
|
(10241, 163),
|
|
(10351, 163),
|
|
(10458, 163),
|
|
(10567, 163),
|
|
(10676, 163),
|
|
(10787, 167),
|
|
(10899, 167),
|
|
(11015, 167),
|
|
(11130, 167),
|
|
(11245, 167),
|
|
(11358, 173),
|
|
(11475, 173),
|
|
(11590, 173),
|
|
(11711, 173),
|
|
(11829, 173),
|
|
(11956, 173),
|
|
(12087, 173),
|
|
(12208, 179),
|
|
(12333, 179),
|
|
(12460, 179),
|
|
(12593, 179),
|
|
(12726, 179),
|
|
(12857, 179),
|
|
(13002, 181),
|
|
(13143, 181),
|
|
(13284, 191),
|
|
(13417, 191),
|
|
(13558, 191),
|
|
(13695, 191),
|
|
(13833, 191),
|
|
(13974, 191),
|
|
(14115, 191),
|
|
(14272, 191),
|
|
(14415, 191),
|
|
(14560, 191),
|
|
(14713, 191),
|
|
(14862, 193),
|
|
(15011, 193),
|
|
(15170, 197),
|
|
(15325, 197),
|
|
(15496, 197),
|
|
(15651, 197),
|
|
(15808, 199),
|
|
(15977, 199),
|
|
(16161, 211),
|
|
(16336, 211),
|
|
(16505, 211),
|
|
(16674, 211),
|
|
(16851, 211),
|
|
(17024, 211),
|
|
(17195, 211),
|
|
(17376, 211),
|
|
(17559, 211),
|
|
(17742, 211),
|
|
(17929, 211),
|
|
(18116, 223),
|
|
(18309, 223),
|
|
(18503, 223),
|
|
(18694, 223),
|
|
(18909, 223),
|
|
(19126, 223),
|
|
(19325, 223),
|
|
(19539, 223),
|
|
(19740, 223),
|
|
(19939, 223),
|
|
(20152, 227),
|
|
(20355, 227),
|
|
(20564, 227),
|
|
(20778, 227),
|
|
(20988, 229),
|
|
(21199, 233),
|
|
(21412, 233),
|
|
(21629, 233),
|
|
(21852, 233),
|
|
(22073, 239),
|
|
(22301, 239),
|
|
(22536, 239),
|
|
(22779, 239),
|
|
(23010, 239),
|
|
(23252, 241),
|
|
(23491, 251),
|
|
(23730, 251),
|
|
(23971, 251),
|
|
(24215, 251),
|
|
(24476, 251),
|
|
(24721, 251),
|
|
(24976, 251),
|
|
(25230, 251),
|
|
(25493, 257),
|
|
(25756, 257),
|
|
(26022, 257),
|
|
(26291, 257),
|
|
(26566, 257),
|
|
(26838, 263),
|
|
(27111, 263),
|
|
(27392, 263),
|
|
(27682, 263),
|
|
(27959, 269),
|
|
(28248, 269),
|
|
(28548, 269),
|
|
(28845, 269),
|
|
(29138, 269),
|
|
(29434, 271),
|
|
(29731, 277),
|
|
(30037, 277),
|
|
(30346, 277),
|
|
(30654, 277),
|
|
(30974, 281),
|
|
(31285, 281),
|
|
(31605, 281),
|
|
(31948, 283),
|
|
(32272, 293),
|
|
(32601, 293),
|
|
(32932, 293),
|
|
(33282, 293),
|
|
(33623, 293),
|
|
(33961, 293),
|
|
(34302, 293),
|
|
(34654, 307),
|
|
(35031, 307),
|
|
(35395, 307),
|
|
(35750, 307),
|
|
(36112, 307),
|
|
(36479, 307),
|
|
(36849, 307),
|
|
(37227, 307),
|
|
(37606, 307),
|
|
(37992, 311),
|
|
(38385, 311),
|
|
(38787, 311),
|
|
(39176, 313),
|
|
(39576, 317),
|
|
(39980, 317),
|
|
(40398, 317),
|
|
(40816, 331),
|
|
(41226, 331),
|
|
(41641, 331),
|
|
(42067, 331),
|
|
(42490, 331),
|
|
(42916, 331),
|
|
(43388, 331),
|
|
(43840, 331),
|
|
(44279, 337),
|
|
(44729, 337),
|
|
(45183, 337),
|
|
(45638, 337),
|
|
(46104, 347),
|
|
(46574, 347),
|
|
(47047, 347),
|
|
(47523, 347),
|
|
(48007, 347),
|
|
(48489, 349),
|
|
(48976, 349),
|
|
(49470, 353),
|
|
(49978, 353),
|
|
(50511, 359),
|
|
(51017, 359),
|
|
(51530, 359),
|
|
(52062, 367),
|
|
(52586, 367),
|
|
(53114, 367),
|
|
(53650, 367),
|
|
(54188, 373),
|
|
(54735, 373),
|
|
(55289, 373),
|
|
(55843, 373),
|
|
(56403, 379),
|
|
];
|
|
|
|
// Calculates, K', the extended source block size, in symbols, for a given source block size
|
|
// See section 5.3.1
|
|
pub fn extended_source_block_symbols(source_block_symbols: u32) -> u32 {
|
|
assert!(source_block_symbols <= MAX_SOURCE_SYMBOLS_PER_BLOCK);
|
|
for &(block_size, _, _, _, _) in SYSTEMATIC_INDICES_AND_PARAMETERS.iter() {
|
|
if block_size >= source_block_symbols {
|
|
return block_size;
|
|
}
|
|
}
|
|
unreachable!();
|
|
}
|
|
|
|
// Calculates, J(K'), the systematic index, for a given number of source block symbols
|
|
// See section 5.6
|
|
pub fn systematic_index(source_block_symbols: u32) -> u32 {
|
|
assert!(source_block_symbols <= MAX_SOURCE_SYMBOLS_PER_BLOCK);
|
|
for &(block_size, systematic_index, _, _, _) in SYSTEMATIC_INDICES_AND_PARAMETERS.iter() {
|
|
if block_size >= source_block_symbols {
|
|
return systematic_index;
|
|
}
|
|
}
|
|
unreachable!();
|
|
}
|
|
|
|
// Calculates, H(K'), the number of HDPC symbols, for a given number of source block symbols
|
|
// See section 5.6
|
|
pub fn num_hdpc_symbols(source_block_symbols: u32) -> u32 {
|
|
assert!(source_block_symbols <= MAX_SOURCE_SYMBOLS_PER_BLOCK);
|
|
for &(block_size, _, _, hdpc_symbols, _) in SYSTEMATIC_INDICES_AND_PARAMETERS.iter() {
|
|
if block_size >= source_block_symbols {
|
|
return hdpc_symbols;
|
|
}
|
|
}
|
|
unreachable!();
|
|
}
|
|
|
|
// Calculates, S(K'), the number of LDPC symbols, for a given number of source block symbols
|
|
// See section 5.6
|
|
pub fn num_ldpc_symbols(source_block_symbols: u32) -> u32 {
|
|
assert!(source_block_symbols <= MAX_SOURCE_SYMBOLS_PER_BLOCK);
|
|
for &(block_size, _, ldpc_symbols, _, _) in SYSTEMATIC_INDICES_AND_PARAMETERS.iter() {
|
|
if block_size >= source_block_symbols {
|
|
return ldpc_symbols;
|
|
}
|
|
}
|
|
unreachable!();
|
|
}
|
|
|
|
// Calculates, W(K'), the number of LT symbols, for a given number of source block symbols
|
|
// See section 5.6
|
|
pub fn num_lt_symbols(source_block_symbols: u32) -> u32 {
|
|
assert!(source_block_symbols <= MAX_SOURCE_SYMBOLS_PER_BLOCK);
|
|
for &(block_size, _, _, _, lt_symbols) in SYSTEMATIC_INDICES_AND_PARAMETERS.iter() {
|
|
if block_size >= source_block_symbols {
|
|
return lt_symbols;
|
|
}
|
|
}
|
|
unreachable!();
|
|
}
|
|
|
|
// Calculates, L, the number of intermediate symbols, for a given number of source block symbols
|
|
// See section 5.3.3.3
|
|
pub fn num_intermediate_symbols(source_block_symbols: u32) -> u32 {
|
|
extended_source_block_symbols(source_block_symbols)
|
|
+ num_ldpc_symbols(source_block_symbols)
|
|
+ num_hdpc_symbols(source_block_symbols)
|
|
}
|
|
|
|
// Calculates, P, the number of PI symbols, for a given number of source block symbols
|
|
// See section 5.3.3.3
|
|
pub fn num_pi_symbols(source_block_symbols: u32) -> u32 {
|
|
num_intermediate_symbols(source_block_symbols) - num_lt_symbols(source_block_symbols)
|
|
}
|
|
|
|
// Calculates P1, smallest prime greater than P. See 5.3.3.3
|
|
pub fn calculate_p1(source_block_symbols: u32) -> u32 {
|
|
assert!(source_block_symbols <= MAX_SOURCE_SYMBOLS_PER_BLOCK);
|
|
for &(block_size, p1) in P1_TABLE.iter() {
|
|
if block_size >= source_block_symbols {
|
|
return p1;
|
|
}
|
|
}
|
|
unreachable!();
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::systematic_constants::num_ldpc_symbols;
|
|
use crate::systematic_constants::num_lt_symbols;
|
|
use crate::systematic_constants::{calculate_p1, num_pi_symbols, MAX_SOURCE_SYMBOLS_PER_BLOCK};
|
|
|
|
#[test]
|
|
fn all_prime() {
|
|
for i in 0..=MAX_SOURCE_SYMBOLS_PER_BLOCK {
|
|
// See section 5.6
|
|
assert!(primal::is_prime(num_ldpc_symbols(i) as u64));
|
|
assert!(primal::is_prime(num_lt_symbols(i) as u64));
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn check_p1() {
|
|
for i in 0..=MAX_SOURCE_SYMBOLS_PER_BLOCK {
|
|
let mut p1 = num_pi_symbols(i);
|
|
while !primal::is_prime(p1 as u64) {
|
|
if p1 % 2 == 0 {
|
|
p1 += 1;
|
|
} else {
|
|
p1 += 2;
|
|
}
|
|
}
|
|
|
|
assert_eq!(p1, calculate_p1(i));
|
|
}
|
|
}
|
|
}
|