Imported Upstream version 1.41.0
[platform/upstream/grpc.git] / src / core / lib / promise / detail / switch.h
1 /*
2  * Copyright 2021 gRPC authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 /*
18  * Automatically generated by tools/codegen/core/gen_switch.py
19  */
20
21 #ifndef GRPC_CORE_LIB_PROMISE_DETAIL_SWITCH_H
22 #define GRPC_CORE_LIB_PROMISE_DETAIL_SWITCH_H
23
24 #include <grpc/impl/codegen/port_platform.h>
25
26 #include <stdlib.h>
27
28 namespace grpc_core {
29
30 template <typename R, typename F0>
31 R Switch(char idx, F0 f0) {
32   switch (idx) {
33     case 0:
34       return f0();
35   }
36   abort();
37 }
38
39 template <typename R, typename F0, typename F1>
40 R Switch(char idx, F0 f0, F1 f1) {
41   switch (idx) {
42     case 0:
43       return f0();
44     case 1:
45       return f1();
46   }
47   abort();
48 }
49
50 template <typename R, typename F0, typename F1, typename F2>
51 R Switch(char idx, F0 f0, F1 f1, F2 f2) {
52   switch (idx) {
53     case 0:
54       return f0();
55     case 1:
56       return f1();
57     case 2:
58       return f2();
59   }
60   abort();
61 }
62
63 template <typename R, typename F0, typename F1, typename F2, typename F3>
64 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3) {
65   switch (idx) {
66     case 0:
67       return f0();
68     case 1:
69       return f1();
70     case 2:
71       return f2();
72     case 3:
73       return f3();
74   }
75   abort();
76 }
77
78 template <typename R, typename F0, typename F1, typename F2, typename F3,
79           typename F4>
80 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4) {
81   switch (idx) {
82     case 0:
83       return f0();
84     case 1:
85       return f1();
86     case 2:
87       return f2();
88     case 3:
89       return f3();
90     case 4:
91       return f4();
92   }
93   abort();
94 }
95
96 template <typename R, typename F0, typename F1, typename F2, typename F3,
97           typename F4, typename F5>
98 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5) {
99   switch (idx) {
100     case 0:
101       return f0();
102     case 1:
103       return f1();
104     case 2:
105       return f2();
106     case 3:
107       return f3();
108     case 4:
109       return f4();
110     case 5:
111       return f5();
112   }
113   abort();
114 }
115
116 template <typename R, typename F0, typename F1, typename F2, typename F3,
117           typename F4, typename F5, typename F6>
118 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6) {
119   switch (idx) {
120     case 0:
121       return f0();
122     case 1:
123       return f1();
124     case 2:
125       return f2();
126     case 3:
127       return f3();
128     case 4:
129       return f4();
130     case 5:
131       return f5();
132     case 6:
133       return f6();
134   }
135   abort();
136 }
137
138 template <typename R, typename F0, typename F1, typename F2, typename F3,
139           typename F4, typename F5, typename F6, typename F7>
140 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7) {
141   switch (idx) {
142     case 0:
143       return f0();
144     case 1:
145       return f1();
146     case 2:
147       return f2();
148     case 3:
149       return f3();
150     case 4:
151       return f4();
152     case 5:
153       return f5();
154     case 6:
155       return f6();
156     case 7:
157       return f7();
158   }
159   abort();
160 }
161
162 template <typename R, typename F0, typename F1, typename F2, typename F3,
163           typename F4, typename F5, typename F6, typename F7, typename F8>
164 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
165          F8 f8) {
166   switch (idx) {
167     case 0:
168       return f0();
169     case 1:
170       return f1();
171     case 2:
172       return f2();
173     case 3:
174       return f3();
175     case 4:
176       return f4();
177     case 5:
178       return f5();
179     case 6:
180       return f6();
181     case 7:
182       return f7();
183     case 8:
184       return f8();
185   }
186   abort();
187 }
188
189 template <typename R, typename F0, typename F1, typename F2, typename F3,
190           typename F4, typename F5, typename F6, typename F7, typename F8,
191           typename F9>
192 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
193          F8 f8, F9 f9) {
194   switch (idx) {
195     case 0:
196       return f0();
197     case 1:
198       return f1();
199     case 2:
200       return f2();
201     case 3:
202       return f3();
203     case 4:
204       return f4();
205     case 5:
206       return f5();
207     case 6:
208       return f6();
209     case 7:
210       return f7();
211     case 8:
212       return f8();
213     case 9:
214       return f9();
215   }
216   abort();
217 }
218
219 template <typename R, typename F0, typename F1, typename F2, typename F3,
220           typename F4, typename F5, typename F6, typename F7, typename F8,
221           typename F9, typename F10>
222 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
223          F8 f8, F9 f9, F10 f10) {
224   switch (idx) {
225     case 0:
226       return f0();
227     case 1:
228       return f1();
229     case 2:
230       return f2();
231     case 3:
232       return f3();
233     case 4:
234       return f4();
235     case 5:
236       return f5();
237     case 6:
238       return f6();
239     case 7:
240       return f7();
241     case 8:
242       return f8();
243     case 9:
244       return f9();
245     case 10:
246       return f10();
247   }
248   abort();
249 }
250
251 template <typename R, typename F0, typename F1, typename F2, typename F3,
252           typename F4, typename F5, typename F6, typename F7, typename F8,
253           typename F9, typename F10, typename F11>
254 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
255          F8 f8, F9 f9, F10 f10, F11 f11) {
256   switch (idx) {
257     case 0:
258       return f0();
259     case 1:
260       return f1();
261     case 2:
262       return f2();
263     case 3:
264       return f3();
265     case 4:
266       return f4();
267     case 5:
268       return f5();
269     case 6:
270       return f6();
271     case 7:
272       return f7();
273     case 8:
274       return f8();
275     case 9:
276       return f9();
277     case 10:
278       return f10();
279     case 11:
280       return f11();
281   }
282   abort();
283 }
284
285 template <typename R, typename F0, typename F1, typename F2, typename F3,
286           typename F4, typename F5, typename F6, typename F7, typename F8,
287           typename F9, typename F10, typename F11, typename F12>
288 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
289          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12) {
290   switch (idx) {
291     case 0:
292       return f0();
293     case 1:
294       return f1();
295     case 2:
296       return f2();
297     case 3:
298       return f3();
299     case 4:
300       return f4();
301     case 5:
302       return f5();
303     case 6:
304       return f6();
305     case 7:
306       return f7();
307     case 8:
308       return f8();
309     case 9:
310       return f9();
311     case 10:
312       return f10();
313     case 11:
314       return f11();
315     case 12:
316       return f12();
317   }
318   abort();
319 }
320
321 template <typename R, typename F0, typename F1, typename F2, typename F3,
322           typename F4, typename F5, typename F6, typename F7, typename F8,
323           typename F9, typename F10, typename F11, typename F12, typename F13>
324 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
325          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13) {
326   switch (idx) {
327     case 0:
328       return f0();
329     case 1:
330       return f1();
331     case 2:
332       return f2();
333     case 3:
334       return f3();
335     case 4:
336       return f4();
337     case 5:
338       return f5();
339     case 6:
340       return f6();
341     case 7:
342       return f7();
343     case 8:
344       return f8();
345     case 9:
346       return f9();
347     case 10:
348       return f10();
349     case 11:
350       return f11();
351     case 12:
352       return f12();
353     case 13:
354       return f13();
355   }
356   abort();
357 }
358
359 template <typename R, typename F0, typename F1, typename F2, typename F3,
360           typename F4, typename F5, typename F6, typename F7, typename F8,
361           typename F9, typename F10, typename F11, typename F12, typename F13,
362           typename F14>
363 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
364          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14) {
365   switch (idx) {
366     case 0:
367       return f0();
368     case 1:
369       return f1();
370     case 2:
371       return f2();
372     case 3:
373       return f3();
374     case 4:
375       return f4();
376     case 5:
377       return f5();
378     case 6:
379       return f6();
380     case 7:
381       return f7();
382     case 8:
383       return f8();
384     case 9:
385       return f9();
386     case 10:
387       return f10();
388     case 11:
389       return f11();
390     case 12:
391       return f12();
392     case 13:
393       return f13();
394     case 14:
395       return f14();
396   }
397   abort();
398 }
399
400 template <typename R, typename F0, typename F1, typename F2, typename F3,
401           typename F4, typename F5, typename F6, typename F7, typename F8,
402           typename F9, typename F10, typename F11, typename F12, typename F13,
403           typename F14, typename F15>
404 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
405          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15) {
406   switch (idx) {
407     case 0:
408       return f0();
409     case 1:
410       return f1();
411     case 2:
412       return f2();
413     case 3:
414       return f3();
415     case 4:
416       return f4();
417     case 5:
418       return f5();
419     case 6:
420       return f6();
421     case 7:
422       return f7();
423     case 8:
424       return f8();
425     case 9:
426       return f9();
427     case 10:
428       return f10();
429     case 11:
430       return f11();
431     case 12:
432       return f12();
433     case 13:
434       return f13();
435     case 14:
436       return f14();
437     case 15:
438       return f15();
439   }
440   abort();
441 }
442
443 template <typename R, typename F0, typename F1, typename F2, typename F3,
444           typename F4, typename F5, typename F6, typename F7, typename F8,
445           typename F9, typename F10, typename F11, typename F12, typename F13,
446           typename F14, typename F15, typename F16>
447 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
448          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
449          F16 f16) {
450   switch (idx) {
451     case 0:
452       return f0();
453     case 1:
454       return f1();
455     case 2:
456       return f2();
457     case 3:
458       return f3();
459     case 4:
460       return f4();
461     case 5:
462       return f5();
463     case 6:
464       return f6();
465     case 7:
466       return f7();
467     case 8:
468       return f8();
469     case 9:
470       return f9();
471     case 10:
472       return f10();
473     case 11:
474       return f11();
475     case 12:
476       return f12();
477     case 13:
478       return f13();
479     case 14:
480       return f14();
481     case 15:
482       return f15();
483     case 16:
484       return f16();
485   }
486   abort();
487 }
488
489 template <typename R, typename F0, typename F1, typename F2, typename F3,
490           typename F4, typename F5, typename F6, typename F7, typename F8,
491           typename F9, typename F10, typename F11, typename F12, typename F13,
492           typename F14, typename F15, typename F16, typename F17>
493 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
494          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
495          F16 f16, F17 f17) {
496   switch (idx) {
497     case 0:
498       return f0();
499     case 1:
500       return f1();
501     case 2:
502       return f2();
503     case 3:
504       return f3();
505     case 4:
506       return f4();
507     case 5:
508       return f5();
509     case 6:
510       return f6();
511     case 7:
512       return f7();
513     case 8:
514       return f8();
515     case 9:
516       return f9();
517     case 10:
518       return f10();
519     case 11:
520       return f11();
521     case 12:
522       return f12();
523     case 13:
524       return f13();
525     case 14:
526       return f14();
527     case 15:
528       return f15();
529     case 16:
530       return f16();
531     case 17:
532       return f17();
533   }
534   abort();
535 }
536
537 template <typename R, typename F0, typename F1, typename F2, typename F3,
538           typename F4, typename F5, typename F6, typename F7, typename F8,
539           typename F9, typename F10, typename F11, typename F12, typename F13,
540           typename F14, typename F15, typename F16, typename F17, typename F18>
541 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
542          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
543          F16 f16, F17 f17, F18 f18) {
544   switch (idx) {
545     case 0:
546       return f0();
547     case 1:
548       return f1();
549     case 2:
550       return f2();
551     case 3:
552       return f3();
553     case 4:
554       return f4();
555     case 5:
556       return f5();
557     case 6:
558       return f6();
559     case 7:
560       return f7();
561     case 8:
562       return f8();
563     case 9:
564       return f9();
565     case 10:
566       return f10();
567     case 11:
568       return f11();
569     case 12:
570       return f12();
571     case 13:
572       return f13();
573     case 14:
574       return f14();
575     case 15:
576       return f15();
577     case 16:
578       return f16();
579     case 17:
580       return f17();
581     case 18:
582       return f18();
583   }
584   abort();
585 }
586
587 template <typename R, typename F0, typename F1, typename F2, typename F3,
588           typename F4, typename F5, typename F6, typename F7, typename F8,
589           typename F9, typename F10, typename F11, typename F12, typename F13,
590           typename F14, typename F15, typename F16, typename F17, typename F18,
591           typename F19>
592 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
593          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
594          F16 f16, F17 f17, F18 f18, F19 f19) {
595   switch (idx) {
596     case 0:
597       return f0();
598     case 1:
599       return f1();
600     case 2:
601       return f2();
602     case 3:
603       return f3();
604     case 4:
605       return f4();
606     case 5:
607       return f5();
608     case 6:
609       return f6();
610     case 7:
611       return f7();
612     case 8:
613       return f8();
614     case 9:
615       return f9();
616     case 10:
617       return f10();
618     case 11:
619       return f11();
620     case 12:
621       return f12();
622     case 13:
623       return f13();
624     case 14:
625       return f14();
626     case 15:
627       return f15();
628     case 16:
629       return f16();
630     case 17:
631       return f17();
632     case 18:
633       return f18();
634     case 19:
635       return f19();
636   }
637   abort();
638 }
639
640 template <typename R, typename F0, typename F1, typename F2, typename F3,
641           typename F4, typename F5, typename F6, typename F7, typename F8,
642           typename F9, typename F10, typename F11, typename F12, typename F13,
643           typename F14, typename F15, typename F16, typename F17, typename F18,
644           typename F19, typename F20>
645 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
646          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
647          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20) {
648   switch (idx) {
649     case 0:
650       return f0();
651     case 1:
652       return f1();
653     case 2:
654       return f2();
655     case 3:
656       return f3();
657     case 4:
658       return f4();
659     case 5:
660       return f5();
661     case 6:
662       return f6();
663     case 7:
664       return f7();
665     case 8:
666       return f8();
667     case 9:
668       return f9();
669     case 10:
670       return f10();
671     case 11:
672       return f11();
673     case 12:
674       return f12();
675     case 13:
676       return f13();
677     case 14:
678       return f14();
679     case 15:
680       return f15();
681     case 16:
682       return f16();
683     case 17:
684       return f17();
685     case 18:
686       return f18();
687     case 19:
688       return f19();
689     case 20:
690       return f20();
691   }
692   abort();
693 }
694
695 template <typename R, typename F0, typename F1, typename F2, typename F3,
696           typename F4, typename F5, typename F6, typename F7, typename F8,
697           typename F9, typename F10, typename F11, typename F12, typename F13,
698           typename F14, typename F15, typename F16, typename F17, typename F18,
699           typename F19, typename F20, typename F21>
700 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
701          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
702          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20, F21 f21) {
703   switch (idx) {
704     case 0:
705       return f0();
706     case 1:
707       return f1();
708     case 2:
709       return f2();
710     case 3:
711       return f3();
712     case 4:
713       return f4();
714     case 5:
715       return f5();
716     case 6:
717       return f6();
718     case 7:
719       return f7();
720     case 8:
721       return f8();
722     case 9:
723       return f9();
724     case 10:
725       return f10();
726     case 11:
727       return f11();
728     case 12:
729       return f12();
730     case 13:
731       return f13();
732     case 14:
733       return f14();
734     case 15:
735       return f15();
736     case 16:
737       return f16();
738     case 17:
739       return f17();
740     case 18:
741       return f18();
742     case 19:
743       return f19();
744     case 20:
745       return f20();
746     case 21:
747       return f21();
748   }
749   abort();
750 }
751
752 template <typename R, typename F0, typename F1, typename F2, typename F3,
753           typename F4, typename F5, typename F6, typename F7, typename F8,
754           typename F9, typename F10, typename F11, typename F12, typename F13,
755           typename F14, typename F15, typename F16, typename F17, typename F18,
756           typename F19, typename F20, typename F21, typename F22>
757 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
758          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
759          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20, F21 f21, F22 f22) {
760   switch (idx) {
761     case 0:
762       return f0();
763     case 1:
764       return f1();
765     case 2:
766       return f2();
767     case 3:
768       return f3();
769     case 4:
770       return f4();
771     case 5:
772       return f5();
773     case 6:
774       return f6();
775     case 7:
776       return f7();
777     case 8:
778       return f8();
779     case 9:
780       return f9();
781     case 10:
782       return f10();
783     case 11:
784       return f11();
785     case 12:
786       return f12();
787     case 13:
788       return f13();
789     case 14:
790       return f14();
791     case 15:
792       return f15();
793     case 16:
794       return f16();
795     case 17:
796       return f17();
797     case 18:
798       return f18();
799     case 19:
800       return f19();
801     case 20:
802       return f20();
803     case 21:
804       return f21();
805     case 22:
806       return f22();
807   }
808   abort();
809 }
810
811 template <typename R, typename F0, typename F1, typename F2, typename F3,
812           typename F4, typename F5, typename F6, typename F7, typename F8,
813           typename F9, typename F10, typename F11, typename F12, typename F13,
814           typename F14, typename F15, typename F16, typename F17, typename F18,
815           typename F19, typename F20, typename F21, typename F22, typename F23>
816 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
817          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
818          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20, F21 f21, F22 f22,
819          F23 f23) {
820   switch (idx) {
821     case 0:
822       return f0();
823     case 1:
824       return f1();
825     case 2:
826       return f2();
827     case 3:
828       return f3();
829     case 4:
830       return f4();
831     case 5:
832       return f5();
833     case 6:
834       return f6();
835     case 7:
836       return f7();
837     case 8:
838       return f8();
839     case 9:
840       return f9();
841     case 10:
842       return f10();
843     case 11:
844       return f11();
845     case 12:
846       return f12();
847     case 13:
848       return f13();
849     case 14:
850       return f14();
851     case 15:
852       return f15();
853     case 16:
854       return f16();
855     case 17:
856       return f17();
857     case 18:
858       return f18();
859     case 19:
860       return f19();
861     case 20:
862       return f20();
863     case 21:
864       return f21();
865     case 22:
866       return f22();
867     case 23:
868       return f23();
869   }
870   abort();
871 }
872
873 template <typename R, typename F0, typename F1, typename F2, typename F3,
874           typename F4, typename F5, typename F6, typename F7, typename F8,
875           typename F9, typename F10, typename F11, typename F12, typename F13,
876           typename F14, typename F15, typename F16, typename F17, typename F18,
877           typename F19, typename F20, typename F21, typename F22, typename F23,
878           typename F24>
879 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
880          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
881          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20, F21 f21, F22 f22, F23 f23,
882          F24 f24) {
883   switch (idx) {
884     case 0:
885       return f0();
886     case 1:
887       return f1();
888     case 2:
889       return f2();
890     case 3:
891       return f3();
892     case 4:
893       return f4();
894     case 5:
895       return f5();
896     case 6:
897       return f6();
898     case 7:
899       return f7();
900     case 8:
901       return f8();
902     case 9:
903       return f9();
904     case 10:
905       return f10();
906     case 11:
907       return f11();
908     case 12:
909       return f12();
910     case 13:
911       return f13();
912     case 14:
913       return f14();
914     case 15:
915       return f15();
916     case 16:
917       return f16();
918     case 17:
919       return f17();
920     case 18:
921       return f18();
922     case 19:
923       return f19();
924     case 20:
925       return f20();
926     case 21:
927       return f21();
928     case 22:
929       return f22();
930     case 23:
931       return f23();
932     case 24:
933       return f24();
934   }
935   abort();
936 }
937
938 template <typename R, typename F0, typename F1, typename F2, typename F3,
939           typename F4, typename F5, typename F6, typename F7, typename F8,
940           typename F9, typename F10, typename F11, typename F12, typename F13,
941           typename F14, typename F15, typename F16, typename F17, typename F18,
942           typename F19, typename F20, typename F21, typename F22, typename F23,
943           typename F24, typename F25>
944 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
945          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
946          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20, F21 f21, F22 f22, F23 f23,
947          F24 f24, F25 f25) {
948   switch (idx) {
949     case 0:
950       return f0();
951     case 1:
952       return f1();
953     case 2:
954       return f2();
955     case 3:
956       return f3();
957     case 4:
958       return f4();
959     case 5:
960       return f5();
961     case 6:
962       return f6();
963     case 7:
964       return f7();
965     case 8:
966       return f8();
967     case 9:
968       return f9();
969     case 10:
970       return f10();
971     case 11:
972       return f11();
973     case 12:
974       return f12();
975     case 13:
976       return f13();
977     case 14:
978       return f14();
979     case 15:
980       return f15();
981     case 16:
982       return f16();
983     case 17:
984       return f17();
985     case 18:
986       return f18();
987     case 19:
988       return f19();
989     case 20:
990       return f20();
991     case 21:
992       return f21();
993     case 22:
994       return f22();
995     case 23:
996       return f23();
997     case 24:
998       return f24();
999     case 25:
1000       return f25();
1001   }
1002   abort();
1003 }
1004
1005 template <typename R, typename F0, typename F1, typename F2, typename F3,
1006           typename F4, typename F5, typename F6, typename F7, typename F8,
1007           typename F9, typename F10, typename F11, typename F12, typename F13,
1008           typename F14, typename F15, typename F16, typename F17, typename F18,
1009           typename F19, typename F20, typename F21, typename F22, typename F23,
1010           typename F24, typename F25, typename F26>
1011 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
1012          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
1013          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20, F21 f21, F22 f22, F23 f23,
1014          F24 f24, F25 f25, F26 f26) {
1015   switch (idx) {
1016     case 0:
1017       return f0();
1018     case 1:
1019       return f1();
1020     case 2:
1021       return f2();
1022     case 3:
1023       return f3();
1024     case 4:
1025       return f4();
1026     case 5:
1027       return f5();
1028     case 6:
1029       return f6();
1030     case 7:
1031       return f7();
1032     case 8:
1033       return f8();
1034     case 9:
1035       return f9();
1036     case 10:
1037       return f10();
1038     case 11:
1039       return f11();
1040     case 12:
1041       return f12();
1042     case 13:
1043       return f13();
1044     case 14:
1045       return f14();
1046     case 15:
1047       return f15();
1048     case 16:
1049       return f16();
1050     case 17:
1051       return f17();
1052     case 18:
1053       return f18();
1054     case 19:
1055       return f19();
1056     case 20:
1057       return f20();
1058     case 21:
1059       return f21();
1060     case 22:
1061       return f22();
1062     case 23:
1063       return f23();
1064     case 24:
1065       return f24();
1066     case 25:
1067       return f25();
1068     case 26:
1069       return f26();
1070   }
1071   abort();
1072 }
1073
1074 template <typename R, typename F0, typename F1, typename F2, typename F3,
1075           typename F4, typename F5, typename F6, typename F7, typename F8,
1076           typename F9, typename F10, typename F11, typename F12, typename F13,
1077           typename F14, typename F15, typename F16, typename F17, typename F18,
1078           typename F19, typename F20, typename F21, typename F22, typename F23,
1079           typename F24, typename F25, typename F26, typename F27>
1080 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
1081          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
1082          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20, F21 f21, F22 f22, F23 f23,
1083          F24 f24, F25 f25, F26 f26, F27 f27) {
1084   switch (idx) {
1085     case 0:
1086       return f0();
1087     case 1:
1088       return f1();
1089     case 2:
1090       return f2();
1091     case 3:
1092       return f3();
1093     case 4:
1094       return f4();
1095     case 5:
1096       return f5();
1097     case 6:
1098       return f6();
1099     case 7:
1100       return f7();
1101     case 8:
1102       return f8();
1103     case 9:
1104       return f9();
1105     case 10:
1106       return f10();
1107     case 11:
1108       return f11();
1109     case 12:
1110       return f12();
1111     case 13:
1112       return f13();
1113     case 14:
1114       return f14();
1115     case 15:
1116       return f15();
1117     case 16:
1118       return f16();
1119     case 17:
1120       return f17();
1121     case 18:
1122       return f18();
1123     case 19:
1124       return f19();
1125     case 20:
1126       return f20();
1127     case 21:
1128       return f21();
1129     case 22:
1130       return f22();
1131     case 23:
1132       return f23();
1133     case 24:
1134       return f24();
1135     case 25:
1136       return f25();
1137     case 26:
1138       return f26();
1139     case 27:
1140       return f27();
1141   }
1142   abort();
1143 }
1144
1145 template <typename R, typename F0, typename F1, typename F2, typename F3,
1146           typename F4, typename F5, typename F6, typename F7, typename F8,
1147           typename F9, typename F10, typename F11, typename F12, typename F13,
1148           typename F14, typename F15, typename F16, typename F17, typename F18,
1149           typename F19, typename F20, typename F21, typename F22, typename F23,
1150           typename F24, typename F25, typename F26, typename F27, typename F28>
1151 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
1152          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
1153          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20, F21 f21, F22 f22, F23 f23,
1154          F24 f24, F25 f25, F26 f26, F27 f27, F28 f28) {
1155   switch (idx) {
1156     case 0:
1157       return f0();
1158     case 1:
1159       return f1();
1160     case 2:
1161       return f2();
1162     case 3:
1163       return f3();
1164     case 4:
1165       return f4();
1166     case 5:
1167       return f5();
1168     case 6:
1169       return f6();
1170     case 7:
1171       return f7();
1172     case 8:
1173       return f8();
1174     case 9:
1175       return f9();
1176     case 10:
1177       return f10();
1178     case 11:
1179       return f11();
1180     case 12:
1181       return f12();
1182     case 13:
1183       return f13();
1184     case 14:
1185       return f14();
1186     case 15:
1187       return f15();
1188     case 16:
1189       return f16();
1190     case 17:
1191       return f17();
1192     case 18:
1193       return f18();
1194     case 19:
1195       return f19();
1196     case 20:
1197       return f20();
1198     case 21:
1199       return f21();
1200     case 22:
1201       return f22();
1202     case 23:
1203       return f23();
1204     case 24:
1205       return f24();
1206     case 25:
1207       return f25();
1208     case 26:
1209       return f26();
1210     case 27:
1211       return f27();
1212     case 28:
1213       return f28();
1214   }
1215   abort();
1216 }
1217
1218 template <typename R, typename F0, typename F1, typename F2, typename F3,
1219           typename F4, typename F5, typename F6, typename F7, typename F8,
1220           typename F9, typename F10, typename F11, typename F12, typename F13,
1221           typename F14, typename F15, typename F16, typename F17, typename F18,
1222           typename F19, typename F20, typename F21, typename F22, typename F23,
1223           typename F24, typename F25, typename F26, typename F27, typename F28,
1224           typename F29>
1225 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
1226          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
1227          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20, F21 f21, F22 f22, F23 f23,
1228          F24 f24, F25 f25, F26 f26, F27 f27, F28 f28, F29 f29) {
1229   switch (idx) {
1230     case 0:
1231       return f0();
1232     case 1:
1233       return f1();
1234     case 2:
1235       return f2();
1236     case 3:
1237       return f3();
1238     case 4:
1239       return f4();
1240     case 5:
1241       return f5();
1242     case 6:
1243       return f6();
1244     case 7:
1245       return f7();
1246     case 8:
1247       return f8();
1248     case 9:
1249       return f9();
1250     case 10:
1251       return f10();
1252     case 11:
1253       return f11();
1254     case 12:
1255       return f12();
1256     case 13:
1257       return f13();
1258     case 14:
1259       return f14();
1260     case 15:
1261       return f15();
1262     case 16:
1263       return f16();
1264     case 17:
1265       return f17();
1266     case 18:
1267       return f18();
1268     case 19:
1269       return f19();
1270     case 20:
1271       return f20();
1272     case 21:
1273       return f21();
1274     case 22:
1275       return f22();
1276     case 23:
1277       return f23();
1278     case 24:
1279       return f24();
1280     case 25:
1281       return f25();
1282     case 26:
1283       return f26();
1284     case 27:
1285       return f27();
1286     case 28:
1287       return f28();
1288     case 29:
1289       return f29();
1290   }
1291   abort();
1292 }
1293
1294 template <typename R, typename F0, typename F1, typename F2, typename F3,
1295           typename F4, typename F5, typename F6, typename F7, typename F8,
1296           typename F9, typename F10, typename F11, typename F12, typename F13,
1297           typename F14, typename F15, typename F16, typename F17, typename F18,
1298           typename F19, typename F20, typename F21, typename F22, typename F23,
1299           typename F24, typename F25, typename F26, typename F27, typename F28,
1300           typename F29, typename F30>
1301 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
1302          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
1303          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20, F21 f21, F22 f22, F23 f23,
1304          F24 f24, F25 f25, F26 f26, F27 f27, F28 f28, F29 f29, F30 f30) {
1305   switch (idx) {
1306     case 0:
1307       return f0();
1308     case 1:
1309       return f1();
1310     case 2:
1311       return f2();
1312     case 3:
1313       return f3();
1314     case 4:
1315       return f4();
1316     case 5:
1317       return f5();
1318     case 6:
1319       return f6();
1320     case 7:
1321       return f7();
1322     case 8:
1323       return f8();
1324     case 9:
1325       return f9();
1326     case 10:
1327       return f10();
1328     case 11:
1329       return f11();
1330     case 12:
1331       return f12();
1332     case 13:
1333       return f13();
1334     case 14:
1335       return f14();
1336     case 15:
1337       return f15();
1338     case 16:
1339       return f16();
1340     case 17:
1341       return f17();
1342     case 18:
1343       return f18();
1344     case 19:
1345       return f19();
1346     case 20:
1347       return f20();
1348     case 21:
1349       return f21();
1350     case 22:
1351       return f22();
1352     case 23:
1353       return f23();
1354     case 24:
1355       return f24();
1356     case 25:
1357       return f25();
1358     case 26:
1359       return f26();
1360     case 27:
1361       return f27();
1362     case 28:
1363       return f28();
1364     case 29:
1365       return f29();
1366     case 30:
1367       return f30();
1368   }
1369   abort();
1370 }
1371
1372 template <typename R, typename F0, typename F1, typename F2, typename F3,
1373           typename F4, typename F5, typename F6, typename F7, typename F8,
1374           typename F9, typename F10, typename F11, typename F12, typename F13,
1375           typename F14, typename F15, typename F16, typename F17, typename F18,
1376           typename F19, typename F20, typename F21, typename F22, typename F23,
1377           typename F24, typename F25, typename F26, typename F27, typename F28,
1378           typename F29, typename F30, typename F31>
1379 R Switch(char idx, F0 f0, F1 f1, F2 f2, F3 f3, F4 f4, F5 f5, F6 f6, F7 f7,
1380          F8 f8, F9 f9, F10 f10, F11 f11, F12 f12, F13 f13, F14 f14, F15 f15,
1381          F16 f16, F17 f17, F18 f18, F19 f19, F20 f20, F21 f21, F22 f22, F23 f23,
1382          F24 f24, F25 f25, F26 f26, F27 f27, F28 f28, F29 f29, F30 f30,
1383          F31 f31) {
1384   switch (idx) {
1385     case 0:
1386       return f0();
1387     case 1:
1388       return f1();
1389     case 2:
1390       return f2();
1391     case 3:
1392       return f3();
1393     case 4:
1394       return f4();
1395     case 5:
1396       return f5();
1397     case 6:
1398       return f6();
1399     case 7:
1400       return f7();
1401     case 8:
1402       return f8();
1403     case 9:
1404       return f9();
1405     case 10:
1406       return f10();
1407     case 11:
1408       return f11();
1409     case 12:
1410       return f12();
1411     case 13:
1412       return f13();
1413     case 14:
1414       return f14();
1415     case 15:
1416       return f15();
1417     case 16:
1418       return f16();
1419     case 17:
1420       return f17();
1421     case 18:
1422       return f18();
1423     case 19:
1424       return f19();
1425     case 20:
1426       return f20();
1427     case 21:
1428       return f21();
1429     case 22:
1430       return f22();
1431     case 23:
1432       return f23();
1433     case 24:
1434       return f24();
1435     case 25:
1436       return f25();
1437     case 26:
1438       return f26();
1439     case 27:
1440       return f27();
1441     case 28:
1442       return f28();
1443     case 29:
1444       return f29();
1445     case 30:
1446       return f30();
1447     case 31:
1448       return f31();
1449   }
1450   abort();
1451 }
1452
1453 }  // namespace grpc_core
1454
1455 #endif  // GRPC_CORE_LIB_PROMISE_DETAIL_SWITCH_H