@@ -37,34 +37,13 @@ struct Ctx<'a> {
37
37
}
38
38
39
39
fn init < ' a > ( max : usize , t : & ' a Ident , u : & ' a Ident ) -> Ctx < ' a > {
40
- let size_lits = ( 0 ..max + 1 )
41
- . into_iter ( )
42
- . map ( |i| LitInt :: new ( i. to_string ( ) . as_str ( ) , Span :: call_site ( ) ) )
43
- . collect :: < Vec < _ > > ( ) ;
40
+ let size_lits = ( 0 ..max + 1 ) . into_iter ( ) . map ( |i| LitInt :: new ( i. to_string ( ) . as_str ( ) , Span :: call_site ( ) ) ) . collect :: < Vec < _ > > ( ) ;
44
41
let ts = ( 0 ..max + 1 ) . into_iter ( ) . map ( |_| t) . collect :: < Vec < _ > > ( ) ;
45
42
let us = ( 0 ..max + 1 ) . into_iter ( ) . map ( |_| u) . collect :: < Vec < _ > > ( ) ;
46
- let nts = ( 0 ..max + 1 )
47
- . into_iter ( )
48
- . map ( |i| format_ident ! ( "T{}" , i) )
49
- . collect :: < Vec < _ > > ( ) ;
50
- let nvs = ( 0 ..max + 1 )
51
- . into_iter ( )
52
- . map ( |i| format_ident ! ( "v{}" , i) )
53
- . collect :: < Vec < _ > > ( ) ;
54
- let ants = nts[ 0 ..max + 1 ]
55
- . iter ( )
56
- . map ( |i| quote ! { #i: ' a } )
57
- . collect :: < Vec < _ > > ( ) ;
58
- let ctx = Ctx {
59
- t,
60
- u,
61
- size_lits,
62
- ts,
63
- us,
64
- nts,
65
- nvs,
66
- ants,
67
- } ;
43
+ let nts = ( 0 ..max + 1 ) . into_iter ( ) . map ( |i| format_ident ! ( "T{}" , i) ) . collect :: < Vec < _ > > ( ) ;
44
+ let nvs = ( 0 ..max + 1 ) . into_iter ( ) . map ( |i| format_ident ! ( "v{}" , i) ) . collect :: < Vec < _ > > ( ) ;
45
+ let ants = nts[ 0 ..max + 1 ] . iter ( ) . map ( |i| quote ! { #i: ' a } ) . collect :: < Vec < _ > > ( ) ;
46
+ let ctx = Ctx { t, u, size_lits, ts, us, nts, nvs, ants } ;
68
47
ctx
69
48
}
70
49
@@ -94,13 +73,8 @@ fn gen_tuple_impl_size(ctx: &Ctx, size: usize) -> TokenStream {
94
73
}
95
74
96
75
fn gen_tuple_n_impl ( ctx : & Ctx , out_dir : & Path ) {
97
- let item_names = ( 0 ..34usize )
98
- . into_iter ( )
99
- . map ( |i| format_ident ! ( "Item{}" , i) )
100
- . collect :: < Vec < _ > > ( ) ;
101
- let items = ( 2 ..33usize )
102
- . into_iter ( )
103
- . map ( |i| gen_tuple_n_impl_size ( ctx, i, & item_names[ 0 ..i] ) ) ;
76
+ let item_names = ( 0 ..34usize ) . into_iter ( ) . map ( |i| format_ident ! ( "Item{}" , i) ) . collect :: < Vec < _ > > ( ) ;
77
+ let items = ( 2 ..33usize ) . into_iter ( ) . map ( |i| gen_tuple_n_impl_size ( ctx, i, & item_names[ 0 ..i] ) ) ;
104
78
let tks = quote ! { #( #items) * } ;
105
79
let code = tks. to_string ( ) ;
106
80
let dest_path = Path :: new ( out_dir) . join ( "tuple_n.rs" ) ;
@@ -224,10 +198,7 @@ fn gen_tuple_alias_macro_size(ctx: &Ctx, size: usize) -> TokenStream {
224
198
let ty = quote ! { $t } ;
225
199
let tys = ( 0 ..size) . into_iter ( ) . map ( |_| & ty) . collect :: < Vec < _ > > ( ) ;
226
200
227
- let ntys = ( 0 ..size + 1 )
228
- . map ( |i| format_ident ! ( "t{}" , i) )
229
- . map ( |i| quote ! { $#i } )
230
- . collect :: < Vec < _ > > ( ) ;
201
+ let ntys = ( 0 ..size + 1 ) . map ( |i| format_ident ! ( "t{}" , i) ) . map ( |i| quote ! { $#i } ) . collect :: < Vec < _ > > ( ) ;
231
202
232
203
let items = ( 0 ..size + 1 ) . map ( |i| gen_tuple_alias_macro_size_n ( ctx, size, i, & ntys) ) ;
233
204
@@ -239,20 +210,12 @@ fn gen_tuple_alias_macro_size(ctx: &Ctx, size: usize) -> TokenStream {
239
210
tks
240
211
}
241
212
242
- fn gen_tuple_alias_macro_size_n (
243
- ctx : & Ctx ,
244
- size : usize ,
245
- n : usize ,
246
- ntys : & [ TokenStream ] ,
247
- ) -> TokenStream {
213
+ fn gen_tuple_alias_macro_size_n ( ctx : & Ctx , size : usize , n : usize , ntys : & [ TokenStream ] ) -> TokenStream {
248
214
let size_lit = & ctx. size_lits [ size] ;
249
215
250
216
let u = quote ! { _ } ;
251
217
let nntys = & ntys[ 0 ..n] ;
252
- let tys = ntys[ 0 ..size]
253
- . iter ( )
254
- . enumerate ( )
255
- . map ( |( i, l) | if i < n { l } else { & u } ) ;
218
+ let tys = ntys[ 0 ..size] . iter ( ) . enumerate ( ) . map ( |( i, l) | if i < n { l } else { & u } ) ;
256
219
257
220
let tks = quote ! {
258
221
{ #size_lit; #( #nntys: ty) , * } => { ( #( #tys) , * ) } ;
@@ -441,13 +404,7 @@ fn gen_tuple_map(ctx: &Ctx, out_dir: &Path) {
441
404
}
442
405
443
406
fn gen_tuple_map_size ( ctx : & Ctx , size : usize ) -> TokenStream {
444
- let items = if size > 16 {
445
- vec ! [ ]
446
- } else {
447
- ( 0 ..size)
448
- . map ( |n| gen_tuple_map_n_size ( ctx, size, n) )
449
- . collect ( )
450
- } ;
407
+ let items = if size > 16 { vec ! [ ] } else { ( 0 ..size) . map ( |n| gen_tuple_map_n_size ( ctx, size, n) ) . collect ( ) } ;
451
408
452
409
let map_name = format_ident ! ( "Tuple{}Map" , size) ;
453
410
@@ -480,11 +437,7 @@ fn gen_tuple_map_n_size(ctx: &Ctx, size: usize, n: usize) -> TokenStream {
480
437
let map_n = format_ident ! ( "map{}" , n) ;
481
438
482
439
let rts = & ctx. nts [ 0 ..size] ;
483
- let ts = ctx. nts [ 0 ..size]
484
- . iter ( )
485
- . enumerate ( )
486
- . map ( |( i, l) | if i == n { ctx. u } else { l } )
487
- . collect :: < Vec < _ > > ( ) ;
440
+ let ts = ctx. nts [ 0 ..size] . iter ( ) . enumerate ( ) . map ( |( i, l) | if i == n { ctx. u } else { l } ) . collect :: < Vec < _ > > ( ) ;
488
441
489
442
let impls = ctx. size_lits [ 0 ..size] . iter ( ) . enumerate ( ) . map ( |( i, l) | {
490
443
if i == n {
@@ -512,16 +465,8 @@ fn gen_tuple_map_n_size(ctx: &Ctx, size: usize, n: usize) -> TokenStream {
512
465
}
513
466
514
467
fn gen_combin ( ctx : & Ctx , out_dir : & Path ) {
515
- let self_impl = ctx
516
- . size_lits
517
- . iter ( )
518
- . map ( |i| quote ! { self . #i } )
519
- . collect :: < Vec < _ > > ( ) ;
520
- let target_impl = ctx
521
- . size_lits
522
- . iter ( )
523
- . map ( |i| quote ! { target. #i } )
524
- . collect :: < Vec < _ > > ( ) ;
468
+ let self_impl = ctx. size_lits . iter ( ) . map ( |i| quote ! { self . #i } ) . collect :: < Vec < _ > > ( ) ;
469
+ let target_impl = ctx. size_lits . iter ( ) . map ( |i| quote ! { target. #i } ) . collect :: < Vec < _ > > ( ) ;
525
470
let items = ( 2 ..33usize ) . map ( |i| gen_combin_size ( ctx, i) ) ;
526
471
let concats = ( 0 ..17usize ) . flat_map ( |a| {
527
472
let self_impl = & self_impl;
@@ -560,22 +505,14 @@ fn gen_combin_size(ctx: &Ctx, size: usize) -> TokenStream {
560
505
tks
561
506
}
562
507
563
- fn gen_combin_concat_size (
564
- ctx : & Ctx ,
565
- sizea : usize ,
566
- sizeb : usize ,
567
- self_impl : & [ TokenStream ] ,
568
- target_impl : & [ TokenStream ] ,
569
- ) -> TokenStream {
508
+ fn gen_combin_concat_size ( ctx : & Ctx , sizea : usize , sizeb : usize , self_impl : & [ TokenStream ] , target_impl : & [ TokenStream ] ) -> TokenStream {
570
509
let ants = & ctx. nts [ 0 ..sizea] ;
571
510
let bnts = & ctx. nts [ sizea..sizea + sizeb] ;
572
511
let gnts = & ctx. nts [ 0 ..sizea + sizeb] ;
573
512
let atc = tif ! { ants. len( ) == 1 => quote! { , } ; quote! { } } ;
574
513
let btc = tif ! { bnts. len( ) == 1 => quote! { , } ; quote! { } } ;
575
514
let gtc = tif ! { gnts. len( ) == 1 => quote! { , } ; quote! { } } ;
576
- let impls = self_impl[ 0 ..sizea]
577
- . iter ( )
578
- . chain ( target_impl[ 0 ..sizeb] . iter ( ) ) ;
515
+ let impls = self_impl[ 0 ..sizea] . iter ( ) . chain ( target_impl[ 0 ..sizeb] . iter ( ) ) ;
579
516
let tks = quote ! {
580
517
impl <#( #gnts) , * > CombinConcat <( #( #bnts) , * #btc) > for ( #( #ants) , * #atc) {
581
518
type Out = ( #( #gnts) , * #gtc) ;
@@ -590,11 +527,7 @@ fn gen_combin_concat_size(
590
527
}
591
528
592
529
fn gen_transpose ( ctx : & Ctx , out_dir : & Path ) {
593
- let none_impl = ctx
594
- . size_lits
595
- . iter ( )
596
- . map ( |_| quote ! { None } )
597
- . collect :: < Vec < _ > > ( ) ;
530
+ let none_impl = ctx. size_lits . iter ( ) . map ( |_| quote ! { None } ) . collect :: < Vec < _ > > ( ) ;
598
531
let items_1 = ( 2 ..33usize ) . map ( |i| gen_transpose_size_option_1 ( ctx, i, & none_impl[ 0 ..i] ) ) ;
599
532
let items_2 = ( 2 ..33usize ) . map ( |i| gen_transpose_size_option_2 ( ctx, i) ) ;
600
533
let items_3 = ( 2 ..33usize ) . map ( |i| gen_transpose_size_result ( ctx, i) ) ;
@@ -643,9 +576,7 @@ fn gen_transpose_size_option_2(ctx: &Ctx, size: usize) -> TokenStream {
643
576
644
577
fn gen_transpose_size_result ( ctx : & Ctx , size : usize ) -> TokenStream {
645
578
let nts = & ctx. nts [ 0 ..size] ;
646
- let ents = ( 0 ..size)
647
- . map ( |i| format_ident ! ( "E{}" , i) )
648
- . collect :: < Vec < _ > > ( ) ;
579
+ let ents = ( 0 ..size) . map ( |i| format_ident ! ( "E{}" , i) ) . collect :: < Vec < _ > > ( ) ;
649
580
let nvs = & ctx. nvs [ 0 ..size] ;
650
581
let tks = quote ! {
651
582
impl <Eo : #( From <#ents>) +* , #( #ents, #nts) , * > TupleTransposeResult <Eo > for ( #( Result <#nts, #ents>) , * ) {
@@ -702,15 +633,8 @@ fn gen_flatten_size(ctx: &Ctx, size: usize) -> TokenStream {
702
633
fn gen_flatten_size_n ( ctx : & Ctx , size : usize , n : usize ) -> TokenStream {
703
634
let nct = tif ! { n == 1 => quote! { , } ; quote! { } } ;
704
635
let nts = & ctx. nts [ 0 ..size * n] ;
705
- let nnts = ( 0 ..size * n)
706
- . step_by ( n)
707
- . map ( |i| & nts[ i..i + n] )
708
- . map ( |nts| quote ! { ( #( #nts) , * #nct) } ) ;
709
- let nnimpl = ctx. size_lits [ 0 ..size] . iter ( ) . flat_map ( |i| {
710
- ctx. size_lits [ 0 ..n]
711
- . iter ( )
712
- . map ( move |n| quote ! { ( self . #i) . #n } )
713
- } ) ;
636
+ let nnts = ( 0 ..size * n) . step_by ( n) . map ( |i| & nts[ i..i + n] ) . map ( |nts| quote ! { ( #( #nts) , * #nct) } ) ;
637
+ let nnimpl = ctx. size_lits [ 0 ..size] . iter ( ) . flat_map ( |i| ctx. size_lits [ 0 ..n] . iter ( ) . map ( move |n| quote ! { ( self . #i) . #n } ) ) ;
714
638
let tks = quote ! {
715
639
impl <#( #nts) , * > TupleFlatten for ( #( #nnts) , * ) {
716
640
type OutTuple = ( #( #nts) , * ) ;
0 commit comments