object_rainbow/impls/
tuple.rs

1use typenum::tarr;
2
3use crate::*;
4
5impl<A: ToOutput, B: ToOutput> ToOutput for (A, B) {
6    fn to_output(&self, output: &mut dyn Output) {
7        self.0.to_output(output);
8        self.1.to_output(output);
9    }
10}
11
12impl<A: Topological, B: Topological> Topological for (A, B) {
13    fn accept_points(&self, visitor: &mut impl PointVisitor) {
14        self.0.accept_points(visitor);
15        self.1.accept_points(visitor);
16    }
17}
18
19impl<A: Tagged, B: Tagged> Tagged for (A, B) {
20    const TAGS: Tags = Tags(&[], &[&A::TAGS, &B::TAGS]);
21}
22
23impl<Extra: 'static, A: Inline<Extra>, B: Object<Extra>> Object<Extra> for (A, B) {}
24
25impl<Extra: 'static, A: Inline<Extra>, B: Inline<Extra>> Inline<Extra> for (A, B) {}
26
27impl<A: ReflessInline, B: ReflessObject> ReflessObject for (A, B) {}
28
29impl<A: ReflessInline, B: ReflessInline> ReflessInline for (A, B) {}
30
31impl<A: Size, B: Size> Size for (A, B)
32where
33    tarr![A::Size, B::Size,]: typenum::FoldAdd<Output: Unsigned>,
34{
35    const SIZE: usize = A::SIZE + B::SIZE;
36
37    type Size = <tarr![A::Size, B::Size,] as typenum::FoldAdd>::Output;
38}
39
40impl<II: ParseInput, A: ParseInline<II>, B: Parse<II>> Parse<II> for (A, B) {
41    fn parse(mut input: II) -> crate::Result<Self> {
42        Ok((input.parse_inline()?, input.parse()?))
43    }
44}
45
46impl<II: ParseInput, A: ParseInline<II>, B: ParseInline<II>> ParseInline<II> for (A, B) {
47    fn parse_inline(input: &mut II) -> crate::Result<Self> {
48        Ok((input.parse_inline()?, input.parse_inline()?))
49    }
50}
51
52impl<A: MaybeHasNiche, B: MaybeHasNiche> MaybeHasNiche for (A, B) {
53    type MnArray = tarr![A::MnArray, B::MnArray,];
54}
55
56impl<A: ToOutput, B: ToOutput, C: ToOutput> ToOutput for (A, B, C) {
57    fn to_output(&self, output: &mut dyn Output) {
58        self.0.to_output(output);
59        self.1.to_output(output);
60        self.2.to_output(output);
61    }
62}
63
64impl<A: Topological, B: Topological, C: Topological> Topological for (A, B, C) {
65    fn accept_points(&self, visitor: &mut impl PointVisitor) {
66        self.0.accept_points(visitor);
67        self.1.accept_points(visitor);
68        self.2.accept_points(visitor);
69    }
70}
71
72impl<A: Tagged, B: Tagged, C: Tagged> Tagged for (A, B, C) {
73    const TAGS: Tags = Tags(&[], &[&A::TAGS, &B::TAGS, &C::TAGS]);
74}
75
76impl<Extra: 'static, A: Inline<Extra>, B: Inline<Extra>, C: Object<Extra>> Object<Extra>
77    for (A, B, C)
78{
79}
80
81impl<Extra: 'static, A: Inline<Extra>, B: Inline<Extra>, C: Inline<Extra>> Inline<Extra>
82    for (A, B, C)
83{
84}
85
86impl<A: ReflessInline, B: ReflessInline, C: ReflessObject> ReflessObject for (A, B, C) {}
87
88impl<A: ReflessInline, B: ReflessInline, C: ReflessInline> ReflessInline for (A, B, C) {}
89
90impl<A: Size, B: Size, C: Size> Size for (A, B, C)
91where
92    tarr![A::Size, B::Size, C::Size,]: typenum::FoldAdd<Output: Unsigned>,
93{
94    const SIZE: usize = A::SIZE + B::SIZE + C::SIZE;
95
96    type Size = <tarr![A::Size, B::Size, C::Size,] as typenum::FoldAdd>::Output;
97}
98
99impl<II: ParseInput, A: ParseInline<II>, B: ParseInline<II>, C: Parse<II>> Parse<II> for (A, B, C) {
100    fn parse(mut input: II) -> crate::Result<Self> {
101        Ok((input.parse_inline()?, input.parse_inline()?, input.parse()?))
102    }
103}
104
105impl<II: ParseInput, A: ParseInline<II>, B: ParseInline<II>, C: ParseInline<II>> ParseInline<II>
106    for (A, B, C)
107{
108    fn parse_inline(input: &mut II) -> crate::Result<Self> {
109        Ok((
110            input.parse_inline()?,
111            input.parse_inline()?,
112            input.parse_inline()?,
113        ))
114    }
115}
116
117impl<A: MaybeHasNiche, B: MaybeHasNiche, C: MaybeHasNiche> MaybeHasNiche for (A, B, C) {
118    type MnArray = tarr![A::MnArray, B::MnArray, C::MnArray,];
119}
120
121impl<A: ToOutput, B: ToOutput, C: ToOutput, D: ToOutput> ToOutput for (A, B, C, D) {
122    fn to_output(&self, output: &mut dyn Output) {
123        self.0.to_output(output);
124        self.1.to_output(output);
125        self.2.to_output(output);
126        self.3.to_output(output);
127    }
128}
129
130impl<A: Topological, B: Topological, C: Topological, D: Topological> Topological for (A, B, C, D) {
131    fn accept_points(&self, visitor: &mut impl PointVisitor) {
132        self.0.accept_points(visitor);
133        self.1.accept_points(visitor);
134        self.2.accept_points(visitor);
135        self.3.accept_points(visitor);
136    }
137}
138
139impl<A: Tagged, B: Tagged, C: Tagged, D: Tagged> Tagged for (A, B, C, D) {
140    const TAGS: Tags = Tags(&[], &[&A::TAGS, &B::TAGS, &C::TAGS, &D::TAGS]);
141}
142
143impl<Extra: 'static, A: Inline<Extra>, B: Inline<Extra>, C: Inline<Extra>, D: Object<Extra>>
144    Object<Extra> for (A, B, C, D)
145{
146}
147
148impl<Extra: 'static, A: Inline<Extra>, B: Inline<Extra>, C: Inline<Extra>, D: Inline<Extra>>
149    Inline<Extra> for (A, B, C, D)
150{
151}
152
153impl<A: ReflessInline, B: ReflessInline, C: ReflessInline, D: ReflessObject> ReflessObject
154    for (A, B, C, D)
155{
156}
157
158impl<A: ReflessInline, B: ReflessInline, C: ReflessInline, D: ReflessInline> ReflessInline
159    for (A, B, C, D)
160{
161}
162
163impl<A: Size, B: Size, C: Size, D: Size> Size for (A, B, C, D)
164where
165    tarr![A::Size, B::Size, C::Size, D::Size,]: typenum::FoldAdd<Output: Unsigned>,
166{
167    const SIZE: usize = A::SIZE + B::SIZE + C::SIZE + D::SIZE;
168
169    type Size = <tarr![A::Size, B::Size, C::Size, D::Size,] as typenum::FoldAdd>::Output;
170}
171
172impl<II: ParseInput, A: ParseInline<II>, B: ParseInline<II>, C: ParseInline<II>, D: Parse<II>>
173    Parse<II> for (A, B, C, D)
174{
175    fn parse(mut input: II) -> crate::Result<Self> {
176        Ok((
177            input.parse_inline()?,
178            input.parse_inline()?,
179            input.parse_inline()?,
180            input.parse()?,
181        ))
182    }
183}
184
185impl<II: ParseInput, A: ParseInline<II>, B: ParseInline<II>, C: ParseInline<II>, D: ParseInline<II>>
186    ParseInline<II> for (A, B, C, D)
187{
188    fn parse_inline(input: &mut II) -> crate::Result<Self> {
189        Ok((
190            input.parse_inline()?,
191            input.parse_inline()?,
192            input.parse_inline()?,
193            input.parse_inline()?,
194        ))
195    }
196}
197
198impl<A: MaybeHasNiche, B: MaybeHasNiche, C: MaybeHasNiche, D: MaybeHasNiche> MaybeHasNiche
199    for (A, B, C, D)
200{
201    type MnArray = tarr![A::MnArray, B::MnArray, C::MnArray, D::MnArray,];
202}
203
204impl<A: ToOutput, B: ToOutput, C: ToOutput, D: ToOutput, E: ToOutput> ToOutput for (A, B, C, D, E) {
205    fn to_output(&self, output: &mut dyn Output) {
206        self.0.to_output(output);
207        self.1.to_output(output);
208        self.2.to_output(output);
209        self.3.to_output(output);
210        self.4.to_output(output);
211    }
212}
213
214impl<A: Topological, B: Topological, C: Topological, D: Topological, E: Topological> Topological
215    for (A, B, C, D, E)
216{
217    fn accept_points(&self, visitor: &mut impl PointVisitor) {
218        self.0.accept_points(visitor);
219        self.1.accept_points(visitor);
220        self.2.accept_points(visitor);
221        self.3.accept_points(visitor);
222        self.4.accept_points(visitor);
223    }
224}
225
226impl<A: Tagged, B: Tagged, C: Tagged, D: Tagged, E: Tagged> Tagged for (A, B, C, D, E) {
227    const TAGS: Tags = Tags(&[], &[&A::TAGS, &B::TAGS, &C::TAGS, &D::TAGS, &E::TAGS]);
228}
229
230impl<
231    Extra: 'static,
232    A: Inline<Extra>,
233    B: Inline<Extra>,
234    C: Inline<Extra>,
235    D: Inline<Extra>,
236    E: Object<Extra>,
237> Object<Extra> for (A, B, C, D, E)
238{
239}
240
241impl<
242    Extra: 'static,
243    A: Inline<Extra>,
244    B: Inline<Extra>,
245    C: Inline<Extra>,
246    D: Inline<Extra>,
247    E: Inline<Extra>,
248> Inline<Extra> for (A, B, C, D, E)
249{
250}
251
252impl<A: ReflessInline, B: ReflessInline, C: ReflessInline, D: ReflessInline, E: ReflessObject>
253    ReflessObject for (A, B, C, D, E)
254{
255}
256
257impl<A: ReflessInline, B: ReflessInline, C: ReflessInline, D: ReflessInline, E: ReflessInline>
258    ReflessInline for (A, B, C, D, E)
259{
260}
261
262impl<A: Size, B: Size, C: Size, D: Size, E: Size> Size for (A, B, C, D, E)
263where
264    tarr![A::Size, B::Size, C::Size, D::Size, E::Size,]: typenum::FoldAdd<Output: Unsigned>,
265{
266    const SIZE: usize = A::SIZE + B::SIZE + C::SIZE + D::SIZE + E::SIZE;
267
268    type Size = <tarr![A::Size, B::Size, C::Size, D::Size, E::Size,] as typenum::FoldAdd>::Output;
269}
270
271impl<
272    II: ParseInput,
273    A: ParseInline<II>,
274    B: ParseInline<II>,
275    C: ParseInline<II>,
276    D: ParseInline<II>,
277    E: Parse<II>,
278> Parse<II> for (A, B, C, D, E)
279{
280    fn parse(mut input: II) -> crate::Result<Self> {
281        Ok((
282            input.parse_inline()?,
283            input.parse_inline()?,
284            input.parse_inline()?,
285            input.parse_inline()?,
286            input.parse()?,
287        ))
288    }
289}
290
291impl<
292    II: ParseInput,
293    A: ParseInline<II>,
294    B: ParseInline<II>,
295    C: ParseInline<II>,
296    D: ParseInline<II>,
297    E: ParseInline<II>,
298> ParseInline<II> for (A, B, C, D, E)
299{
300    fn parse_inline(input: &mut II) -> crate::Result<Self> {
301        Ok((
302            input.parse_inline()?,
303            input.parse_inline()?,
304            input.parse_inline()?,
305            input.parse_inline()?,
306            input.parse_inline()?,
307        ))
308    }
309}
310
311impl<A: MaybeHasNiche, B: MaybeHasNiche, C: MaybeHasNiche, D: MaybeHasNiche, E: MaybeHasNiche>
312    MaybeHasNiche for (A, B, C, D, E)
313{
314    type MnArray = tarr![A::MnArray, B::MnArray, C::MnArray, D::MnArray, E::MnArray,];
315}
316
317impl<A: ToOutput, B: ToOutput, C: ToOutput, D: ToOutput, E: ToOutput, F: ToOutput> ToOutput
318    for (A, B, C, D, E, F)
319{
320    fn to_output(&self, output: &mut dyn Output) {
321        self.0.to_output(output);
322        self.1.to_output(output);
323        self.2.to_output(output);
324        self.3.to_output(output);
325        self.4.to_output(output);
326        self.5.to_output(output);
327    }
328}
329
330impl<A: Topological, B: Topological, C: Topological, D: Topological, E: Topological, F: Topological>
331    Topological for (A, B, C, D, E, F)
332{
333    fn accept_points(&self, visitor: &mut impl PointVisitor) {
334        self.0.accept_points(visitor);
335        self.1.accept_points(visitor);
336        self.2.accept_points(visitor);
337        self.3.accept_points(visitor);
338        self.4.accept_points(visitor);
339        self.5.accept_points(visitor);
340    }
341}
342
343impl<A: Tagged, B: Tagged, C: Tagged, D: Tagged, E: Tagged, F: Tagged> Tagged
344    for (A, B, C, D, E, F)
345{
346    const TAGS: Tags = Tags(
347        &[],
348        &[&A::TAGS, &B::TAGS, &C::TAGS, &D::TAGS, &E::TAGS, &F::TAGS],
349    );
350}
351
352impl<
353    Extra: 'static,
354    A: Inline<Extra>,
355    B: Inline<Extra>,
356    C: Inline<Extra>,
357    D: Inline<Extra>,
358    E: Inline<Extra>,
359    F: Object<Extra>,
360> Object<Extra> for (A, B, C, D, E, F)
361{
362}
363
364impl<
365    Extra: 'static,
366    A: Inline<Extra>,
367    B: Inline<Extra>,
368    C: Inline<Extra>,
369    D: Inline<Extra>,
370    E: Inline<Extra>,
371    F: Inline<Extra>,
372> Inline<Extra> for (A, B, C, D, E, F)
373{
374}
375
376impl<
377    A: ReflessInline,
378    B: ReflessInline,
379    C: ReflessInline,
380    D: ReflessInline,
381    E: ReflessInline,
382    F: ReflessObject,
383> ReflessObject for (A, B, C, D, E, F)
384{
385}
386
387impl<
388    A: ReflessInline,
389    B: ReflessInline,
390    C: ReflessInline,
391    D: ReflessInline,
392    E: ReflessInline,
393    F: ReflessInline,
394> ReflessInline for (A, B, C, D, E, F)
395{
396}
397
398impl<A: Size, B: Size, C: Size, D: Size, E: Size, F: Size> Size for (A, B, C, D, E, F)
399where
400    tarr![A::Size, B::Size, C::Size, D::Size, E::Size, F::Size,]:
401        typenum::FoldAdd<Output: Unsigned>,
402{
403    const SIZE: usize = A::SIZE + B::SIZE + C::SIZE + D::SIZE + E::SIZE + F::SIZE;
404
405    type Size =
406        <tarr![A::Size, B::Size, C::Size, D::Size, E::Size, F::Size,] as typenum::FoldAdd>::Output;
407}
408
409impl<
410    II: ParseInput,
411    A: ParseInline<II>,
412    B: ParseInline<II>,
413    C: ParseInline<II>,
414    D: ParseInline<II>,
415    E: ParseInline<II>,
416    F: Parse<II>,
417> Parse<II> for (A, B, C, D, E, F)
418{
419    fn parse(mut input: II) -> crate::Result<Self> {
420        Ok((
421            input.parse_inline()?,
422            input.parse_inline()?,
423            input.parse_inline()?,
424            input.parse_inline()?,
425            input.parse_inline()?,
426            input.parse()?,
427        ))
428    }
429}
430
431impl<
432    II: ParseInput,
433    A: ParseInline<II>,
434    B: ParseInline<II>,
435    C: ParseInline<II>,
436    D: ParseInline<II>,
437    E: ParseInline<II>,
438    F: ParseInline<II>,
439> ParseInline<II> for (A, B, C, D, E, F)
440{
441    fn parse_inline(input: &mut II) -> crate::Result<Self> {
442        Ok((
443            input.parse_inline()?,
444            input.parse_inline()?,
445            input.parse_inline()?,
446            input.parse_inline()?,
447            input.parse_inline()?,
448            input.parse_inline()?,
449        ))
450    }
451}
452
453impl<
454    A: MaybeHasNiche,
455    B: MaybeHasNiche,
456    C: MaybeHasNiche,
457    D: MaybeHasNiche,
458    E: MaybeHasNiche,
459    F: MaybeHasNiche,
460> MaybeHasNiche for (A, B, C, D, E, F)
461{
462    type MnArray = tarr![
463        A::MnArray,
464        B::MnArray,
465        C::MnArray,
466        D::MnArray,
467        E::MnArray,
468        F::MnArray,
469    ];
470}
471
472impl<A: ToOutput, B: ToOutput, C: ToOutput, D: ToOutput, E: ToOutput, F: ToOutput, G: ToOutput>
473    ToOutput for (A, B, C, D, E, F, G)
474{
475    fn to_output(&self, output: &mut dyn Output) {
476        self.0.to_output(output);
477        self.1.to_output(output);
478        self.2.to_output(output);
479        self.3.to_output(output);
480        self.4.to_output(output);
481        self.5.to_output(output);
482        self.6.to_output(output);
483    }
484}
485
486impl<
487    A: Topological,
488    B: Topological,
489    C: Topological,
490    D: Topological,
491    E: Topological,
492    F: Topological,
493    G: Topological,
494> Topological for (A, B, C, D, E, F, G)
495{
496    fn accept_points(&self, visitor: &mut impl PointVisitor) {
497        self.0.accept_points(visitor);
498        self.1.accept_points(visitor);
499        self.2.accept_points(visitor);
500        self.3.accept_points(visitor);
501        self.4.accept_points(visitor);
502        self.5.accept_points(visitor);
503        self.6.accept_points(visitor);
504    }
505}
506
507impl<A: Tagged, B: Tagged, C: Tagged, D: Tagged, E: Tagged, F: Tagged, G: Tagged> Tagged
508    for (A, B, C, D, E, F, G)
509{
510    const TAGS: Tags = Tags(
511        &[],
512        &[
513            &A::TAGS,
514            &B::TAGS,
515            &C::TAGS,
516            &D::TAGS,
517            &E::TAGS,
518            &F::TAGS,
519            &G::TAGS,
520        ],
521    );
522}
523
524impl<
525    Extra: 'static,
526    A: Inline<Extra>,
527    B: Inline<Extra>,
528    C: Inline<Extra>,
529    D: Inline<Extra>,
530    E: Inline<Extra>,
531    F: Inline<Extra>,
532    G: Object<Extra>,
533> Object<Extra> for (A, B, C, D, E, F, G)
534{
535}
536
537impl<
538    Extra: 'static,
539    A: Inline<Extra>,
540    B: Inline<Extra>,
541    C: Inline<Extra>,
542    D: Inline<Extra>,
543    E: Inline<Extra>,
544    F: Inline<Extra>,
545    G: Inline<Extra>,
546> Inline<Extra> for (A, B, C, D, E, F, G)
547{
548}
549
550impl<
551    A: ReflessInline,
552    B: ReflessInline,
553    C: ReflessInline,
554    D: ReflessInline,
555    E: ReflessInline,
556    F: ReflessInline,
557    G: ReflessObject,
558> ReflessObject for (A, B, C, D, E, F, G)
559{
560}
561
562impl<
563    A: ReflessInline,
564    B: ReflessInline,
565    C: ReflessInline,
566    D: ReflessInline,
567    E: ReflessInline,
568    F: ReflessInline,
569    G: ReflessInline,
570> ReflessInline for (A, B, C, D, E, F, G)
571{
572}
573
574impl<A: Size, B: Size, C: Size, D: Size, E: Size, F: Size, G: Size> Size for (A, B, C, D, E, F, G)
575where
576    tarr![
577        A::Size,
578        B::Size,
579        C::Size,
580        D::Size,
581        E::Size,
582        F::Size,
583        G::Size,
584    ]: typenum::FoldAdd<Output: Unsigned>,
585{
586    const SIZE: usize = A::SIZE + B::SIZE + C::SIZE + D::SIZE + E::SIZE + F::SIZE + G::SIZE;
587
588    type Size = <tarr![
589        A::Size,
590        B::Size,
591        C::Size,
592        D::Size,
593        E::Size,
594        F::Size,
595        G::Size,
596    ] as typenum::FoldAdd>::Output;
597}
598
599impl<
600    II: ParseInput,
601    A: ParseInline<II>,
602    B: ParseInline<II>,
603    C: ParseInline<II>,
604    D: ParseInline<II>,
605    E: ParseInline<II>,
606    F: ParseInline<II>,
607    G: Parse<II>,
608> Parse<II> for (A, B, C, D, E, F, G)
609{
610    fn parse(mut input: II) -> crate::Result<Self> {
611        Ok((
612            input.parse_inline()?,
613            input.parse_inline()?,
614            input.parse_inline()?,
615            input.parse_inline()?,
616            input.parse_inline()?,
617            input.parse_inline()?,
618            input.parse()?,
619        ))
620    }
621}
622
623impl<
624    II: ParseInput,
625    A: ParseInline<II>,
626    B: ParseInline<II>,
627    C: ParseInline<II>,
628    D: ParseInline<II>,
629    E: ParseInline<II>,
630    F: ParseInline<II>,
631    G: ParseInline<II>,
632> ParseInline<II> for (A, B, C, D, E, F, G)
633{
634    fn parse_inline(input: &mut II) -> crate::Result<Self> {
635        Ok((
636            input.parse_inline()?,
637            input.parse_inline()?,
638            input.parse_inline()?,
639            input.parse_inline()?,
640            input.parse_inline()?,
641            input.parse_inline()?,
642            input.parse_inline()?,
643        ))
644    }
645}
646
647impl<
648    A: MaybeHasNiche,
649    B: MaybeHasNiche,
650    C: MaybeHasNiche,
651    D: MaybeHasNiche,
652    E: MaybeHasNiche,
653    F: MaybeHasNiche,
654    G: MaybeHasNiche,
655> MaybeHasNiche for (A, B, C, D, E, F, G)
656{
657    type MnArray = tarr![
658        A::MnArray,
659        B::MnArray,
660        C::MnArray,
661        D::MnArray,
662        E::MnArray,
663        F::MnArray,
664        G::MnArray,
665    ];
666}
667
668impl<
669    A: ToOutput,
670    B: ToOutput,
671    C: ToOutput,
672    D: ToOutput,
673    E: ToOutput,
674    F: ToOutput,
675    G: ToOutput,
676    H: ToOutput,
677> ToOutput for (A, B, C, D, E, F, G, H)
678{
679    fn to_output(&self, output: &mut dyn Output) {
680        self.0.to_output(output);
681        self.1.to_output(output);
682        self.2.to_output(output);
683        self.3.to_output(output);
684        self.4.to_output(output);
685        self.5.to_output(output);
686        self.6.to_output(output);
687        self.7.to_output(output);
688    }
689}
690
691impl<
692    A: Topological,
693    B: Topological,
694    C: Topological,
695    D: Topological,
696    E: Topological,
697    F: Topological,
698    G: Topological,
699    H: Topological,
700> Topological for (A, B, C, D, E, F, G, H)
701{
702    fn accept_points(&self, visitor: &mut impl PointVisitor) {
703        self.0.accept_points(visitor);
704        self.1.accept_points(visitor);
705        self.2.accept_points(visitor);
706        self.3.accept_points(visitor);
707        self.4.accept_points(visitor);
708        self.5.accept_points(visitor);
709        self.6.accept_points(visitor);
710        self.7.accept_points(visitor);
711    }
712}
713
714impl<A: Tagged, B: Tagged, C: Tagged, D: Tagged, E: Tagged, F: Tagged, G: Tagged, H: Tagged> Tagged
715    for (A, B, C, D, E, F, G, H)
716{
717    const TAGS: Tags = Tags(
718        &[],
719        &[
720            &A::TAGS,
721            &B::TAGS,
722            &C::TAGS,
723            &D::TAGS,
724            &E::TAGS,
725            &F::TAGS,
726            &G::TAGS,
727            &H::TAGS,
728        ],
729    );
730}
731
732impl<
733    Extra: 'static,
734    A: Inline<Extra>,
735    B: Inline<Extra>,
736    C: Inline<Extra>,
737    D: Inline<Extra>,
738    E: Inline<Extra>,
739    F: Inline<Extra>,
740    G: Inline<Extra>,
741    H: Object<Extra>,
742> Object<Extra> for (A, B, C, D, E, F, G, H)
743{
744}
745
746impl<
747    Extra: 'static,
748    A: Inline<Extra>,
749    B: Inline<Extra>,
750    C: Inline<Extra>,
751    D: Inline<Extra>,
752    E: Inline<Extra>,
753    F: Inline<Extra>,
754    G: Inline<Extra>,
755    H: Inline<Extra>,
756> Inline<Extra> for (A, B, C, D, E, F, G, H)
757{
758}
759
760impl<
761    A: ReflessInline,
762    B: ReflessInline,
763    C: ReflessInline,
764    D: ReflessInline,
765    E: ReflessInline,
766    F: ReflessInline,
767    G: ReflessInline,
768    H: ReflessObject,
769> ReflessObject for (A, B, C, D, E, F, G, H)
770{
771}
772
773impl<
774    A: ReflessInline,
775    B: ReflessInline,
776    C: ReflessInline,
777    D: ReflessInline,
778    E: ReflessInline,
779    F: ReflessInline,
780    G: ReflessInline,
781    H: ReflessInline,
782> ReflessInline for (A, B, C, D, E, F, G, H)
783{
784}
785
786impl<A: Size, B: Size, C: Size, D: Size, E: Size, F: Size, G: Size, H: Size> Size
787    for (A, B, C, D, E, F, G, H)
788where
789    tarr![
790        A::Size,
791        B::Size,
792        C::Size,
793        D::Size,
794        E::Size,
795        F::Size,
796        G::Size,
797        H::Size,
798    ]: typenum::FoldAdd<Output: Unsigned>,
799{
800    const SIZE: usize =
801        A::SIZE + B::SIZE + C::SIZE + D::SIZE + E::SIZE + F::SIZE + G::SIZE + H::SIZE;
802
803    type Size = <tarr![
804        A::Size,
805        B::Size,
806        C::Size,
807        D::Size,
808        E::Size,
809        F::Size,
810        G::Size,
811        H::Size,
812    ] as typenum::FoldAdd>::Output;
813}
814
815impl<
816    II: ParseInput,
817    A: ParseInline<II>,
818    B: ParseInline<II>,
819    C: ParseInline<II>,
820    D: ParseInline<II>,
821    E: ParseInline<II>,
822    F: ParseInline<II>,
823    G: ParseInline<II>,
824    H: Parse<II>,
825> Parse<II> for (A, B, C, D, E, F, G, H)
826{
827    fn parse(mut input: II) -> crate::Result<Self> {
828        Ok((
829            input.parse_inline()?,
830            input.parse_inline()?,
831            input.parse_inline()?,
832            input.parse_inline()?,
833            input.parse_inline()?,
834            input.parse_inline()?,
835            input.parse_inline()?,
836            input.parse()?,
837        ))
838    }
839}
840
841impl<
842    II: ParseInput,
843    A: ParseInline<II>,
844    B: ParseInline<II>,
845    C: ParseInline<II>,
846    D: ParseInline<II>,
847    E: ParseInline<II>,
848    F: ParseInline<II>,
849    G: ParseInline<II>,
850    H: ParseInline<II>,
851> ParseInline<II> for (A, B, C, D, E, F, G, H)
852{
853    fn parse_inline(input: &mut II) -> crate::Result<Self> {
854        Ok((
855            input.parse_inline()?,
856            input.parse_inline()?,
857            input.parse_inline()?,
858            input.parse_inline()?,
859            input.parse_inline()?,
860            input.parse_inline()?,
861            input.parse_inline()?,
862            input.parse_inline()?,
863        ))
864    }
865}
866
867impl<
868    A: MaybeHasNiche,
869    B: MaybeHasNiche,
870    C: MaybeHasNiche,
871    D: MaybeHasNiche,
872    E: MaybeHasNiche,
873    F: MaybeHasNiche,
874    G: MaybeHasNiche,
875    H: MaybeHasNiche,
876> MaybeHasNiche for (A, B, C, D, E, F, G, H)
877{
878    type MnArray = tarr![
879        A::MnArray,
880        B::MnArray,
881        C::MnArray,
882        D::MnArray,
883        E::MnArray,
884        F::MnArray,
885        G::MnArray,
886        H::MnArray,
887    ];
888}
889
890impl<
891    A: ToOutput,
892    B: ToOutput,
893    C: ToOutput,
894    D: ToOutput,
895    E: ToOutput,
896    F: ToOutput,
897    G: ToOutput,
898    H: ToOutput,
899    I: ToOutput,
900> ToOutput for (A, B, C, D, E, F, G, H, I)
901{
902    fn to_output(&self, output: &mut dyn Output) {
903        self.0.to_output(output);
904        self.1.to_output(output);
905        self.2.to_output(output);
906        self.3.to_output(output);
907        self.4.to_output(output);
908        self.5.to_output(output);
909        self.6.to_output(output);
910        self.7.to_output(output);
911        self.8.to_output(output);
912    }
913}
914
915impl<
916    A: Topological,
917    B: Topological,
918    C: Topological,
919    D: Topological,
920    E: Topological,
921    F: Topological,
922    G: Topological,
923    H: Topological,
924    I: Topological,
925> Topological for (A, B, C, D, E, F, G, H, I)
926{
927    fn accept_points(&self, visitor: &mut impl PointVisitor) {
928        self.0.accept_points(visitor);
929        self.1.accept_points(visitor);
930        self.2.accept_points(visitor);
931        self.3.accept_points(visitor);
932        self.4.accept_points(visitor);
933        self.5.accept_points(visitor);
934        self.6.accept_points(visitor);
935        self.7.accept_points(visitor);
936        self.8.accept_points(visitor);
937    }
938}
939
940impl<
941    A: Tagged,
942    B: Tagged,
943    C: Tagged,
944    D: Tagged,
945    E: Tagged,
946    F: Tagged,
947    G: Tagged,
948    H: Tagged,
949    I: Tagged,
950> Tagged for (A, B, C, D, E, F, G, H, I)
951{
952    const TAGS: Tags = Tags(
953        &[],
954        &[
955            &A::TAGS,
956            &B::TAGS,
957            &C::TAGS,
958            &D::TAGS,
959            &E::TAGS,
960            &F::TAGS,
961            &G::TAGS,
962            &H::TAGS,
963            &I::TAGS,
964        ],
965    );
966}
967
968impl<
969    Extra: 'static,
970    A: Inline<Extra>,
971    B: Inline<Extra>,
972    C: Inline<Extra>,
973    D: Inline<Extra>,
974    E: Inline<Extra>,
975    F: Inline<Extra>,
976    G: Inline<Extra>,
977    H: Inline<Extra>,
978    I: Object<Extra>,
979> Object<Extra> for (A, B, C, D, E, F, G, H, I)
980{
981}
982
983impl<
984    Extra: 'static,
985    A: Inline<Extra>,
986    B: Inline<Extra>,
987    C: Inline<Extra>,
988    D: Inline<Extra>,
989    E: Inline<Extra>,
990    F: Inline<Extra>,
991    G: Inline<Extra>,
992    H: Inline<Extra>,
993    I: Inline<Extra>,
994> Inline<Extra> for (A, B, C, D, E, F, G, H, I)
995{
996}
997
998impl<
999    A: ReflessInline,
1000    B: ReflessInline,
1001    C: ReflessInline,
1002    D: ReflessInline,
1003    E: ReflessInline,
1004    F: ReflessInline,
1005    G: ReflessInline,
1006    H: ReflessInline,
1007    I: ReflessObject,
1008> ReflessObject for (A, B, C, D, E, F, G, H, I)
1009{
1010}
1011
1012impl<
1013    A: ReflessInline,
1014    B: ReflessInline,
1015    C: ReflessInline,
1016    D: ReflessInline,
1017    E: ReflessInline,
1018    F: ReflessInline,
1019    G: ReflessInline,
1020    H: ReflessInline,
1021    I: ReflessInline,
1022> ReflessInline for (A, B, C, D, E, F, G, H, I)
1023{
1024}
1025
1026impl<A: Size, B: Size, C: Size, D: Size, E: Size, F: Size, G: Size, H: Size, I: Size> Size
1027    for (A, B, C, D, E, F, G, H, I)
1028where
1029    tarr![
1030        A::Size,
1031        B::Size,
1032        C::Size,
1033        D::Size,
1034        E::Size,
1035        F::Size,
1036        G::Size,
1037        H::Size,
1038        I::Size,
1039    ]: typenum::FoldAdd<Output: Unsigned>,
1040{
1041    const SIZE: usize =
1042        A::SIZE + B::SIZE + C::SIZE + D::SIZE + E::SIZE + F::SIZE + G::SIZE + H::SIZE + I::SIZE;
1043
1044    type Size = <tarr![
1045        A::Size,
1046        B::Size,
1047        C::Size,
1048        D::Size,
1049        E::Size,
1050        F::Size,
1051        G::Size,
1052        H::Size,
1053        I::Size,
1054    ] as typenum::FoldAdd>::Output;
1055}
1056
1057impl<
1058    II: ParseInput,
1059    A: ParseInline<II>,
1060    B: ParseInline<II>,
1061    C: ParseInline<II>,
1062    D: ParseInline<II>,
1063    E: ParseInline<II>,
1064    F: ParseInline<II>,
1065    G: ParseInline<II>,
1066    H: ParseInline<II>,
1067    I: Parse<II>,
1068> Parse<II> for (A, B, C, D, E, F, G, H, I)
1069{
1070    fn parse(mut input: II) -> crate::Result<Self> {
1071        Ok((
1072            input.parse_inline()?,
1073            input.parse_inline()?,
1074            input.parse_inline()?,
1075            input.parse_inline()?,
1076            input.parse_inline()?,
1077            input.parse_inline()?,
1078            input.parse_inline()?,
1079            input.parse_inline()?,
1080            input.parse()?,
1081        ))
1082    }
1083}
1084
1085impl<
1086    II: ParseInput,
1087    A: ParseInline<II>,
1088    B: ParseInline<II>,
1089    C: ParseInline<II>,
1090    D: ParseInline<II>,
1091    E: ParseInline<II>,
1092    F: ParseInline<II>,
1093    G: ParseInline<II>,
1094    H: ParseInline<II>,
1095    I: ParseInline<II>,
1096> ParseInline<II> for (A, B, C, D, E, F, G, H, I)
1097{
1098    fn parse_inline(input: &mut II) -> crate::Result<Self> {
1099        Ok((
1100            input.parse_inline()?,
1101            input.parse_inline()?,
1102            input.parse_inline()?,
1103            input.parse_inline()?,
1104            input.parse_inline()?,
1105            input.parse_inline()?,
1106            input.parse_inline()?,
1107            input.parse_inline()?,
1108            input.parse_inline()?,
1109        ))
1110    }
1111}
1112
1113impl<
1114    A: MaybeHasNiche,
1115    B: MaybeHasNiche,
1116    C: MaybeHasNiche,
1117    D: MaybeHasNiche,
1118    E: MaybeHasNiche,
1119    F: MaybeHasNiche,
1120    G: MaybeHasNiche,
1121    H: MaybeHasNiche,
1122    I: MaybeHasNiche,
1123> MaybeHasNiche for (A, B, C, D, E, F, G, H, I)
1124{
1125    type MnArray = tarr![
1126        A::MnArray,
1127        B::MnArray,
1128        C::MnArray,
1129        D::MnArray,
1130        E::MnArray,
1131        F::MnArray,
1132        G::MnArray,
1133        H::MnArray,
1134        I::MnArray,
1135    ];
1136}
1137
1138impl<
1139    A: ToOutput,
1140    B: ToOutput,
1141    C: ToOutput,
1142    D: ToOutput,
1143    E: ToOutput,
1144    F: ToOutput,
1145    G: ToOutput,
1146    H: ToOutput,
1147    I: ToOutput,
1148    J: ToOutput,
1149> ToOutput for (A, B, C, D, E, F, G, H, I, J)
1150{
1151    fn to_output(&self, output: &mut dyn Output) {
1152        self.0.to_output(output);
1153        self.1.to_output(output);
1154        self.2.to_output(output);
1155        self.3.to_output(output);
1156        self.4.to_output(output);
1157        self.5.to_output(output);
1158        self.6.to_output(output);
1159        self.7.to_output(output);
1160        self.8.to_output(output);
1161        self.9.to_output(output);
1162    }
1163}
1164
1165impl<
1166    A: Topological,
1167    B: Topological,
1168    C: Topological,
1169    D: Topological,
1170    E: Topological,
1171    F: Topological,
1172    G: Topological,
1173    H: Topological,
1174    I: Topological,
1175    J: Topological,
1176> Topological for (A, B, C, D, E, F, G, H, I, J)
1177{
1178    fn accept_points(&self, visitor: &mut impl PointVisitor) {
1179        self.0.accept_points(visitor);
1180        self.1.accept_points(visitor);
1181        self.2.accept_points(visitor);
1182        self.3.accept_points(visitor);
1183        self.4.accept_points(visitor);
1184        self.5.accept_points(visitor);
1185        self.6.accept_points(visitor);
1186        self.7.accept_points(visitor);
1187        self.8.accept_points(visitor);
1188        self.9.accept_points(visitor);
1189    }
1190}
1191
1192impl<
1193    A: Tagged,
1194    B: Tagged,
1195    C: Tagged,
1196    D: Tagged,
1197    E: Tagged,
1198    F: Tagged,
1199    G: Tagged,
1200    H: Tagged,
1201    I: Tagged,
1202    J: Tagged,
1203> Tagged for (A, B, C, D, E, F, G, H, I, J)
1204{
1205    const TAGS: Tags = Tags(
1206        &[],
1207        &[
1208            &A::TAGS,
1209            &B::TAGS,
1210            &C::TAGS,
1211            &D::TAGS,
1212            &E::TAGS,
1213            &F::TAGS,
1214            &G::TAGS,
1215            &H::TAGS,
1216            &I::TAGS,
1217            &J::TAGS,
1218        ],
1219    );
1220}
1221
1222impl<
1223    Extra: 'static,
1224    A: Inline<Extra>,
1225    B: Inline<Extra>,
1226    C: Inline<Extra>,
1227    D: Inline<Extra>,
1228    E: Inline<Extra>,
1229    F: Inline<Extra>,
1230    G: Inline<Extra>,
1231    H: Inline<Extra>,
1232    I: Inline<Extra>,
1233    J: Object<Extra>,
1234> Object<Extra> for (A, B, C, D, E, F, G, H, I, J)
1235{
1236}
1237
1238impl<
1239    Extra: 'static,
1240    A: Inline<Extra>,
1241    B: Inline<Extra>,
1242    C: Inline<Extra>,
1243    D: Inline<Extra>,
1244    E: Inline<Extra>,
1245    F: Inline<Extra>,
1246    G: Inline<Extra>,
1247    H: Inline<Extra>,
1248    I: Inline<Extra>,
1249    J: Inline<Extra>,
1250> Inline<Extra> for (A, B, C, D, E, F, G, H, I, J)
1251{
1252}
1253
1254impl<
1255    A: ReflessInline,
1256    B: ReflessInline,
1257    C: ReflessInline,
1258    D: ReflessInline,
1259    E: ReflessInline,
1260    F: ReflessInline,
1261    G: ReflessInline,
1262    H: ReflessInline,
1263    I: ReflessInline,
1264    J: ReflessObject,
1265> ReflessObject for (A, B, C, D, E, F, G, H, I, J)
1266{
1267}
1268
1269impl<
1270    A: ReflessInline,
1271    B: ReflessInline,
1272    C: ReflessInline,
1273    D: ReflessInline,
1274    E: ReflessInline,
1275    F: ReflessInline,
1276    G: ReflessInline,
1277    H: ReflessInline,
1278    I: ReflessInline,
1279    J: ReflessInline,
1280> ReflessInline for (A, B, C, D, E, F, G, H, I, J)
1281{
1282}
1283
1284impl<A: Size, B: Size, C: Size, D: Size, E: Size, F: Size, G: Size, H: Size, I: Size, J: Size> Size
1285    for (A, B, C, D, E, F, G, H, I, J)
1286where
1287    tarr![
1288        A::Size,
1289        B::Size,
1290        C::Size,
1291        D::Size,
1292        E::Size,
1293        F::Size,
1294        G::Size,
1295        H::Size,
1296        I::Size,
1297        J::Size,
1298    ]: typenum::FoldAdd<Output: Unsigned>,
1299{
1300    const SIZE: usize = A::SIZE
1301        + B::SIZE
1302        + C::SIZE
1303        + D::SIZE
1304        + E::SIZE
1305        + F::SIZE
1306        + G::SIZE
1307        + H::SIZE
1308        + I::SIZE
1309        + J::SIZE;
1310
1311    type Size = <tarr![
1312        A::Size,
1313        B::Size,
1314        C::Size,
1315        D::Size,
1316        E::Size,
1317        F::Size,
1318        G::Size,
1319        H::Size,
1320        I::Size,
1321        J::Size,
1322    ] as typenum::FoldAdd>::Output;
1323}
1324
1325impl<
1326    II: ParseInput,
1327    A: ParseInline<II>,
1328    B: ParseInline<II>,
1329    C: ParseInline<II>,
1330    D: ParseInline<II>,
1331    E: ParseInline<II>,
1332    F: ParseInline<II>,
1333    G: ParseInline<II>,
1334    H: ParseInline<II>,
1335    I: ParseInline<II>,
1336    J: Parse<II>,
1337> Parse<II> for (A, B, C, D, E, F, G, H, I, J)
1338{
1339    fn parse(mut input: II) -> crate::Result<Self> {
1340        Ok((
1341            input.parse_inline()?,
1342            input.parse_inline()?,
1343            input.parse_inline()?,
1344            input.parse_inline()?,
1345            input.parse_inline()?,
1346            input.parse_inline()?,
1347            input.parse_inline()?,
1348            input.parse_inline()?,
1349            input.parse_inline()?,
1350            input.parse()?,
1351        ))
1352    }
1353}
1354
1355impl<
1356    II: ParseInput,
1357    A: ParseInline<II>,
1358    B: ParseInline<II>,
1359    C: ParseInline<II>,
1360    D: ParseInline<II>,
1361    E: ParseInline<II>,
1362    F: ParseInline<II>,
1363    G: ParseInline<II>,
1364    H: ParseInline<II>,
1365    I: ParseInline<II>,
1366    J: ParseInline<II>,
1367> ParseInline<II> for (A, B, C, D, E, F, G, H, I, J)
1368{
1369    fn parse_inline(input: &mut II) -> crate::Result<Self> {
1370        Ok((
1371            input.parse_inline()?,
1372            input.parse_inline()?,
1373            input.parse_inline()?,
1374            input.parse_inline()?,
1375            input.parse_inline()?,
1376            input.parse_inline()?,
1377            input.parse_inline()?,
1378            input.parse_inline()?,
1379            input.parse_inline()?,
1380            input.parse_inline()?,
1381        ))
1382    }
1383}
1384
1385impl<
1386    A: MaybeHasNiche,
1387    B: MaybeHasNiche,
1388    C: MaybeHasNiche,
1389    D: MaybeHasNiche,
1390    E: MaybeHasNiche,
1391    F: MaybeHasNiche,
1392    G: MaybeHasNiche,
1393    H: MaybeHasNiche,
1394    I: MaybeHasNiche,
1395    J: MaybeHasNiche,
1396> MaybeHasNiche for (A, B, C, D, E, F, G, H, I, J)
1397{
1398    type MnArray = tarr![
1399        A::MnArray,
1400        B::MnArray,
1401        C::MnArray,
1402        D::MnArray,
1403        E::MnArray,
1404        F::MnArray,
1405        G::MnArray,
1406        H::MnArray,
1407        I::MnArray,
1408        J::MnArray,
1409    ];
1410}
1411
1412impl<
1413    A: ToOutput,
1414    B: ToOutput,
1415    C: ToOutput,
1416    D: ToOutput,
1417    E: ToOutput,
1418    F: ToOutput,
1419    G: ToOutput,
1420    H: ToOutput,
1421    I: ToOutput,
1422    J: ToOutput,
1423    K: ToOutput,
1424> ToOutput for (A, B, C, D, E, F, G, H, I, J, K)
1425{
1426    fn to_output(&self, output: &mut dyn Output) {
1427        self.0.to_output(output);
1428        self.1.to_output(output);
1429        self.2.to_output(output);
1430        self.3.to_output(output);
1431        self.4.to_output(output);
1432        self.5.to_output(output);
1433        self.6.to_output(output);
1434        self.7.to_output(output);
1435        self.8.to_output(output);
1436        self.9.to_output(output);
1437        self.10.to_output(output);
1438    }
1439}
1440
1441impl<
1442    A: Topological,
1443    B: Topological,
1444    C: Topological,
1445    D: Topological,
1446    E: Topological,
1447    F: Topological,
1448    G: Topological,
1449    H: Topological,
1450    I: Topological,
1451    J: Topological,
1452    K: Topological,
1453> Topological for (A, B, C, D, E, F, G, H, I, J, K)
1454{
1455    fn accept_points(&self, visitor: &mut impl PointVisitor) {
1456        self.0.accept_points(visitor);
1457        self.1.accept_points(visitor);
1458        self.2.accept_points(visitor);
1459        self.3.accept_points(visitor);
1460        self.4.accept_points(visitor);
1461        self.5.accept_points(visitor);
1462        self.6.accept_points(visitor);
1463        self.7.accept_points(visitor);
1464        self.8.accept_points(visitor);
1465        self.9.accept_points(visitor);
1466        self.10.accept_points(visitor);
1467    }
1468}
1469
1470impl<
1471    A: Tagged,
1472    B: Tagged,
1473    C: Tagged,
1474    D: Tagged,
1475    E: Tagged,
1476    F: Tagged,
1477    G: Tagged,
1478    H: Tagged,
1479    I: Tagged,
1480    J: Tagged,
1481    K: Tagged,
1482> Tagged for (A, B, C, D, E, F, G, H, I, J, K)
1483{
1484    const TAGS: Tags = Tags(
1485        &[],
1486        &[
1487            &A::TAGS,
1488            &B::TAGS,
1489            &C::TAGS,
1490            &D::TAGS,
1491            &E::TAGS,
1492            &F::TAGS,
1493            &G::TAGS,
1494            &H::TAGS,
1495            &I::TAGS,
1496            &J::TAGS,
1497            &K::TAGS,
1498        ],
1499    );
1500}
1501
1502impl<
1503    Extra: 'static,
1504    A: Inline<Extra>,
1505    B: Inline<Extra>,
1506    C: Inline<Extra>,
1507    D: Inline<Extra>,
1508    E: Inline<Extra>,
1509    F: Inline<Extra>,
1510    G: Inline<Extra>,
1511    H: Inline<Extra>,
1512    I: Inline<Extra>,
1513    J: Inline<Extra>,
1514    K: Object<Extra>,
1515> Object<Extra> for (A, B, C, D, E, F, G, H, I, J, K)
1516{
1517}
1518
1519impl<
1520    Extra: 'static,
1521    A: Inline<Extra>,
1522    B: Inline<Extra>,
1523    C: Inline<Extra>,
1524    D: Inline<Extra>,
1525    E: Inline<Extra>,
1526    F: Inline<Extra>,
1527    G: Inline<Extra>,
1528    H: Inline<Extra>,
1529    I: Inline<Extra>,
1530    J: Inline<Extra>,
1531    K: Inline<Extra>,
1532> Inline<Extra> for (A, B, C, D, E, F, G, H, I, J, K)
1533{
1534}
1535
1536impl<
1537    A: ReflessInline,
1538    B: ReflessInline,
1539    C: ReflessInline,
1540    D: ReflessInline,
1541    E: ReflessInline,
1542    F: ReflessInline,
1543    G: ReflessInline,
1544    H: ReflessInline,
1545    I: ReflessInline,
1546    J: ReflessInline,
1547    K: ReflessObject,
1548> ReflessObject for (A, B, C, D, E, F, G, H, I, J, K)
1549{
1550}
1551
1552impl<
1553    A: ReflessInline,
1554    B: ReflessInline,
1555    C: ReflessInline,
1556    D: ReflessInline,
1557    E: ReflessInline,
1558    F: ReflessInline,
1559    G: ReflessInline,
1560    H: ReflessInline,
1561    I: ReflessInline,
1562    J: ReflessInline,
1563    K: ReflessInline,
1564> ReflessInline for (A, B, C, D, E, F, G, H, I, J, K)
1565{
1566}
1567
1568impl<
1569    A: Size,
1570    B: Size,
1571    C: Size,
1572    D: Size,
1573    E: Size,
1574    F: Size,
1575    G: Size,
1576    H: Size,
1577    I: Size,
1578    J: Size,
1579    K: Size,
1580> Size for (A, B, C, D, E, F, G, H, I, J, K)
1581where
1582    tarr![
1583        A::Size,
1584        B::Size,
1585        C::Size,
1586        D::Size,
1587        E::Size,
1588        F::Size,
1589        G::Size,
1590        H::Size,
1591        I::Size,
1592        J::Size,
1593        K::Size,
1594    ]: typenum::FoldAdd<Output: Unsigned>,
1595{
1596    const SIZE: usize = A::SIZE
1597        + B::SIZE
1598        + C::SIZE
1599        + D::SIZE
1600        + E::SIZE
1601        + F::SIZE
1602        + G::SIZE
1603        + H::SIZE
1604        + I::SIZE
1605        + J::SIZE
1606        + K::SIZE;
1607
1608    type Size = <tarr![
1609        A::Size,
1610        B::Size,
1611        C::Size,
1612        D::Size,
1613        E::Size,
1614        F::Size,
1615        G::Size,
1616        H::Size,
1617        I::Size,
1618        J::Size,
1619        K::Size,
1620    ] as typenum::FoldAdd>::Output;
1621}
1622
1623impl<
1624    II: ParseInput,
1625    A: ParseInline<II>,
1626    B: ParseInline<II>,
1627    C: ParseInline<II>,
1628    D: ParseInline<II>,
1629    E: ParseInline<II>,
1630    F: ParseInline<II>,
1631    G: ParseInline<II>,
1632    H: ParseInline<II>,
1633    I: ParseInline<II>,
1634    J: ParseInline<II>,
1635    K: Parse<II>,
1636> Parse<II> for (A, B, C, D, E, F, G, H, I, J, K)
1637{
1638    fn parse(mut input: II) -> crate::Result<Self> {
1639        Ok((
1640            input.parse_inline()?,
1641            input.parse_inline()?,
1642            input.parse_inline()?,
1643            input.parse_inline()?,
1644            input.parse_inline()?,
1645            input.parse_inline()?,
1646            input.parse_inline()?,
1647            input.parse_inline()?,
1648            input.parse_inline()?,
1649            input.parse_inline()?,
1650            input.parse()?,
1651        ))
1652    }
1653}
1654
1655impl<
1656    II: ParseInput,
1657    A: ParseInline<II>,
1658    B: ParseInline<II>,
1659    C: ParseInline<II>,
1660    D: ParseInline<II>,
1661    E: ParseInline<II>,
1662    F: ParseInline<II>,
1663    G: ParseInline<II>,
1664    H: ParseInline<II>,
1665    I: ParseInline<II>,
1666    J: ParseInline<II>,
1667    K: ParseInline<II>,
1668> ParseInline<II> for (A, B, C, D, E, F, G, H, I, J, K)
1669{
1670    fn parse_inline(input: &mut II) -> crate::Result<Self> {
1671        Ok((
1672            input.parse_inline()?,
1673            input.parse_inline()?,
1674            input.parse_inline()?,
1675            input.parse_inline()?,
1676            input.parse_inline()?,
1677            input.parse_inline()?,
1678            input.parse_inline()?,
1679            input.parse_inline()?,
1680            input.parse_inline()?,
1681            input.parse_inline()?,
1682            input.parse_inline()?,
1683        ))
1684    }
1685}
1686
1687impl<
1688    A: MaybeHasNiche,
1689    B: MaybeHasNiche,
1690    C: MaybeHasNiche,
1691    D: MaybeHasNiche,
1692    E: MaybeHasNiche,
1693    F: MaybeHasNiche,
1694    G: MaybeHasNiche,
1695    H: MaybeHasNiche,
1696    I: MaybeHasNiche,
1697    J: MaybeHasNiche,
1698    K: MaybeHasNiche,
1699> MaybeHasNiche for (A, B, C, D, E, F, G, H, I, J, K)
1700{
1701    type MnArray = tarr![
1702        A::MnArray,
1703        B::MnArray,
1704        C::MnArray,
1705        D::MnArray,
1706        E::MnArray,
1707        F::MnArray,
1708        G::MnArray,
1709        H::MnArray,
1710        I::MnArray,
1711        J::MnArray,
1712        K::MnArray,
1713    ];
1714}
1715
1716impl<
1717    A: ToOutput,
1718    B: ToOutput,
1719    C: ToOutput,
1720    D: ToOutput,
1721    E: ToOutput,
1722    F: ToOutput,
1723    G: ToOutput,
1724    H: ToOutput,
1725    I: ToOutput,
1726    J: ToOutput,
1727    K: ToOutput,
1728    L: ToOutput,
1729> ToOutput for (A, B, C, D, E, F, G, H, I, J, K, L)
1730{
1731    fn to_output(&self, output: &mut dyn Output) {
1732        self.0.to_output(output);
1733        self.1.to_output(output);
1734        self.2.to_output(output);
1735        self.3.to_output(output);
1736        self.4.to_output(output);
1737        self.5.to_output(output);
1738        self.6.to_output(output);
1739        self.7.to_output(output);
1740        self.8.to_output(output);
1741        self.9.to_output(output);
1742        self.10.to_output(output);
1743        self.11.to_output(output);
1744    }
1745}
1746
1747impl<
1748    A: Topological,
1749    B: Topological,
1750    C: Topological,
1751    D: Topological,
1752    E: Topological,
1753    F: Topological,
1754    G: Topological,
1755    H: Topological,
1756    I: Topological,
1757    J: Topological,
1758    K: Topological,
1759    L: Topological,
1760> Topological for (A, B, C, D, E, F, G, H, I, J, K, L)
1761{
1762    fn accept_points(&self, visitor: &mut impl PointVisitor) {
1763        self.0.accept_points(visitor);
1764        self.1.accept_points(visitor);
1765        self.2.accept_points(visitor);
1766        self.3.accept_points(visitor);
1767        self.4.accept_points(visitor);
1768        self.5.accept_points(visitor);
1769        self.6.accept_points(visitor);
1770        self.7.accept_points(visitor);
1771        self.8.accept_points(visitor);
1772        self.9.accept_points(visitor);
1773        self.10.accept_points(visitor);
1774        self.11.accept_points(visitor);
1775    }
1776}
1777
1778impl<
1779    A: Tagged,
1780    B: Tagged,
1781    C: Tagged,
1782    D: Tagged,
1783    E: Tagged,
1784    F: Tagged,
1785    G: Tagged,
1786    H: Tagged,
1787    I: Tagged,
1788    J: Tagged,
1789    K: Tagged,
1790    L: Tagged,
1791> Tagged for (A, B, C, D, E, F, G, H, I, J, K, L)
1792{
1793    const TAGS: Tags = Tags(
1794        &[],
1795        &[
1796            &A::TAGS,
1797            &B::TAGS,
1798            &C::TAGS,
1799            &D::TAGS,
1800            &E::TAGS,
1801            &F::TAGS,
1802            &G::TAGS,
1803            &H::TAGS,
1804            &I::TAGS,
1805            &J::TAGS,
1806            &K::TAGS,
1807            &L::TAGS,
1808        ],
1809    );
1810}
1811
1812impl<
1813    Extra: 'static,
1814    A: Inline<Extra>,
1815    B: Inline<Extra>,
1816    C: Inline<Extra>,
1817    D: Inline<Extra>,
1818    E: Inline<Extra>,
1819    F: Inline<Extra>,
1820    G: Inline<Extra>,
1821    H: Inline<Extra>,
1822    I: Inline<Extra>,
1823    J: Inline<Extra>,
1824    K: Inline<Extra>,
1825    L: Object<Extra>,
1826> Object<Extra> for (A, B, C, D, E, F, G, H, I, J, K, L)
1827{
1828}
1829
1830impl<
1831    Extra: 'static,
1832    A: Inline<Extra>,
1833    B: Inline<Extra>,
1834    C: Inline<Extra>,
1835    D: Inline<Extra>,
1836    E: Inline<Extra>,
1837    F: Inline<Extra>,
1838    G: Inline<Extra>,
1839    H: Inline<Extra>,
1840    I: Inline<Extra>,
1841    J: Inline<Extra>,
1842    K: Inline<Extra>,
1843    L: Inline<Extra>,
1844> Inline<Extra> for (A, B, C, D, E, F, G, H, I, J, K, L)
1845{
1846}
1847
1848impl<
1849    A: ReflessInline,
1850    B: ReflessInline,
1851    C: ReflessInline,
1852    D: ReflessInline,
1853    E: ReflessInline,
1854    F: ReflessInline,
1855    G: ReflessInline,
1856    H: ReflessInline,
1857    I: ReflessInline,
1858    J: ReflessInline,
1859    K: ReflessInline,
1860    L: ReflessObject,
1861> ReflessObject for (A, B, C, D, E, F, G, H, I, J, K, L)
1862{
1863}
1864
1865impl<
1866    A: ReflessInline,
1867    B: ReflessInline,
1868    C: ReflessInline,
1869    D: ReflessInline,
1870    E: ReflessInline,
1871    F: ReflessInline,
1872    G: ReflessInline,
1873    H: ReflessInline,
1874    I: ReflessInline,
1875    J: ReflessInline,
1876    K: ReflessInline,
1877    L: ReflessInline,
1878> ReflessInline for (A, B, C, D, E, F, G, H, I, J, K, L)
1879{
1880}
1881
1882impl<
1883    A: Size,
1884    B: Size,
1885    C: Size,
1886    D: Size,
1887    E: Size,
1888    F: Size,
1889    G: Size,
1890    H: Size,
1891    I: Size,
1892    J: Size,
1893    K: Size,
1894    L: Size,
1895> Size for (A, B, C, D, E, F, G, H, I, J, K, L)
1896where
1897    tarr![
1898        A::Size,
1899        B::Size,
1900        C::Size,
1901        D::Size,
1902        E::Size,
1903        F::Size,
1904        G::Size,
1905        H::Size,
1906        I::Size,
1907        J::Size,
1908        K::Size,
1909        L::Size,
1910    ]: typenum::FoldAdd<Output: Unsigned>,
1911{
1912    const SIZE: usize = A::SIZE
1913        + B::SIZE
1914        + C::SIZE
1915        + D::SIZE
1916        + E::SIZE
1917        + F::SIZE
1918        + G::SIZE
1919        + H::SIZE
1920        + I::SIZE
1921        + J::SIZE
1922        + K::SIZE
1923        + L::SIZE;
1924
1925    type Size = <tarr![
1926        A::Size,
1927        B::Size,
1928        C::Size,
1929        D::Size,
1930        E::Size,
1931        F::Size,
1932        G::Size,
1933        H::Size,
1934        I::Size,
1935        J::Size,
1936        K::Size,
1937        L::Size,
1938    ] as typenum::FoldAdd>::Output;
1939}
1940
1941impl<
1942    II: ParseInput,
1943    A: ParseInline<II>,
1944    B: ParseInline<II>,
1945    C: ParseInline<II>,
1946    D: ParseInline<II>,
1947    E: ParseInline<II>,
1948    F: ParseInline<II>,
1949    G: ParseInline<II>,
1950    H: ParseInline<II>,
1951    I: ParseInline<II>,
1952    J: ParseInline<II>,
1953    K: ParseInline<II>,
1954    L: Parse<II>,
1955> Parse<II> for (A, B, C, D, E, F, G, H, I, J, K, L)
1956{
1957    fn parse(mut input: II) -> crate::Result<Self> {
1958        Ok((
1959            input.parse_inline()?,
1960            input.parse_inline()?,
1961            input.parse_inline()?,
1962            input.parse_inline()?,
1963            input.parse_inline()?,
1964            input.parse_inline()?,
1965            input.parse_inline()?,
1966            input.parse_inline()?,
1967            input.parse_inline()?,
1968            input.parse_inline()?,
1969            input.parse_inline()?,
1970            input.parse()?,
1971        ))
1972    }
1973}
1974
1975impl<
1976    II: ParseInput,
1977    A: ParseInline<II>,
1978    B: ParseInline<II>,
1979    C: ParseInline<II>,
1980    D: ParseInline<II>,
1981    E: ParseInline<II>,
1982    F: ParseInline<II>,
1983    G: ParseInline<II>,
1984    H: ParseInline<II>,
1985    I: ParseInline<II>,
1986    J: ParseInline<II>,
1987    K: ParseInline<II>,
1988    L: ParseInline<II>,
1989> ParseInline<II> for (A, B, C, D, E, F, G, H, I, J, K, L)
1990{
1991    fn parse_inline(input: &mut II) -> crate::Result<Self> {
1992        Ok((
1993            input.parse_inline()?,
1994            input.parse_inline()?,
1995            input.parse_inline()?,
1996            input.parse_inline()?,
1997            input.parse_inline()?,
1998            input.parse_inline()?,
1999            input.parse_inline()?,
2000            input.parse_inline()?,
2001            input.parse_inline()?,
2002            input.parse_inline()?,
2003            input.parse_inline()?,
2004            input.parse_inline()?,
2005        ))
2006    }
2007}
2008
2009impl<
2010    A: MaybeHasNiche,
2011    B: MaybeHasNiche,
2012    C: MaybeHasNiche,
2013    D: MaybeHasNiche,
2014    E: MaybeHasNiche,
2015    F: MaybeHasNiche,
2016    G: MaybeHasNiche,
2017    H: MaybeHasNiche,
2018    I: MaybeHasNiche,
2019    J: MaybeHasNiche,
2020    K: MaybeHasNiche,
2021    L: MaybeHasNiche,
2022> MaybeHasNiche for (A, B, C, D, E, F, G, H, I, J, K, L)
2023{
2024    type MnArray = tarr![
2025        A::MnArray,
2026        B::MnArray,
2027        C::MnArray,
2028        D::MnArray,
2029        E::MnArray,
2030        F::MnArray,
2031        G::MnArray,
2032        H::MnArray,
2033        I::MnArray,
2034        J::MnArray,
2035        K::MnArray,
2036        L::MnArray,
2037    ];
2038}