Skip to main content

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