hybrid_array/
sizes.rs

1//! Supported array sizes: [`typenum::Unsigned`] types with an [`ArraySize`] impl.
2//!
3//! We support the following array sizes by default:
4//!
5//! - 0-512
6//! - 528-1024 (multiples of 16)
7//! - 2048, 4096, 8192
8//!
9//! When the `extra-sizes` feature is enabled: 1040-4064 (multiples of 32)
10
11use super::{ArraySize, AssocArraySize};
12
13#[cfg(feature = "extra-sizes")]
14pub use extra_sizes::*;
15
16/// Implement the `ArraySize` and `AssocArraySize` traits for a given list of `N => UN, ...`
17/// mappings.
18///
19/// `N` is used over `UN::USIZE` in order to improve compile times (avoids associated constant
20/// resolution)
21macro_rules! impl_array_sizes {
22    ($testname:ident, $($len:expr => $ty:ident),+ $(,)?) => {
23        $(
24            // SAFETY: we depend on `<$ty as Unsigned>::USIZE == $len` for unsafe pointer casts.
25            // We ensure this property holds by having the macro write a test for that below.
26            unsafe impl ArraySize for $ty {
27                type ArrayType<T> = [T; $len];
28            }
29
30            impl<T> AssocArraySize for [T; $len] {
31                type Size = $ty;
32            }
33        )+
34
35        #[test]
36        fn $testname() {
37            use typenum::Unsigned;
38            $(
39                assert_eq!($len, $ty::USIZE);
40            )+
41        }
42     };
43}
44
45/// Implement array sizes, also importing the relevant constants.
46macro_rules! impl_array_sizes_with_import {
47    ($testname:ident, $($len:expr => $ty:ident),+ $(,)?) => {
48        $(
49            pub use typenum::consts::$ty;
50        )+
51        impl_array_sizes!($testname, $($len => $ty),+);
52     };
53}
54
55impl_array_sizes_with_import! {
56    base,
57    0 => U0,
58    1 => U1,
59    2 => U2,
60    3 => U3,
61    4 => U4,
62    5 => U5,
63    6 => U6,
64    7 => U7,
65    8 => U8,
66    9 => U9,
67    10 => U10,
68    11 => U11,
69    12 => U12,
70    13 => U13,
71    14 => U14,
72    15 => U15,
73    16 => U16,
74    17 => U17,
75    18 => U18,
76    19 => U19,
77    20 => U20,
78    21 => U21,
79    22 => U22,
80    23 => U23,
81    24 => U24,
82    25 => U25,
83    26 => U26,
84    27 => U27,
85    28 => U28,
86    29 => U29,
87    30 => U30,
88    31 => U31,
89    32 => U32,
90    33 => U33,
91    34 => U34,
92    35 => U35,
93    36 => U36,
94    37 => U37,
95    38 => U38,
96    39 => U39,
97    40 => U40,
98    41 => U41,
99    42 => U42,
100    43 => U43,
101    44 => U44,
102    45 => U45,
103    46 => U46,
104    47 => U47,
105    48 => U48,
106    49 => U49,
107    50 => U50,
108    51 => U51,
109    52 => U52,
110    53 => U53,
111    54 => U54,
112    55 => U55,
113    56 => U56,
114    57 => U57,
115    58 => U58,
116    59 => U59,
117    60 => U60,
118    61 => U61,
119    62 => U62,
120    63 => U63,
121    64 => U64,
122    65 => U65,
123    66 => U66,
124    67 => U67,
125    68 => U68,
126    69 => U69,
127    70 => U70,
128    71 => U71,
129    72 => U72,
130    73 => U73,
131    74 => U74,
132    75 => U75,
133    76 => U76,
134    77 => U77,
135    78 => U78,
136    79 => U79,
137    80 => U80,
138    81 => U81,
139    82 => U82,
140    83 => U83,
141    84 => U84,
142    85 => U85,
143    86 => U86,
144    87 => U87,
145    88 => U88,
146    89 => U89,
147    90 => U90,
148    91 => U91,
149    92 => U92,
150    93 => U93,
151    94 => U94,
152    95 => U95,
153    96 => U96,
154    97 => U97,
155    98 => U98,
156    99 => U99,
157    100 => U100,
158    101 => U101,
159    102 => U102,
160    103 => U103,
161    104 => U104,
162    105 => U105,
163    106 => U106,
164    107 => U107,
165    108 => U108,
166    109 => U109,
167    110 => U110,
168    111 => U111,
169    112 => U112,
170    113 => U113,
171    114 => U114,
172    115 => U115,
173    116 => U116,
174    117 => U117,
175    118 => U118,
176    119 => U119,
177    120 => U120,
178    121 => U121,
179    122 => U122,
180    123 => U123,
181    124 => U124,
182    125 => U125,
183    126 => U126,
184    127 => U127,
185    128 => U128,
186    129 => U129,
187    130 => U130,
188    131 => U131,
189    132 => U132,
190    133 => U133,
191    134 => U134,
192    135 => U135,
193    136 => U136,
194    137 => U137,
195    138 => U138,
196    139 => U139,
197    140 => U140,
198    141 => U141,
199    142 => U142,
200    143 => U143,
201    144 => U144,
202    145 => U145,
203    146 => U146,
204    147 => U147,
205    148 => U148,
206    149 => U149,
207    150 => U150,
208    151 => U151,
209    152 => U152,
210    153 => U153,
211    154 => U154,
212    155 => U155,
213    156 => U156,
214    157 => U157,
215    158 => U158,
216    159 => U159,
217    160 => U160,
218    161 => U161,
219    162 => U162,
220    163 => U163,
221    164 => U164,
222    165 => U165,
223    166 => U166,
224    167 => U167,
225    168 => U168,
226    169 => U169,
227    170 => U170,
228    171 => U171,
229    172 => U172,
230    173 => U173,
231    174 => U174,
232    175 => U175,
233    176 => U176,
234    177 => U177,
235    178 => U178,
236    179 => U179,
237    180 => U180,
238    181 => U181,
239    182 => U182,
240    183 => U183,
241    184 => U184,
242    185 => U185,
243    186 => U186,
244    187 => U187,
245    188 => U188,
246    189 => U189,
247    190 => U190,
248    191 => U191,
249    192 => U192,
250    193 => U193,
251    194 => U194,
252    195 => U195,
253    196 => U196,
254    197 => U197,
255    198 => U198,
256    199 => U199,
257    200 => U200,
258    201 => U201,
259    202 => U202,
260    203 => U203,
261    204 => U204,
262    205 => U205,
263    206 => U206,
264    207 => U207,
265    208 => U208,
266    209 => U209,
267    210 => U210,
268    211 => U211,
269    212 => U212,
270    213 => U213,
271    214 => U214,
272    215 => U215,
273    216 => U216,
274    217 => U217,
275    218 => U218,
276    219 => U219,
277    220 => U220,
278    221 => U221,
279    222 => U222,
280    223 => U223,
281    224 => U224,
282    225 => U225,
283    226 => U226,
284    227 => U227,
285    228 => U228,
286    229 => U229,
287    230 => U230,
288    231 => U231,
289    232 => U232,
290    233 => U233,
291    234 => U234,
292    235 => U235,
293    236 => U236,
294    237 => U237,
295    238 => U238,
296    239 => U239,
297    240 => U240,
298    241 => U241,
299    242 => U242,
300    243 => U243,
301    244 => U244,
302    245 => U245,
303    246 => U246,
304    247 => U247,
305    248 => U248,
306    249 => U249,
307    250 => U250,
308    251 => U251,
309    252 => U252,
310    253 => U253,
311    254 => U254,
312    255 => U255,
313    256 => U256,
314    257 => U257,
315    258 => U258,
316    259 => U259,
317    260 => U260,
318    261 => U261,
319    262 => U262,
320    263 => U263,
321    264 => U264,
322    265 => U265,
323    266 => U266,
324    267 => U267,
325    268 => U268,
326    269 => U269,
327    270 => U270,
328    271 => U271,
329    272 => U272,
330    273 => U273,
331    274 => U274,
332    275 => U275,
333    276 => U276,
334    277 => U277,
335    278 => U278,
336    279 => U279,
337    280 => U280,
338    281 => U281,
339    282 => U282,
340    283 => U283,
341    284 => U284,
342    285 => U285,
343    286 => U286,
344    287 => U287,
345    288 => U288,
346    289 => U289,
347    290 => U290,
348    291 => U291,
349    292 => U292,
350    293 => U293,
351    294 => U294,
352    295 => U295,
353    296 => U296,
354    297 => U297,
355    298 => U298,
356    299 => U299,
357    300 => U300,
358    301 => U301,
359    302 => U302,
360    303 => U303,
361    304 => U304,
362    305 => U305,
363    306 => U306,
364    307 => U307,
365    308 => U308,
366    309 => U309,
367    310 => U310,
368    311 => U311,
369    312 => U312,
370    313 => U313,
371    314 => U314,
372    315 => U315,
373    316 => U316,
374    317 => U317,
375    318 => U318,
376    319 => U319,
377    320 => U320,
378    321 => U321,
379    322 => U322,
380    323 => U323,
381    324 => U324,
382    325 => U325,
383    326 => U326,
384    327 => U327,
385    328 => U328,
386    329 => U329,
387    330 => U330,
388    331 => U331,
389    332 => U332,
390    333 => U333,
391    334 => U334,
392    335 => U335,
393    336 => U336,
394    337 => U337,
395    338 => U338,
396    339 => U339,
397    340 => U340,
398    341 => U341,
399    342 => U342,
400    343 => U343,
401    344 => U344,
402    345 => U345,
403    346 => U346,
404    347 => U347,
405    348 => U348,
406    349 => U349,
407    350 => U350,
408    351 => U351,
409    352 => U352,
410    353 => U353,
411    354 => U354,
412    355 => U355,
413    356 => U356,
414    357 => U357,
415    358 => U358,
416    359 => U359,
417    360 => U360,
418    361 => U361,
419    362 => U362,
420    363 => U363,
421    364 => U364,
422    365 => U365,
423    366 => U366,
424    367 => U367,
425    368 => U368,
426    369 => U369,
427    370 => U370,
428    371 => U371,
429    372 => U372,
430    373 => U373,
431    374 => U374,
432    375 => U375,
433    376 => U376,
434    377 => U377,
435    378 => U378,
436    379 => U379,
437    380 => U380,
438    381 => U381,
439    382 => U382,
440    383 => U383,
441    384 => U384,
442    385 => U385,
443    386 => U386,
444    387 => U387,
445    388 => U388,
446    389 => U389,
447    390 => U390,
448    391 => U391,
449    392 => U392,
450    393 => U393,
451    394 => U394,
452    395 => U395,
453    396 => U396,
454    397 => U397,
455    398 => U398,
456    399 => U399,
457    400 => U400,
458    401 => U401,
459    402 => U402,
460    403 => U403,
461    404 => U404,
462    405 => U405,
463    406 => U406,
464    407 => U407,
465    408 => U408,
466    409 => U409,
467    410 => U410,
468    411 => U411,
469    412 => U412,
470    413 => U413,
471    414 => U414,
472    415 => U415,
473    416 => U416,
474    417 => U417,
475    418 => U418,
476    419 => U419,
477    420 => U420,
478    421 => U421,
479    422 => U422,
480    423 => U423,
481    424 => U424,
482    425 => U425,
483    426 => U426,
484    427 => U427,
485    428 => U428,
486    429 => U429,
487    430 => U430,
488    431 => U431,
489    432 => U432,
490    433 => U433,
491    434 => U434,
492    435 => U435,
493    436 => U436,
494    437 => U437,
495    438 => U438,
496    439 => U439,
497    440 => U440,
498    441 => U441,
499    442 => U442,
500    443 => U443,
501    444 => U444,
502    445 => U445,
503    446 => U446,
504    447 => U447,
505    448 => U448,
506    449 => U449,
507    450 => U450,
508    451 => U451,
509    452 => U452,
510    453 => U453,
511    454 => U454,
512    455 => U455,
513    456 => U456,
514    457 => U457,
515    458 => U458,
516    459 => U459,
517    460 => U460,
518    461 => U461,
519    462 => U462,
520    463 => U463,
521    464 => U464,
522    465 => U465,
523    466 => U466,
524    467 => U467,
525    468 => U468,
526    469 => U469,
527    470 => U470,
528    471 => U471,
529    472 => U472,
530    473 => U473,
531    474 => U474,
532    475 => U475,
533    476 => U476,
534    477 => U477,
535    478 => U478,
536    479 => U479,
537    480 => U480,
538    481 => U481,
539    482 => U482,
540    483 => U483,
541    484 => U484,
542    485 => U485,
543    486 => U486,
544    487 => U487,
545    488 => U488,
546    489 => U489,
547    490 => U490,
548    491 => U491,
549    492 => U492,
550    493 => U493,
551    494 => U494,
552    495 => U495,
553    496 => U496,
554    497 => U497,
555    498 => U498,
556    499 => U499,
557    500 => U500,
558    501 => U501,
559    502 => U502,
560    503 => U503,
561    504 => U504,
562    505 => U505,
563    506 => U506,
564    507 => U507,
565    508 => U508,
566    509 => U509,
567    510 => U510,
568    511 => U511,
569    512 => U512,
570    528 => U528,
571    536 => U536,
572    544 => U544,
573    560 => U560,
574    568 => U568,
575    576 => U576,
576    592 => U592,
577    608 => U608,
578    624 => U624,
579    640 => U640,
580    656 => U656,
581    672 => U672,
582    688 => U688,
583    704 => U704,
584    720 => U720,
585    736 => U736,
586    752 => U752,
587    768 => U768,
588    784 => U784,
589    800 => U800,
590    816 => U816,
591    832 => U832,
592    848 => U848,
593    864 => U864,
594    880 => U880,
595    896 => U896,
596    912 => U912,
597    928 => U928,
598    944 => U944,
599    960 => U960,
600    976 => U976,
601    992 => U992,
602    1008 => U1008,
603    1024 => U1024,
604    2048 => U2048,
605    4096 => U4096,
606    8192 => U8192,
607}
608
609/// Additional typenum size aliases beyond what are normally provided.
610///
611/// These are defined using their component bits rather than `Add` to avoid conflicting impls.
612#[cfg(feature = "extra-sizes")]
613#[allow(missing_docs)]
614mod extra_sizes {
615    use super::{ArraySize, AssocArraySize};
616    use typenum::{
617        UInt, UTerm,
618        consts::{B0, B1},
619    };
620
621    // This macro constructs a UInt type from a sequence of bits.  The bits are interpreted as the
622    // little-endian representation of the integer in question.  For example, uint!(1 1 0 1 0 0 1) is
623    // U75 (not U105).
624    macro_rules! uint {
625        () => { UTerm };
626        (0 $($bs:tt)*) => { UInt< uint!($($bs)*), B0 > };
627        (1 $($bs:tt)*) => { UInt< uint!($($bs)*), B1 > };
628    }
629
630    pub type U1040 = uint!(0 0 0 0 1 0 0 0 0 0 1);
631    pub type U1056 = uint!(0 0 0 0 0 1 0 0 0 0 1);
632    pub type U1072 = uint!(0 0 0 0 1 1 0 0 0 0 1);
633    pub type U1088 = uint!(0 0 0 0 0 0 1 0 0 0 1);
634    pub type U1104 = uint!(0 0 0 0 1 0 1 0 0 0 1);
635    pub type U1120 = uint!(0 0 0 0 0 1 1 0 0 0 1);
636    pub type U1136 = uint!(0 0 0 0 1 1 1 0 0 0 1);
637    pub type U1152 = uint!(0 0 0 0 0 0 0 1 0 0 1);
638    pub type U1168 = uint!(0 0 0 0 1 0 0 1 0 0 1);
639    pub type U1184 = uint!(0 0 0 0 0 1 0 1 0 0 1);
640    pub type U1200 = uint!(0 0 0 0 1 1 0 1 0 0 1);
641    pub type U1216 = uint!(0 0 0 0 0 0 1 1 0 0 1);
642    pub type U1232 = uint!(0 0 0 0 1 0 1 1 0 0 1);
643    pub type U1248 = uint!(0 0 0 0 0 1 1 1 0 0 1);
644    pub type U1264 = uint!(0 0 0 0 1 1 1 1 0 0 1);
645    pub type U1280 = uint!(0 0 0 0 0 0 0 0 1 0 1);
646    pub type U1296 = uint!(0 0 0 0 1 0 0 0 1 0 1);
647    pub type U1312 = uint!(0 0 0 0 0 1 0 0 1 0 1);
648    pub type U1328 = uint!(0 0 0 0 1 1 0 0 1 0 1);
649    pub type U1344 = uint!(0 0 0 0 0 0 1 0 1 0 1);
650    pub type U1360 = uint!(0 0 0 0 1 0 1 0 1 0 1);
651    pub type U1376 = uint!(0 0 0 0 0 1 1 0 1 0 1);
652    pub type U1392 = uint!(0 0 0 0 1 1 1 0 1 0 1);
653    pub type U1408 = uint!(0 0 0 0 0 0 0 1 1 0 1);
654    pub type U1424 = uint!(0 0 0 0 1 0 0 1 1 0 1);
655    pub type U1440 = uint!(0 0 0 0 0 1 0 1 1 0 1);
656    pub type U1456 = uint!(0 0 0 0 1 1 0 1 1 0 1);
657    pub type U1472 = uint!(0 0 0 0 0 0 1 1 1 0 1);
658    pub type U1488 = uint!(0 0 0 0 1 0 1 1 1 0 1);
659    pub type U1504 = uint!(0 0 0 0 0 1 1 1 1 0 1);
660    pub type U1520 = uint!(0 0 0 0 1 1 1 1 1 0 1);
661    pub type U1536 = uint!(0 0 0 0 0 0 0 0 0 1 1);
662    pub type U1552 = uint!(0 0 0 0 1 0 0 0 0 1 1);
663    pub type U1568 = uint!(0 0 0 0 0 1 0 0 0 1 1);
664    pub type U1584 = uint!(0 0 0 0 1 1 0 0 0 1 1);
665    pub type U1600 = uint!(0 0 0 0 0 0 1 0 0 1 1);
666    pub type U1616 = uint!(0 0 0 0 1 0 1 0 0 1 1);
667    pub type U1632 = uint!(0 0 0 0 0 1 1 0 0 1 1);
668    pub type U1648 = uint!(0 0 0 0 1 1 1 0 0 1 1);
669    pub type U1664 = uint!(0 0 0 0 0 0 0 1 0 1 1);
670    pub type U1680 = uint!(0 0 0 0 1 0 0 1 0 1 1);
671    pub type U1696 = uint!(0 0 0 0 0 1 0 1 0 1 1);
672    pub type U1712 = uint!(0 0 0 0 1 1 0 1 0 1 1);
673    pub type U1728 = uint!(0 0 0 0 0 0 1 1 0 1 1);
674    pub type U1744 = uint!(0 0 0 0 1 0 1 1 0 1 1);
675    pub type U1760 = uint!(0 0 0 0 0 1 1 1 0 1 1);
676    pub type U1776 = uint!(0 0 0 0 1 1 1 1 0 1 1);
677    pub type U1792 = uint!(0 0 0 0 0 0 0 0 1 1 1);
678    pub type U1808 = uint!(0 0 0 0 1 0 0 0 1 1 1);
679    pub type U1824 = uint!(0 0 0 0 0 1 0 0 1 1 1);
680    pub type U1840 = uint!(0 0 0 0 1 1 0 0 1 1 1);
681    pub type U1856 = uint!(0 0 0 0 0 0 1 0 1 1 1);
682    pub type U1872 = uint!(0 0 0 0 1 0 1 0 1 1 1);
683    pub type U1888 = uint!(0 0 0 0 0 1 1 0 1 1 1);
684    pub type U1904 = uint!(0 0 0 0 1 1 1 0 1 1 1);
685    pub type U1920 = uint!(0 0 0 0 0 0 0 1 1 1 1);
686    pub type U1936 = uint!(0 0 0 0 1 0 0 1 1 1 1);
687    pub type U1952 = uint!(0 0 0 0 0 1 0 1 1 1 1);
688    pub type U1968 = uint!(0 0 0 0 1 1 0 1 1 1 1);
689    pub type U1984 = uint!(0 0 0 0 0 0 1 1 1 1 1);
690    pub type U2000 = uint!(0 0 0 0 1 0 1 1 1 1 1);
691    pub type U2016 = uint!(0 0 0 0 0 1 1 1 1 1 1);
692    pub type U2032 = uint!(0 0 0 0 1 1 1 1 1 1 1);
693    pub type U2064 = uint!(0 0 0 0 1 0 0 0 0 0 0 1);
694    pub type U2080 = uint!(0 0 0 0 0 1 0 0 0 0 0 1);
695    pub type U2096 = uint!(0 0 0 0 1 1 0 0 0 0 0 1);
696    pub type U2112 = uint!(0 0 0 0 0 0 1 0 0 0 0 1);
697    pub type U2128 = uint!(0 0 0 0 1 0 1 0 0 0 0 1);
698    pub type U2144 = uint!(0 0 0 0 0 1 1 0 0 0 0 1);
699    pub type U2160 = uint!(0 0 0 0 1 1 1 0 0 0 0 1);
700    pub type U2176 = uint!(0 0 0 0 0 0 0 1 0 0 0 1);
701    pub type U2192 = uint!(0 0 0 0 1 0 0 1 0 0 0 1);
702    pub type U2208 = uint!(0 0 0 0 0 1 0 1 0 0 0 1);
703    pub type U2224 = uint!(0 0 0 0 1 1 0 1 0 0 0 1);
704    pub type U2240 = uint!(0 0 0 0 0 0 1 1 0 0 0 1);
705    pub type U2256 = uint!(0 0 0 0 1 0 1 1 0 0 0 1);
706    pub type U2272 = uint!(0 0 0 0 0 1 1 1 0 0 0 1);
707    pub type U2288 = uint!(0 0 0 0 1 1 1 1 0 0 0 1);
708    pub type U2304 = uint!(0 0 0 0 0 0 0 0 1 0 0 1);
709    pub type U2320 = uint!(0 0 0 0 1 0 0 0 1 0 0 1);
710    pub type U2336 = uint!(0 0 0 0 0 1 0 0 1 0 0 1);
711    pub type U2352 = uint!(0 0 0 0 1 1 0 0 1 0 0 1);
712    pub type U2368 = uint!(0 0 0 0 0 0 1 0 1 0 0 1);
713    pub type U2384 = uint!(0 0 0 0 1 0 1 0 1 0 0 1);
714    pub type U2400 = uint!(0 0 0 0 0 1 1 0 1 0 0 1);
715    pub type U2416 = uint!(0 0 0 0 1 1 1 0 1 0 0 1);
716    pub type U2432 = uint!(0 0 0 0 0 0 0 1 1 0 0 1);
717    pub type U2448 = uint!(0 0 0 0 1 0 0 1 1 0 0 1);
718    pub type U2464 = uint!(0 0 0 0 0 1 0 1 1 0 0 1);
719    pub type U2480 = uint!(0 0 0 0 1 1 0 1 1 0 0 1);
720    pub type U2496 = uint!(0 0 0 0 0 0 1 1 1 0 0 1);
721    pub type U2512 = uint!(0 0 0 0 1 0 1 1 1 0 0 1);
722    pub type U2528 = uint!(0 0 0 0 0 1 1 1 1 0 0 1);
723    pub type U2544 = uint!(0 0 0 0 1 1 1 1 1 0 0 1);
724    pub type U2560 = uint!(0 0 0 0 0 0 0 0 0 1 0 1);
725    pub type U2576 = uint!(0 0 0 0 1 0 0 0 0 1 0 1);
726    pub type U2592 = uint!(0 0 0 0 0 1 0 0 0 1 0 1);
727    pub type U2608 = uint!(0 0 0 0 1 1 0 0 0 1 0 1);
728    pub type U2624 = uint!(0 0 0 0 0 0 1 0 0 1 0 1);
729    pub type U2640 = uint!(0 0 0 0 1 0 1 0 0 1 0 1);
730    pub type U2656 = uint!(0 0 0 0 0 1 1 0 0 1 0 1);
731    pub type U2672 = uint!(0 0 0 0 1 1 1 0 0 1 0 1);
732    pub type U2688 = uint!(0 0 0 0 0 0 0 1 0 1 0 1);
733    pub type U2704 = uint!(0 0 0 0 1 0 0 1 0 1 0 1);
734    pub type U2720 = uint!(0 0 0 0 0 1 0 1 0 1 0 1);
735    pub type U2736 = uint!(0 0 0 0 1 1 0 1 0 1 0 1);
736    pub type U2752 = uint!(0 0 0 0 0 0 1 1 0 1 0 1);
737    pub type U2768 = uint!(0 0 0 0 1 0 1 1 0 1 0 1);
738    pub type U2784 = uint!(0 0 0 0 0 1 1 1 0 1 0 1);
739    pub type U2800 = uint!(0 0 0 0 1 1 1 1 0 1 0 1);
740    pub type U2816 = uint!(0 0 0 0 0 0 0 0 1 1 0 1);
741    pub type U2832 = uint!(0 0 0 0 1 0 0 0 1 1 0 1);
742    pub type U2848 = uint!(0 0 0 0 0 1 0 0 1 1 0 1);
743    pub type U2864 = uint!(0 0 0 0 1 1 0 0 1 1 0 1);
744    pub type U2880 = uint!(0 0 0 0 0 0 1 0 1 1 0 1);
745    pub type U2896 = uint!(0 0 0 0 1 0 1 0 1 1 0 1);
746    pub type U2912 = uint!(0 0 0 0 0 1 1 0 1 1 0 1);
747    pub type U2928 = uint!(0 0 0 0 1 1 1 0 1 1 0 1);
748    pub type U2944 = uint!(0 0 0 0 0 0 0 1 1 1 0 1);
749    pub type U2960 = uint!(0 0 0 0 1 0 0 1 1 1 0 1);
750    pub type U2976 = uint!(0 0 0 0 0 1 0 1 1 1 0 1);
751    pub type U2992 = uint!(0 0 0 0 1 1 0 1 1 1 0 1);
752    pub type U3008 = uint!(0 0 0 0 0 0 1 1 1 1 0 1);
753    pub type U3024 = uint!(0 0 0 0 1 0 1 1 1 1 0 1);
754    pub type U3040 = uint!(0 0 0 0 0 1 1 1 1 1 0 1);
755    pub type U3056 = uint!(0 0 0 0 1 1 1 1 1 1 0 1);
756    pub type U3072 = uint!(0 0 0 0 0 0 0 0 0 0 1 1);
757    pub type U3088 = uint!(0 0 0 0 1 0 0 0 0 0 1 1);
758    pub type U3104 = uint!(0 0 0 0 0 1 0 0 0 0 1 1);
759    pub type U3120 = uint!(0 0 0 0 1 1 0 0 0 0 1 1);
760    pub type U3136 = uint!(0 0 0 0 0 0 1 0 0 0 1 1);
761    pub type U3152 = uint!(0 0 0 0 1 0 1 0 0 0 1 1);
762    pub type U3168 = uint!(0 0 0 0 0 1 1 0 0 0 1 1);
763    pub type U3184 = uint!(0 0 0 0 1 1 1 0 0 0 1 1);
764    pub type U3200 = uint!(0 0 0 0 0 0 0 1 0 0 1 1);
765    pub type U3216 = uint!(0 0 0 0 1 0 0 1 0 0 1 1);
766    pub type U3232 = uint!(0 0 0 0 0 1 0 1 0 0 1 1);
767    pub type U3248 = uint!(0 0 0 0 1 1 0 1 0 0 1 1);
768    pub type U3264 = uint!(0 0 0 0 0 0 1 1 0 0 1 1);
769    pub type U3280 = uint!(0 0 0 0 1 0 1 1 0 0 1 1);
770    pub type U3296 = uint!(0 0 0 0 0 1 1 1 0 0 1 1);
771    pub type U3312 = uint!(0 0 0 0 1 1 1 1 0 0 1 1);
772    pub type U3328 = uint!(0 0 0 0 0 0 0 0 1 0 1 1);
773    pub type U3344 = uint!(0 0 0 0 1 0 0 0 1 0 1 1);
774    pub type U3360 = uint!(0 0 0 0 0 1 0 0 1 0 1 1);
775    pub type U3376 = uint!(0 0 0 0 1 1 0 0 1 0 1 1);
776    pub type U3392 = uint!(0 0 0 0 0 0 1 0 1 0 1 1);
777    pub type U3408 = uint!(0 0 0 0 1 0 1 0 1 0 1 1);
778    pub type U3424 = uint!(0 0 0 0 0 1 1 0 1 0 1 1);
779    pub type U3440 = uint!(0 0 0 0 1 1 1 0 1 0 1 1);
780    pub type U3456 = uint!(0 0 0 0 0 0 0 1 1 0 1 1);
781    pub type U3472 = uint!(0 0 0 0 1 0 0 1 1 0 1 1);
782    pub type U3488 = uint!(0 0 0 0 0 1 0 1 1 0 1 1);
783    pub type U3504 = uint!(0 0 0 0 1 1 0 1 1 0 1 1);
784    pub type U3520 = uint!(0 0 0 0 0 0 1 1 1 0 1 1);
785    pub type U3536 = uint!(0 0 0 0 1 0 1 1 1 0 1 1);
786    pub type U3552 = uint!(0 0 0 0 0 1 1 1 1 0 1 1);
787    pub type U3568 = uint!(0 0 0 0 1 1 1 1 1 0 1 1);
788    pub type U3584 = uint!(0 0 0 0 0 0 0 0 0 1 1 1);
789    pub type U3600 = uint!(0 0 0 0 1 0 0 0 0 1 1 1);
790    pub type U3616 = uint!(0 0 0 0 0 1 0 0 0 1 1 1);
791    pub type U3632 = uint!(0 0 0 0 1 1 0 0 0 1 1 1);
792    pub type U3648 = uint!(0 0 0 0 0 0 1 0 0 1 1 1);
793    pub type U3664 = uint!(0 0 0 0 1 0 1 0 0 1 1 1);
794    pub type U3680 = uint!(0 0 0 0 0 1 1 0 0 1 1 1);
795    pub type U3696 = uint!(0 0 0 0 1 1 1 0 0 1 1 1);
796    pub type U3712 = uint!(0 0 0 0 0 0 0 1 0 1 1 1);
797    pub type U3728 = uint!(0 0 0 0 1 0 0 1 0 1 1 1);
798    pub type U3744 = uint!(0 0 0 0 0 1 0 1 0 1 1 1);
799    pub type U3760 = uint!(0 0 0 0 1 1 0 1 0 1 1 1);
800    pub type U3776 = uint!(0 0 0 0 0 0 1 1 0 1 1 1);
801    pub type U3792 = uint!(0 0 0 0 1 0 1 1 0 1 1 1);
802    pub type U3808 = uint!(0 0 0 0 0 1 1 1 0 1 1 1);
803    pub type U3824 = uint!(0 0 0 0 1 1 1 1 0 1 1 1);
804    pub type U3840 = uint!(0 0 0 0 0 0 0 0 1 1 1 1);
805    pub type U3856 = uint!(0 0 0 0 1 0 0 0 1 1 1 1);
806    pub type U3872 = uint!(0 0 0 0 0 1 0 0 1 1 1 1);
807    pub type U3888 = uint!(0 0 0 0 1 1 0 0 1 1 1 1);
808    pub type U3904 = uint!(0 0 0 0 0 0 1 0 1 1 1 1);
809    pub type U3920 = uint!(0 0 0 0 1 0 1 0 1 1 1 1);
810    pub type U3936 = uint!(0 0 0 0 0 1 1 0 1 1 1 1);
811    pub type U3952 = uint!(0 0 0 0 1 1 1 0 1 1 1 1);
812    pub type U3968 = uint!(0 0 0 0 0 0 0 1 1 1 1 1);
813    pub type U3984 = uint!(0 0 0 0 1 0 0 1 1 1 1 1);
814    pub type U4000 = uint!(0 0 0 0 0 1 0 1 1 1 1 1);
815    pub type U4016 = uint!(0 0 0 0 1 1 0 1 1 1 1 1);
816    pub type U4032 = uint!(0 0 0 0 0 0 1 1 1 1 1 1);
817    pub type U4048 = uint!(0 0 0 0 1 0 1 1 1 1 1 1);
818    pub type U4064 = uint!(0 0 0 0 0 1 1 1 1 1 1 1);
819    pub type U4080 = uint!(0 0 0 0 1 1 1 1 1 1 1 1);
820
821    // ML-DSA sizes
822    //
823    // Includes the public key, private key, and signature sizes not covered elsewhere, as well as
824    // some intermediate value sizes.
825    pub type U2420 = uint!(0 0 1 0 1 1 1 0 1 0 0 1);
826    pub type U3309 = uint!(1 0 1 1 0 1 1 1 0 0 1 1);
827    pub type U4480 = uint!(0 0 0 0 0 0 0 1 1 0 0 0 1);
828    pub type U4544 = uint!(0 0 0 0 0 0 1 1 1 0 0 0 1);
829    pub type U4595 = uint!(1 1 0 0 1 1 1 1 1 0 0 0 1);
830    pub type U4627 = uint!(1 1 0 0 1 0 0 0 0 1 0 0 1);
831    pub type U4896 = uint!(0 0 0 0 0 1 0 0 1 1 0 0 1);
832
833    // SLH-DSA sizes
834    pub type U7856 = uint!(0 0 0 0 1 1 0 1 0 1 1 1 1);
835    pub type U16224 = uint!(0 0 0 0 0 1 1 0 1 1 1 1 1 1);
836    pub type U17088 = uint!(0 0 0 0 0 0 1 1 0 1 0 0 0 0 1);
837    pub type U29792 = uint!(0 0 0 0 0 1 1 0 0 0 1 0 1 1 1);
838    pub type U35664 = uint!(0 0 0 0 1 0 1 0 1 1 0 1 0 0 0 1);
839    pub type U49856 = uint!(0 0 0 0 0 0 1 1 0 1 0 0 0 0 1 1);
840
841    // Kemeleon ML-KEM Encoding sizes
842    pub type U749 = uint!(1 0 1 1 0 1 1 1 0 1);
843    pub type U781 = uint!(1 0 1 1 0 0 0 0 1 1);
844    pub type U877 = uint!(1 0 1 1 0 1 1 0 1 1);
845    pub type U1124 = uint!(0 0 1 0 0 1 1 0 0 0 1);
846    pub type U1156 = uint!(0 0 1 0 0 0 0 1 0 0 1);
847    pub type U1252 = uint!(0 0 1 0 0 1 1 1 0 0 1);
848    pub type U1498 = uint!(0 1 0 1 1 0 1 1 1 0 1);
849    pub type U1530 = uint!(0 1 0 1 1 1 1 1 1 0 1);
850    pub type U1658 = uint!(0 1 0 1 1 1 1 0 0 1 1);
851
852    // LMS sizes
853    pub type U2047 = uint!(1 1 1 1 1 1 1 1 1 1 1);
854    pub type U2180 = uint!(0 0 1 0 0 0 0 1 0 0 0 1);
855    pub type U4292 = uint!(0 0 1 0 0 0 1 1 0 0 0 0 1);
856    pub type U8516 = uint!(0 0 1 0 0 0 1 0 1 0 0 0 0 1);
857
858    // FrodoKEM640 sizes
859
860    pub type U9616 = uint!(0 0 0 0 1 0 0 1 1 0 1 0 0 1);
861    pub type U19888 = uint!(0 0 0 0 1 1 0 1 1 0 1 1 0 0 1);
862    pub type U9720 = uint!(0 0 0 1 1 1 1 1 1 0 1 0 0 1);
863    pub type U9752 = uint!(0 0 0 1 1 0 0 0 0 1 1 0 0 1);
864
865    // FrodoKEM976 sizes
866    pub type U15632 = uint!(0 0 0 0 1 0 0 0 1 0 1 1 1 1);
867    pub type U31296 = uint!(0 0 0 0 0 0 1 0 0 1 0 1 1 1 1);
868    pub type U15744 = uint!(0 0 0 0 0 0 0 1 1 0 1 1 1 1);
869    pub type U15792 = uint!(0 0 0 0 1 1 0 1 1 0 1 1 1 1);
870
871    // FrodoKEM1344 sizes
872    pub type U21520 = uint!(0 0 0 0 1 0 0 0 0 0 1 0 1 0 1);
873    pub type U43088 = uint!(0 0 0 0 1 0 1 0 0 0 0 1 0 1 0 1);
874    pub type U21632 = uint!(0 0 0 0 0 0 0 1 0 0 1 0 1 0 1);
875    pub type U21696 = uint!(0 0 0 0 0 0 1 1 0 0 1 0 1 0 1);
876
877    impl_array_sizes! {
878        base_extra,
879        1040 => U1040,
880        1056 => U1056,
881        1072 => U1072,
882        1088 => U1088,
883        1104 => U1104,
884        1120 => U1120,
885        1136 => U1136,
886        1152 => U1152,
887        1168 => U1168,
888        1184 => U1184,
889        1200 => U1200,
890        1216 => U1216,
891        1232 => U1232,
892        1248 => U1248,
893        1264 => U1264,
894        1280 => U1280,
895        1296 => U1296,
896        1312 => U1312,
897        1328 => U1328,
898        1344 => U1344,
899        1360 => U1360,
900        1376 => U1376,
901        1392 => U1392,
902        1408 => U1408,
903        1424 => U1424,
904        1440 => U1440,
905        1456 => U1456,
906        1472 => U1472,
907        1488 => U1488,
908        1504 => U1504,
909        1520 => U1520,
910        1536 => U1536,
911        1552 => U1552,
912        1568 => U1568,
913        1584 => U1584,
914        1600 => U1600,
915        1616 => U1616,
916        1632 => U1632,
917        1648 => U1648,
918        1664 => U1664,
919        1680 => U1680,
920        1696 => U1696,
921        1712 => U1712,
922        1728 => U1728,
923        1744 => U1744,
924        1760 => U1760,
925        1776 => U1776,
926        1792 => U1792,
927        1808 => U1808,
928        1824 => U1824,
929        1840 => U1840,
930        1856 => U1856,
931        1872 => U1872,
932        1888 => U1888,
933        1904 => U1904,
934        1920 => U1920,
935        1936 => U1936,
936        1952 => U1952,
937        1968 => U1968,
938        1984 => U1984,
939        2000 => U2000,
940        2016 => U2016,
941        2032 => U2032,
942        2064 => U2064,
943        2080 => U2080,
944        2096 => U2096,
945        2112 => U2112,
946        2128 => U2128,
947        2144 => U2144,
948        2160 => U2160,
949        2176 => U2176,
950        2192 => U2192,
951        2208 => U2208,
952        2224 => U2224,
953        2240 => U2240,
954        2256 => U2256,
955        2272 => U2272,
956        2288 => U2288,
957        2304 => U2304,
958        2320 => U2320,
959        2336 => U2336,
960        2352 => U2352,
961        2368 => U2368,
962        2384 => U2384,
963        2400 => U2400,
964        2416 => U2416,
965        2432 => U2432,
966        2448 => U2448,
967        2464 => U2464,
968        2480 => U2480,
969        2496 => U2496,
970        2512 => U2512,
971        2528 => U2528,
972        2544 => U2544,
973        2560 => U2560,
974        2576 => U2576,
975        2592 => U2592,
976        2608 => U2608,
977        2624 => U2624,
978        2640 => U2640,
979        2656 => U2656,
980        2672 => U2672,
981        2688 => U2688,
982        2704 => U2704,
983        2720 => U2720,
984        2736 => U2736,
985        2752 => U2752,
986        2768 => U2768,
987        2784 => U2784,
988        2800 => U2800,
989        2816 => U2816,
990        2832 => U2832,
991        2848 => U2848,
992        2864 => U2864,
993        2880 => U2880,
994        2896 => U2896,
995        2912 => U2912,
996        2928 => U2928,
997        2944 => U2944,
998        2960 => U2960,
999        2976 => U2976,
1000        2992 => U2992,
1001        3008 => U3008,
1002        3024 => U3024,
1003        3040 => U3040,
1004        3056 => U3056,
1005        3072 => U3072,
1006        3088 => U3088,
1007        3104 => U3104,
1008        3120 => U3120,
1009        3136 => U3136,
1010        3152 => U3152,
1011        3168 => U3168,
1012        3184 => U3184,
1013        3200 => U3200,
1014        3216 => U3216,
1015        3232 => U3232,
1016        3248 => U3248,
1017        3264 => U3264,
1018        3280 => U3280,
1019        3296 => U3296,
1020        3312 => U3312,
1021        3328 => U3328,
1022        3344 => U3344,
1023        3360 => U3360,
1024        3376 => U3376,
1025        3392 => U3392,
1026        3408 => U3408,
1027        3424 => U3424,
1028        3440 => U3440,
1029        3456 => U3456,
1030        3472 => U3472,
1031        3488 => U3488,
1032        3504 => U3504,
1033        3520 => U3520,
1034        3536 => U3536,
1035        3552 => U3552,
1036        3568 => U3568,
1037        3584 => U3584,
1038        3600 => U3600,
1039        3616 => U3616,
1040        3632 => U3632,
1041        3648 => U3648,
1042        3664 => U3664,
1043        3680 => U3680,
1044        3696 => U3696,
1045        3712 => U3712,
1046        3728 => U3728,
1047        3744 => U3744,
1048        3760 => U3760,
1049        3776 => U3776,
1050        3792 => U3792,
1051        3808 => U3808,
1052        3824 => U3824,
1053        3840 => U3840,
1054        3856 => U3856,
1055        3872 => U3872,
1056        3888 => U3888,
1057        3904 => U3904,
1058        3920 => U3920,
1059        3936 => U3936,
1060        3952 => U3952,
1061        3968 => U3968,
1062        3984 => U3984,
1063        4000 => U4000,
1064        4016 => U4016,
1065        4032 => U4032,
1066        4048 => U4048,
1067        4064 => U4064,
1068        4080 => U4080,
1069    }
1070
1071    // ML-DSA sizes
1072    impl_array_sizes! {
1073        ml_dsa,
1074        2420 => U2420,
1075        3309 => U3309,
1076        4480 => U4480,
1077        4544 => U4544,
1078        4595 => U4595,
1079        4627 => U4627,
1080        4896 => U4896,
1081    }
1082
1083    // SLH-DSA sizes
1084    impl_array_sizes! {
1085        slh_dsa,
1086        7856 => U7856,
1087        16224 => U16224,
1088        17088 => U17088,
1089        29792 => U29792,
1090        35664 => U35664,
1091        49856 => U49856,
1092    }
1093
1094    // Kemeleon ML-KEM Encoding sizes
1095    impl_array_sizes! {
1096        kemeleon,
1097        749 => U749,
1098        781 => U781,
1099        877 => U877,
1100        1124 => U1124,
1101        1156 => U1156,
1102        1252 => U1252,
1103        1498 => U1498,
1104        1530 => U1530,
1105        1658 => U1658,
1106    }
1107
1108    // LMS sizes
1109    impl_array_sizes! {
1110        lms,
1111        2047 => U2047,
1112        2180 => U2180,
1113        4292 => U4292,
1114        8516 => U8516,
1115    }
1116
1117    // Frodo sizes
1118    impl_array_sizes! {
1119        frodokem,
1120        9616 => U9616,
1121        19888 => U19888,
1122        9720 => U9720,
1123        9752 => U9752,
1124        15632 => U15632,
1125        31296 => U31296,
1126        15744 => U15744,
1127        15792 => U15792,
1128        21520 => U21520,
1129        43088 => U43088,
1130        21632 => U21632,
1131        21696 => U21696,
1132    }
1133}