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