1
- use core:: mem:: { forget, transmute_copy} ;
2
-
3
1
use crate :: { array:: Array , primitive:: Primitive } ;
4
2
5
3
pub trait Tuple : Primitive {
@@ -38,14 +36,14 @@ impl<T> HomogeneousTuple<T> for () {
38
36
#[ cfg_attr( docsrs, doc( fake_variadic) ) ]
39
37
#[ cfg_attr(
40
38
docsrs,
41
- doc = "This trait is implemented for tuples up to 16 items long."
39
+ doc = "This trait is implemented for tuples up to 12 items long."
42
40
) ]
43
41
impl < T1 : ?Sized > Primitive for ( T1 , ) { }
44
42
45
43
#[ cfg_attr( docsrs, doc( fake_variadic) ) ]
46
44
#[ cfg_attr(
47
45
docsrs,
48
- doc = "This trait is implemented for tuples up to 16 items long."
46
+ doc = "This trait is implemented for tuples up to 12 items long."
49
47
) ]
50
48
impl < T1 : ?Sized > Tuple for ( T1 , ) {
51
49
const N : usize = 1 ;
@@ -54,7 +52,7 @@ impl<T1: ?Sized> Tuple for (T1,) {
54
52
#[ cfg_attr( docsrs, doc( fake_variadic) ) ]
55
53
#[ cfg_attr(
56
54
docsrs,
57
- doc = "This trait is implemented for tuples up to 16 items long."
55
+ doc = "This trait is implemented for tuples up to 12 items long."
58
56
) ]
59
57
impl < T > HomogeneousTuple < T > for ( T , ) {
60
58
type Array = [ T ; 1 ] ;
@@ -63,13 +61,11 @@ impl<T> HomogeneousTuple<T> for (T,) {
63
61
where
64
62
Self : Sized ,
65
63
{
66
- [ self . 0 ]
64
+ self . into ( )
67
65
}
68
66
69
67
fn from_array ( array : Self :: Array ) -> Self {
70
- let res = unsafe { transmute_copy :: < Self :: Array , Self > ( & array) } ;
71
- forget ( array) ;
72
- res
68
+ array. into ( )
73
69
}
74
70
}
75
71
@@ -108,20 +104,18 @@ macro_rules! impl_tuple {
108
104
where
109
105
Self : Sized
110
106
{
111
- [ $ ( self . $i , ) * self . $last_i ]
107
+ self . into ( )
112
108
}
113
109
114
110
fn from_array( array: Self :: Array ) -> Self {
115
- let res = unsafe { transmute_copy:: <Self :: Array , Self >( & array) } ;
116
- forget( array) ;
117
- res
111
+ array. into( )
118
112
}
119
113
}
120
114
}
121
115
}
122
116
123
117
/*
124
- for n in range(2, 17 ):
118
+ for n in range(2, 13 ):
125
119
print(f"impl_tuple!({n} => {', '.join(f'T{i} {i - 1}' for i in range(1, n))}; T{n} {n - 1});")
126
120
*/
127
121
impl_tuple ! ( 2 => T1 0 ; T2 1 ) ;
@@ -135,10 +129,6 @@ impl_tuple!(9 => T1 0, T2 1, T3 2, T4 3, T5 4, T6 5, T7 6, T8 7; T9 8);
135
129
impl_tuple ! ( 10 => T1 0 , T2 1 , T3 2 , T4 3 , T5 4 , T6 5 , T7 6 , T8 7 , T9 8 ; T10 9 ) ;
136
130
impl_tuple ! ( 11 => T1 0 , T2 1 , T3 2 , T4 3 , T5 4 , T6 5 , T7 6 , T8 7 , T9 8 , T10 9 ; T11 10 ) ;
137
131
impl_tuple ! ( 12 => T1 0 , T2 1 , T3 2 , T4 3 , T5 4 , T6 5 , T7 6 , T8 7 , T9 8 , T10 9 , T11 10 ; T12 11 ) ;
138
- impl_tuple ! ( 13 => T1 0 , T2 1 , T3 2 , T4 3 , T5 4 , T6 5 , T7 6 , T8 7 , T9 8 , T10 9 , T11 10 , T12 11 ; T13 12 ) ;
139
- impl_tuple ! ( 14 => T1 0 , T2 1 , T3 2 , T4 3 , T5 4 , T6 5 , T7 6 , T8 7 , T9 8 , T10 9 , T11 10 , T12 11 , T13 12 ; T14 13 ) ;
140
- impl_tuple ! ( 15 => T1 0 , T2 1 , T3 2 , T4 3 , T5 4 , T6 5 , T7 6 , T8 7 , T9 8 , T10 9 , T11 10 , T12 11 , T13 12 , T14 13 ; T15 14 ) ;
141
- impl_tuple ! ( 16 => T1 0 , T2 1 , T3 2 , T4 3 , T5 4 , T6 5 , T7 6 , T8 7 , T9 8 , T10 9 , T11 10 , T12 11 , T13 12 , T14 13 , T15 14 ; T16 15 ) ;
142
132
143
133
#[ cfg( test) ]
144
134
mod test {
@@ -189,10 +179,10 @@ mod test {
189
179
}
190
180
191
181
#[ test]
192
- fn test_from_array_16 ( ) {
182
+ fn test_from_array_12 ( ) {
193
183
test_from_array ! (
194
184
String , String , String , String , String , String , String , String , String , String , String ,
195
- String , String , String , String , String
185
+ String
196
186
) ;
197
187
}
198
188
}
0 commit comments