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