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