Skip to content

Commit 5242464

Browse files
committed
Merge trait and impl macros by using an inner module
1 parent c1eb539 commit 5242464

File tree

1 file changed

+124
-129
lines changed

1 file changed

+124
-129
lines changed

src/libcore/tuple.rs

Lines changed: 124 additions & 129 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ use vec;
1616

1717
#[cfg(not(test))] use cmp::{Eq, Ord};
1818

19+
pub use self::getters::*;
20+
1921
pub trait CopyableTuple<T, U> {
2022
fn first(&self) -> T;
2123
fn second(&self) -> U;
@@ -246,152 +248,145 @@ impl<A:Ord,B:Ord,C:Ord> Ord for (A, B, C) {
246248
fn gt(&self, other: &(A, B, C)) -> bool { (*other).lt(&(*self)) }
247249
}
248250

249-
// Tuple element accessor traits
251+
// Tuple element getters
250252

251-
macro_rules! n_tuple(
252-
($name:ident: $($method:ident : $T:ident),+) => (
253-
pub trait $name<$($T),+> {
254-
$(fn $method(&self) -> $T;)+
253+
macro_rules! tuple_getters(
254+
($(
255+
$name:ident {
256+
$(fn $method:ident -> $T:ident { $accessor:pat => $t:expr })+
255257
}
256-
)
257-
)
258-
259-
n_tuple!(Tuple2: n0:A, n1:B)
260-
n_tuple!(Tuple3: n0:A, n1:B, n2:C)
261-
n_tuple!(Tuple4: n0:A, n1:B, n2:C, n3:D)
262-
n_tuple!(Tuple5: n0:A, n1:B, n2:C, n3:D, n4:E)
263-
n_tuple!(Tuple6: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F)
264-
n_tuple!(Tuple7: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G)
265-
n_tuple!(Tuple8: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G, n7:H)
266-
n_tuple!(Tuple9: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G, n7:H, n8:I)
267-
n_tuple!(Tuple10: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G, n7:H, n8:I, n9:J)
268-
n_tuple!(Tuple11: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G, n7:H, n8:I, n9:J, n10:K)
269-
n_tuple!(Tuple12: n0:A, n1:B, n2:C, n3:D, n4:E, n5:F, n6:G, n7:H, n8:I, n9:J, n10:K, n11:L)
270-
271-
// Tuple element accessor trait implementations
272-
273-
macro_rules! impl_n_tuple(
274-
($name:ident: $($method:ident -> $T:ident { $accessor:pat => $t:expr })+) => (
275-
impl<$($T:Copy),+> $name<$($T),+> for ($($T),+) {
276-
$(
277-
fn $method(&self) -> $T {
278-
match *self {
279-
$accessor => $t
258+
)+) => (
259+
pub mod getters {
260+
use kinds::Copy;
261+
262+
$(pub trait $name<$($T),+> {
263+
$(fn $method(&self) -> $T;)+
264+
})+
265+
266+
$(impl<$($T:Copy),+> $name<$($T),+> for ($($T),+) {
267+
$(
268+
#[inline(always)]
269+
fn $method(&self) -> $T {
270+
match *self {
271+
$accessor => $t
272+
}
280273
}
281-
}
282-
)+
274+
)+
275+
})+
283276
}
284277
)
285278
)
286279

287-
impl_n_tuple!(Tuple2:
288-
n0 -> A { (a,_) => a }
289-
n1 -> B { (_,b) => b }
290-
)
280+
tuple_getters!(
281+
Tuple2 {
282+
fn n0 -> A { (a,_) => a }
283+
fn n1 -> B { (_,b) => b }
284+
}
291285

292-
impl_n_tuple!(Tuple3:
293-
n0 -> A { (a,_,_) => a }
294-
n1 -> B { (_,b,_) => b }
295-
n2 -> C { (_,_,c) => c }
296-
)
286+
Tuple3 {
287+
fn n0 -> A { (a,_,_) => a }
288+
fn n1 -> B { (_,b,_) => b }
289+
fn n2 -> C { (_,_,c) => c }
290+
}
297291

298-
impl_n_tuple!(Tuple4:
299-
n0 -> A { (a,_,_,_) => a }
300-
n1 -> B { (_,b,_,_) => b }
301-
n2 -> C { (_,_,c,_) => c }
302-
n3 -> D { (_,_,_,d) => d }
303-
)
292+
Tuple4 {
293+
fn n0 -> A { (a,_,_,_) => a }
294+
fn n1 -> B { (_,b,_,_) => b }
295+
fn n2 -> C { (_,_,c,_) => c }
296+
fn n3 -> D { (_,_,_,d) => d }
297+
}
304298

305-
impl_n_tuple!(Tuple5:
306-
n0 -> A { (a,_,_,_,_) => a }
307-
n1 -> B { (_,b,_,_,_) => b }
308-
n2 -> C { (_,_,c,_,_) => c }
309-
n3 -> D { (_,_,_,d,_) => d }
310-
n4 -> E { (_,_,_,_,e) => e }
311-
)
299+
Tuple5 {
300+
fn n0 -> A { (a,_,_,_,_) => a }
301+
fn n1 -> B { (_,b,_,_,_) => b }
302+
fn n2 -> C { (_,_,c,_,_) => c }
303+
fn n3 -> D { (_,_,_,d,_) => d }
304+
fn n4 -> E { (_,_,_,_,e) => e }
305+
}
312306

313-
impl_n_tuple!(Tuple6:
314-
n0 -> A { (a,_,_,_,_,_) => a }
315-
n1 -> B { (_,b,_,_,_,_) => b }
316-
n2 -> C { (_,_,c,_,_,_) => c }
317-
n3 -> D { (_,_,_,d,_,_) => d }
318-
n4 -> E { (_,_,_,_,e,_) => e }
319-
n5 -> F { (_,_,_,_,_,f) => f }
320-
)
307+
Tuple6 {
308+
fn n0 -> A { (a,_,_,_,_,_) => a }
309+
fn n1 -> B { (_,b,_,_,_,_) => b }
310+
fn n2 -> C { (_,_,c,_,_,_) => c }
311+
fn n3 -> D { (_,_,_,d,_,_) => d }
312+
fn n4 -> E { (_,_,_,_,e,_) => e }
313+
fn n5 -> F { (_,_,_,_,_,f) => f }
314+
}
321315

322-
impl_n_tuple!(Tuple7:
323-
n0 -> A { (a,_,_,_,_,_,_) => a }
324-
n1 -> B { (_,b,_,_,_,_,_) => b }
325-
n2 -> C { (_,_,c,_,_,_,_) => c }
326-
n3 -> D { (_,_,_,d,_,_,_) => d }
327-
n4 -> E { (_,_,_,_,e,_,_) => e }
328-
n5 -> F { (_,_,_,_,_,f,_) => f }
329-
n6 -> G { (_,_,_,_,_,_,g) => g }
330-
)
316+
Tuple7 {
317+
fn n0 -> A { (a,_,_,_,_,_,_) => a }
318+
fn n1 -> B { (_,b,_,_,_,_,_) => b }
319+
fn n2 -> C { (_,_,c,_,_,_,_) => c }
320+
fn n3 -> D { (_,_,_,d,_,_,_) => d }
321+
fn n4 -> E { (_,_,_,_,e,_,_) => e }
322+
fn n5 -> F { (_,_,_,_,_,f,_) => f }
323+
fn n6 -> G { (_,_,_,_,_,_,g) => g }
324+
}
331325

332-
impl_n_tuple!(Tuple8:
333-
n0 -> A { (a,_,_,_,_,_,_,_) => a }
334-
n1 -> B { (_,b,_,_,_,_,_,_) => b }
335-
n2 -> C { (_,_,c,_,_,_,_,_) => c }
336-
n3 -> D { (_,_,_,d,_,_,_,_) => d }
337-
n4 -> E { (_,_,_,_,e,_,_,_) => e }
338-
n5 -> F { (_,_,_,_,_,f,_,_) => f }
339-
n6 -> G { (_,_,_,_,_,_,g,_) => g }
340-
n7 -> H { (_,_,_,_,_,_,_,h) => h }
341-
)
326+
Tuple8 {
327+
fn n0 -> A { (a,_,_,_,_,_,_,_) => a }
328+
fn n1 -> B { (_,b,_,_,_,_,_,_) => b }
329+
fn n2 -> C { (_,_,c,_,_,_,_,_) => c }
330+
fn n3 -> D { (_,_,_,d,_,_,_,_) => d }
331+
fn n4 -> E { (_,_,_,_,e,_,_,_) => e }
332+
fn n5 -> F { (_,_,_,_,_,f,_,_) => f }
333+
fn n6 -> G { (_,_,_,_,_,_,g,_) => g }
334+
fn n7 -> H { (_,_,_,_,_,_,_,h) => h }
335+
}
342336

343-
impl_n_tuple!(Tuple9:
344-
n0 -> A { (a,_,_,_,_,_,_,_,_) => a }
345-
n1 -> B { (_,b,_,_,_,_,_,_,_) => b }
346-
n2 -> C { (_,_,c,_,_,_,_,_,_) => c }
347-
n3 -> D { (_,_,_,d,_,_,_,_,_) => d }
348-
n4 -> E { (_,_,_,_,e,_,_,_,_) => e }
349-
n5 -> F { (_,_,_,_,_,f,_,_,_) => f }
350-
n6 -> G { (_,_,_,_,_,_,g,_,_) => g }
351-
n7 -> H { (_,_,_,_,_,_,_,h,_) => h }
352-
n8 -> I { (_,_,_,_,_,_,_,_,i) => i }
353-
)
337+
Tuple9 {
338+
fn n0 -> A { (a,_,_,_,_,_,_,_,_) => a }
339+
fn n1 -> B { (_,b,_,_,_,_,_,_,_) => b }
340+
fn n2 -> C { (_,_,c,_,_,_,_,_,_) => c }
341+
fn n3 -> D { (_,_,_,d,_,_,_,_,_) => d }
342+
fn n4 -> E { (_,_,_,_,e,_,_,_,_) => e }
343+
fn n5 -> F { (_,_,_,_,_,f,_,_,_) => f }
344+
fn n6 -> G { (_,_,_,_,_,_,g,_,_) => g }
345+
fn n7 -> H { (_,_,_,_,_,_,_,h,_) => h }
346+
fn n8 -> I { (_,_,_,_,_,_,_,_,i) => i }
347+
}
354348

355-
impl_n_tuple!(Tuple10:
356-
n0 -> A { (a,_,_,_,_,_,_,_,_,_) => a }
357-
n1 -> B { (_,b,_,_,_,_,_,_,_,_) => b }
358-
n2 -> C { (_,_,c,_,_,_,_,_,_,_) => c }
359-
n3 -> D { (_,_,_,d,_,_,_,_,_,_) => d }
360-
n4 -> E { (_,_,_,_,e,_,_,_,_,_) => e }
361-
n5 -> F { (_,_,_,_,_,f,_,_,_,_) => f }
362-
n6 -> G { (_,_,_,_,_,_,g,_,_,_) => g }
363-
n7 -> H { (_,_,_,_,_,_,_,h,_,_) => h }
364-
n8 -> I { (_,_,_,_,_,_,_,_,i,_) => i }
365-
n9 -> J { (_,_,_,_,_,_,_,_,_,j) => j }
366-
)
349+
Tuple10 {
350+
fn n0 -> A { (a,_,_,_,_,_,_,_,_,_) => a }
351+
fn n1 -> B { (_,b,_,_,_,_,_,_,_,_) => b }
352+
fn n2 -> C { (_,_,c,_,_,_,_,_,_,_) => c }
353+
fn n3 -> D { (_,_,_,d,_,_,_,_,_,_) => d }
354+
fn n4 -> E { (_,_,_,_,e,_,_,_,_,_) => e }
355+
fn n5 -> F { (_,_,_,_,_,f,_,_,_,_) => f }
356+
fn n6 -> G { (_,_,_,_,_,_,g,_,_,_) => g }
357+
fn n7 -> H { (_,_,_,_,_,_,_,h,_,_) => h }
358+
fn n8 -> I { (_,_,_,_,_,_,_,_,i,_) => i }
359+
fn n9 -> J { (_,_,_,_,_,_,_,_,_,j) => j }
360+
}
367361

368-
impl_n_tuple!(Tuple11:
369-
n0 -> A { (a,_,_,_,_,_,_,_,_,_,_) => a }
370-
n1 -> B { (_,b,_,_,_,_,_,_,_,_,_) => b }
371-
n2 -> C { (_,_,c,_,_,_,_,_,_,_,_) => c }
372-
n3 -> D { (_,_,_,d,_,_,_,_,_,_,_) => d }
373-
n4 -> E { (_,_,_,_,e,_,_,_,_,_,_) => e }
374-
n5 -> F { (_,_,_,_,_,f,_,_,_,_,_) => f }
375-
n6 -> G { (_,_,_,_,_,_,g,_,_,_,_) => g }
376-
n7 -> H { (_,_,_,_,_,_,_,h,_,_,_) => h }
377-
n8 -> I { (_,_,_,_,_,_,_,_,i,_,_) => i }
378-
n9 -> J { (_,_,_,_,_,_,_,_,_,j,_) => j }
379-
n10 -> K { (_,_,_,_,_,_,_,_,_,_,k) => k }
380-
)
362+
Tuple11 {
363+
fn n0 -> A { (a,_,_,_,_,_,_,_,_,_,_) => a }
364+
fn n1 -> B { (_,b,_,_,_,_,_,_,_,_,_) => b }
365+
fn n2 -> C { (_,_,c,_,_,_,_,_,_,_,_) => c }
366+
fn n3 -> D { (_,_,_,d,_,_,_,_,_,_,_) => d }
367+
fn n4 -> E { (_,_,_,_,e,_,_,_,_,_,_) => e }
368+
fn n5 -> F { (_,_,_,_,_,f,_,_,_,_,_) => f }
369+
fn n6 -> G { (_,_,_,_,_,_,g,_,_,_,_) => g }
370+
fn n7 -> H { (_,_,_,_,_,_,_,h,_,_,_) => h }
371+
fn n8 -> I { (_,_,_,_,_,_,_,_,i,_,_) => i }
372+
fn n9 -> J { (_,_,_,_,_,_,_,_,_,j,_) => j }
373+
fn n10 -> K { (_,_,_,_,_,_,_,_,_,_,k) => k }
374+
}
381375

382-
impl_n_tuple!(Tuple12:
383-
n0 -> A { (a,_,_,_,_,_,_,_,_,_,_,_) => a }
384-
n1 -> B { (_,b,_,_,_,_,_,_,_,_,_,_) => b }
385-
n2 -> C { (_,_,c,_,_,_,_,_,_,_,_,_) => c }
386-
n3 -> D { (_,_,_,d,_,_,_,_,_,_,_,_) => d }
387-
n4 -> E { (_,_,_,_,e,_,_,_,_,_,_,_) => e }
388-
n5 -> F { (_,_,_,_,_,f,_,_,_,_,_,_) => f }
389-
n6 -> G { (_,_,_,_,_,_,g,_,_,_,_,_) => g }
390-
n7 -> H { (_,_,_,_,_,_,_,h,_,_,_,_) => h }
391-
n8 -> I { (_,_,_,_,_,_,_,_,i,_,_,_) => i }
392-
n9 -> J { (_,_,_,_,_,_,_,_,_,j,_,_) => j }
393-
n10 -> K { (_,_,_,_,_,_,_,_,_,_,k,_) => k }
394-
n11 -> L { (_,_,_,_,_,_,_,_,_,_,_,l) => l }
376+
Tuple12 {
377+
fn n0 -> A { (a,_,_,_,_,_,_,_,_,_,_,_) => a }
378+
fn n1 -> B { (_,b,_,_,_,_,_,_,_,_,_,_) => b }
379+
fn n2 -> C { (_,_,c,_,_,_,_,_,_,_,_,_) => c }
380+
fn n3 -> D { (_,_,_,d,_,_,_,_,_,_,_,_) => d }
381+
fn n4 -> E { (_,_,_,_,e,_,_,_,_,_,_,_) => e }
382+
fn n5 -> F { (_,_,_,_,_,f,_,_,_,_,_,_) => f }
383+
fn n6 -> G { (_,_,_,_,_,_,g,_,_,_,_,_) => g }
384+
fn n7 -> H { (_,_,_,_,_,_,_,h,_,_,_,_) => h }
385+
fn n8 -> I { (_,_,_,_,_,_,_,_,i,_,_,_) => i }
386+
fn n9 -> J { (_,_,_,_,_,_,_,_,_,j,_,_) => j }
387+
fn n10 -> K { (_,_,_,_,_,_,_,_,_,_,k,_) => k }
388+
fn n11 -> L { (_,_,_,_,_,_,_,_,_,_,_,l) => l }
389+
}
395390
)
396391

397392
#[test]

0 commit comments

Comments
 (0)