cl_aux/
tuple_impls.rs

1use crate::{Capacity, CapacityUpperBound, Clear, Length, SizeHint, Truncate};
2
3macro_rules! tuple_impls {
4  ($(
5    $tuple_len:tt {
6      $(($idx:tt) -> $T:ident)*
7    }
8  )+) => {
9    $(
10      impl<$( $T, )*> Capacity for ($( $T, )*) {
11        #[inline]
12        fn capacity(&self) -> usize {
13          $tuple_len
14        }
15      }
16
17      impl<$( $T, )*> CapacityUpperBound for ($( $T, )*) {
18        const CAPACITY_UPPER_BOUND: usize = $tuple_len;
19      }
20
21      #[allow(non_snake_case)]
22      impl<$( $T: Clear, )*> Clear for ($( $T, )*) {
23        #[inline]
24        fn clear(&mut self) {
25          $( self.$idx.clear(); )*
26        }
27      }
28
29      impl<$( $T, )*> Length for ($( $T, )*) {
30        #[inline]
31        fn length(&self) -> usize {
32          $tuple_len
33        }
34      }
35
36      impl<$( $T, )*> SizeHint for ($( $T, )*) {
37        #[inline]
38        fn size_hint(&self) -> (usize, Option<usize>) {
39          ($tuple_len, Some($tuple_len))
40        }
41      }
42
43      #[allow(non_snake_case)]
44      impl<$( $T: Truncate, )*> Truncate for ($( $T, )*) {
45        type Input = ($( $T::Input, )*);
46
47        #[inline]
48        fn truncate(&mut self, input: Self::Input) {
49          $( self.$idx.truncate(input.$idx); )*
50        }
51      }
52    )+
53  }
54}
55
56tuple_impls! {
57  1 {
58    (0) -> A
59  }
60  2 {
61    (0) -> A
62    (1) -> B
63  }
64  3 {
65    (0) -> A
66    (1) -> B
67    (2) -> C
68  }
69  4 {
70    (0) -> A
71    (1) -> B
72    (2) -> C
73    (3) -> D
74  }
75  5 {
76    (0) -> A
77    (1) -> B
78    (2) -> C
79    (3) -> D
80    (4) -> E
81  }
82  6 {
83    (0) -> A
84    (1) -> B
85    (2) -> C
86    (3) -> D
87    (4) -> E
88    (5) -> F
89  }
90  7 {
91    (0) -> A
92    (1) -> B
93    (2) -> C
94    (3) -> D
95    (4) -> E
96    (5) -> F
97    (6) -> G
98  }
99  8 {
100    (0) -> A
101    (1) -> B
102    (2) -> C
103    (3) -> D
104    (4) -> E
105    (5) -> F
106    (6) -> G
107    (7) -> H
108  }
109  9 {
110    (0) -> A
111    (1) -> B
112    (2) -> C
113    (3) -> D
114    (4) -> E
115    (5) -> F
116    (6) -> G
117    (7) -> H
118    (8) -> I
119  }
120  10 {
121    (0) -> A
122    (1) -> B
123    (2) -> C
124    (3) -> D
125    (4) -> E
126    (5) -> F
127    (6) -> G
128    (7) -> H
129    (8) -> I
130    (9) -> J
131  }
132  11 {
133    (0) -> A
134    (1) -> B
135    (2) -> C
136    (3) -> D
137    (4) -> E
138    (5) -> F
139    (6) -> G
140    (7) -> H
141    (8) -> I
142    (9) -> J
143    (10) -> K
144  }
145  12 {
146    (0) -> A
147    (1) -> B
148    (2) -> C
149    (3) -> D
150    (4) -> E
151    (5) -> F
152    (6) -> G
153    (7) -> H
154    (8) -> I
155    (9) -> J
156    (10) -> K
157    (11) -> L
158  }
159}